Python數據分析 | 正態分布與t檢驗

2021-12-17 好奇心Log

點擊下方公眾號,回復資料,收穫驚喜

今天來說說連續變量與分類變量(二分)之間的檢驗。

通俗的來講,就是去發現變量間的關係。

連續變量數量為一個,分類變量數量為兩個。

總體:包含所有研究個體的集合。

樣本:經過抽樣總體中的部分個體。

均值:變量的數值之和除以變量的個數。

極差:變量的最大值與最小值之差。

方差標準差反映數據的離散程度,其值越大,數據波動越大。

/ 01 / 正態分布

在實際情況裡,總體的信息往往難以獲取,所以需要抽樣,通過樣本來估計總體。

點估計和區間估計是通過樣本來估計總體的兩種方法。

那麼樣本是否能夠代表總體就是關鍵點,樣本需要具有代表性。

點估計:用樣本統計量去估計總體參數。

區間估計:不同於點估計,能夠提供待估計參數的置信區間和置信度。

區間估計用到了中心極限定理,表現為如果抽樣多次,每次抽樣都有一個均值,產生的多個均值服從正態分布。

就可以利用正態分布的性質,推斷出樣本均值出現在某區間範圍的概率。

正態分布:關於均值左右對稱的,呈鐘形。且均值和標準差具有代表性。均值=中位數=眾數。

在現實生活中,男女身高(性別有影響需區分開)、體重、考試成績都是屬於正態分布。

影響它們的變量都是獨立互不影響的。

接下來對豆瓣電影TOP250裡的電影評分進行分析。

首先讀取數據。

import matplotlib.pyplot as plt
from scipy import stats
import seaborn as sns
import pandas as pd

# 讀取文件
df = pd.read_csv('douban.csv', header=0, names=["quote", "score", "info", "title", "people"])
dom1 = []
# 清洗數據,獲取國家列,1為中國,2為外國
for i in df['info']:
    country = i.split('/')[1].split(' ')[0].strip()
    if country in ['中國大陸', '臺灣', '香港']:
        dom1.append(1)
    else:
        dom1.append(0)
df['country'] = dom1

生成電影評分直方圖,觀察其是否符合正態分布。

# distplot:集合功能,kde:顯示核密度估計圖,fit:控制擬合的參數分布圖形,本次為擬合正態分布
sns.distplot(df.score, kde=True, fit=stats.norm)
plt.show()

運行代碼後得到下圖,發現電影評分分布近似正態分布。

生成電影評分QQ圖,觀察電影評分與正態分布的接近程度。

# qqplot檢驗數據是否服從正態分布
sm.qqplot(df.score, fit=True, line='45')
plt.show()

運行代碼後得到下圖,其中樣本點越靠近紅色線說明變量越趨近正態分布,結論顯而易見。

區間估計,計算95%保證程度下的區間估計範圍。

# 標準差
se = df.score.std() / len(df) ** 0.5
# 均值下限
LB = df.score.mean() - 1.98 * se
# 均值上限
UB = df.score.mean() + 1.98 * se
print(LB, UB)
# 得到的結果
8.782710866637895 8.849289133362106

即在95%的置信度下,電影評分的總體均值位於區間「8.7827-8.8492」內。

定義函數,計算不同置信度下的置信區間。

def confint(x, alpha=0.05):
    """計算不同置信度下的置信區間"""
    n = len(x)
    xb = x.mean()
    df = n - 1
    tmp = (x.std() / n ** 0.5) * stats.t.ppf(1-alpha/2, df)
    return {'Mean': xb, 'Degree of Freedom': df, 'LB': xb-tmp, 'UB': xb+tmp}

result = confint(df.score, 0.05)
print(result)
# 得到的結果
{'LB': 8.782886780076549, 'UB': 8.849113219923453, 'Degree of Freedom': 249, 'Mean': 8.816}

即在99%的置信度下,電影評分的總體均值位於區間「8.7828-8.8491」內。

/ 02 / t檢驗

01 假設檢驗

在研究變量時,對分布的性質進行一定的假設,然後通過抽樣來檢驗假設是否成立。

這似乎與我們中學時代的反證法有點類似,假設需要證明的東西成立,然後去反推。

其中實際抽樣結果與假設的差異程度可以用概率值表示,為「p-value」。

概率值越大意味著越無差異,越接近。

人為設定一個「p-value」的閾值將差異程度判斷為「有差異」或「無差異」,這個閾值就是「顯著性水平」。

目前接觸的原假設都是設置為等值假設,本次假設電影評分均值為8.8。

顯著性水平的設置根據樣本容量,本次取顯著性水平為0.05。

最後的結論就是「p-value」值小於顯著性水平時,差異明顯,有理由拒絕原假設。

「p-value」值大於顯著性水平時,差異較小,那麼就不能拒絕原假設。

這裡書本沒有對「p-value」如何查表取值詳細解說,需要百度查詢。

02 單樣本t檢驗

單樣本t檢驗是最基礎的假設檢驗,其利用來自總體的樣本數據,推斷總體均值是否與假設的檢驗值之間存在顯著差異。

P值大於顯著性水平,則無法拒絕原假設。

P值小於顯著性水平,則拒絕原假設。

下面在Python中進行單樣本t檢驗,使用電影評分數據,假設均值為8.8分。

# stas:列聯表
d1 = sm.stats.DescrStatsW(df.score)
print('t-statistic=%6.4f, p-value=%6.4f, df=%s' %d1.ttest_mean(8.8))
# 得到的結果
t-statistic=-2.0223, p-value=0.3422, df=249.0

P值為0.3422,如果規定顯著性水平為0.05,那麼就無法拒絕原假設。

即電影評分均值為8.8分的原假設成立。

03 雙樣本t檢驗

雙樣本t檢驗是檢驗兩個樣本均值的差異是否顯著。

常用於檢驗某二分類變量區分下的某連續變量是否有顯著差異。

本次使用豆瓣電影TOP250中中外國家電影評分數據。

研究電影評分受國家的影響是否顯著(之前分析的結論是沒什麼影響)。

# 對數據分組匯總
print(df['score'].groupby(df['country']).describe())

得到結果如下,發現均值還是有一點點差異的。

接下來用雙樣本t檢驗來看這種差異是否顯著。

在進行雙樣本t檢驗前,有三個基本條件需要考慮。

①觀測之間獨立(本次滿足)

②兩組均服從正態分布(本次滿足)

①兩組樣本的方差是否相同(需檢驗)

上面的結果已經包含了樣本評分均值的方差了,可是書裡卻說還需要進行方差齊性分析。

這一點不是很理解,就當多學點東西吧。

方差齊性檢驗的原假設為兩組數據方差相同。

# levene:方差齊性檢驗
country0 = df[df['country'] == 0]['score']
country1 = df[df['country'] == 1]['score']
leveneTestRes = stats.levene(country0, country1, center='median')
print('w-value=%6.4f, p-value=%6.4f' %leveneTestRes)
# 得到的結果
w-value=0.5855, p-value=0.4449

P值為0.4449,若以0.05為顯著性水平,則無法拒絕原假設。

即中國電影評分和外國電影評分的方差是相同的

因此進行方差齊性的雙樣本t檢驗。

# equal_var=True:兩組數據方差齊性
print(stats.stats.ttest_ind(country0, country1, equal_var=True))
# 得到的結果
Ttest_indResult(statistic=0.9331710237657628, pvalue=0.3516393015610625)

P值為0.35,若以0.05為顯著性水平,則無法拒絕原假設。

說明中國電影評分和外國電影評分無顯著差異

/ 03 / 總結

學習這一部分內容,最大的困惑就是「p-value」的取值。

書上沒講明白如何用公式確定其值,只是通過Pyhton直接結算得出結果。

網上查取的資料也是零零散散,解釋的不夠全面。

文末點個讚,比心!!!

數據處理·機器學習·可視化

行業資訊·學習資料

相關焦點

  • 方差、標準差、正態分布、超幾何分布、卡方檢驗、t檢驗基礎概念
    正態分布(Normal distribution),也稱「常態分布」,又名高斯分布,正態曲線呈鍾型,兩頭低,中間高,左右對稱因其曲線呈鐘形,因此人們又經常稱之為鐘形曲線。若隨機變量X服從一個數學期望為μ、方差為σ^2的正態分布,記為N(μ,σ^2)。其概率密度函數為正態分布的期望值μ決定了其位置,其標準差標準差σ決定了分布的幅度。當μ = 0,σ = 1時的正態分布是標準正態分布。
  • R統計-正態性分布檢驗[Translation]
    包括相關、回歸、t檢驗和方差分析在內的許多統計方法都假設數據服從正態分布或高斯分布。這些測試被稱為參數檢驗,因為它們的有效性取決於數據的分布。
  • 小白學Python數據分析-Python初識和t分布實例
    接下來,我們就用這兩個庫來完成t分布的簡單實現。在概率論和統計學中,t分布用於根據小樣本來估計呈正態分布且方差未知的總體的均值。如果總體方差已知(例如在樣本數量足夠多時),則應該用正態分布來估計總體均值。t分布曲線形態與n(確切地說與自由度df)大小有關。與標準正態分布曲線相比,自由度df越小,t分布曲線愈平坦,曲線中間愈低,曲線雙側尾部翹得愈高;自由度df愈大,t分布曲線愈接近正態分布曲線,當自由度df=∞時,t分布曲線為標準正態分布曲線。
  • 正態分布的常用數據 - CSDN
    #尋找真知派#如上一篇文章所述,樣本所屬總體服從正態分布是數據分析和數據挖掘等數據處理的重要前提。如果我們採集的樣本並不能確認其總體是否服從正態分布,那麼數據處理的結果就是不可靠的。因此,對樣本數據進行正態分布檢驗十分必要。
  • R與生物專題 | 第六講 R-數據正態分布檢驗
    在「R與生物統計專題」中,我們會從介紹R的基本知識展開到生物統計原理及其在R中的實現。
  • SPSS正態分布以及方差齊性檢驗以及Wilcox檢驗
    方差分析、t-test等基本上都是我們常用的工具,但是還是有不少小夥伴,特別是剛入坑的小夥伴分不清楚,今天是說幾句,老司機也可以收藏給以後的師弟師妹。第二篇關於三種t檢驗的適用情況說明(單一樣本t檢驗,配對樣本t檢驗,獨立樣本t檢驗),是我幾天前看到採集而來,一併放到這裡做個簡單的匯總。t檢驗要求數據正態分布以及方差齊性。
  • 數據分析之正態分布檢驗及python實現
    正太性檢驗 利用觀測數據判斷總體是否服從正態分布的檢驗稱為正態性檢驗,它是統計判決中重要的一種特殊的擬合優度假設檢驗。QQ圖判斷# QQ圖通過把測試樣本數據的分位數與已知分布相比較,從而來檢驗數據的分布情況# QQ圖是一種散點圖,對應於正態分布的QQ圖,就是由標準正態分布的分位數為橫坐標,樣本值為縱坐標的散點圖# 參考直線:四分之一分位點和四分之三分位點這兩點確定,看散點是否落在這條線的附近# 繪製思路#
  • R與Python之基本統計分析(一) ---- t檢驗
    常常聽到有些連什麼統計方法都不懂的人都會說,做個 t 檢驗看看嘛今天,我們就先自己定義幾組數據,然後再使用《R 語言實戰》中一個數據包來驗證一下我們的方法學。首先,我們利用 R 語言隨機生成一組正態分布的數據。這組正態分布的數據分為 group_1 和 group_2 兩組,不管是 group_1 還是 group_2,均數均為 5,標準差為 1。
  • Python數據科學:正態分布與t檢驗
    區間估計用到了中心極限定理,表現為如果抽樣多次,每次抽樣都有一個均值,產生的多個均值服從正態分布。就可以利用正態分布的性質,推斷出樣本均值出現在某區間範圍的概率。正態分布:關於均值左右對稱的,呈鐘形。且均值和標準差具有代表性。均值=中位數=眾數。在現實生活中,男女身高(性別有影響需區分開)、體重、考試成績都是屬於正態分布。
  • python 生成正態分布數據,並繪圖和解析
    這篇文章主要介紹了python 生成正態分布數據,並繪圖和解析,幫助大家更好的利用python進行數據分析,感興趣的朋友可以了解下
  • 使用 R 與 python 進行 t 檢驗
    實際上 t 檢驗並沒有限制樣本的數量,資料上反而講到,t分布是接近標準正態分布的鐘型分布,當樣本量大於 30 時,通常使用正態分布。也就是說只要是正態分布或近似正態分布,就可以使用 t 檢驗。t檢驗是用 t 分布理論來推論差異發生的概率,他的檢驗有三種類型:例如,假設我們調查了一組男學生的身高,看看他們的平均值是否等於 170 cm。
  • 【教育統計答疑】如何理解正態分布、均值分布、χ^2分布、t分布和F分布
    正態分布的重要性還體現在用樣本數據來推斷總體時,當樣本的數量足夠大的時,可以利用樣本的某些特徵數據服從正態分布,進行推斷,獲得準確的結果。正態分布一般記作  x~N(μ, σ^2),它的分布函數表達式為 其中,π是圓周率;e是自然對數的底;x為隨機變量的取值;μ為正態分布的均值(期望),σ^2是正態分布的方差。
  • SPSS教程|手把手教你如何判斷數據是否服從正態分布
    在進行統計推斷前,你一定要首先了解數據分布,否則得到的統計結論就是無效的!比如,T檢驗、方差檢驗的前提假設都是數據呈正態分布,如果你的數據不滿足正態分布,則需要轉化成正態分布或使用非參數檢驗方法。小編今天帶大家了解一下,如何判斷數據是否服從正態分布呢?!
  • 常用統計檢驗的Python實現
    正態性檢驗是檢驗數據是否符合正態分布,也是很多統計建模的必要步驟,在Python中實現正態性檢驗可以使用W檢驗(SHAPIRO-WILK TEST)檢驗原假設:樣本服從正態分布Python基本假定:每個樣本中的觀察是獨立同分布的每個樣本的觀察都是正態分布的每個樣本的觀察具有相同的方差所有變量都是連續型變量檢驗原假設:兩個變量不相關Python命令:corr,p
  • 正態分布的應用——基於描述性統計與分布的推論
    分布的類型:上期主要給大家介紹了正態分布,其實除了正態分布,還有很多的分布類型,今天就給大家科普一下。標準的二分布、均勻分布這樣的古典概型產生的分布,在這裡就不給大家介紹了。本次介紹的分布,也是統計中較為常用的類型。
  • 偏度與峰度的正態性分布判斷
  • 審稿人說,你的數據是偏態分布的,統計方法不對?怎麼辦?
    鄭老師的第一反映是,你是不是又不分正態偏態,統統拿過來進行t檢驗了吧?這一點,確實該受到批評。這年頭,秩和檢驗方法又不是什麼難以通過SPSS實現的方法,你就不試試?一般出於兩點情況,第一,有些變量,理論上就是偏態分布的。第二,標準差特別大,在觀察值都是正值的情況下,標準差比均數還要大。比如,下面的例子,病程的標準差比均數還要大,那麼就可以懷疑是偏態分布。
  • 常用統計檢驗的Python實現和結果解釋
    正態性檢驗是檢驗數據是否符合正態分布,也是很多統計建模的必要步驟,在Python中實現正態性檢驗可以使用W檢驗(SHAPIRO-WILK TEST)檢驗原假設:樣本服從正態分布Python命令 stat,
  • 【乾貨】統計學×數據分析|信度|卡方|施測|統計量|正態分布_網易...
    描述統計分為集中趨勢分析和離中趨勢分析和相關分析三大部分。  集中趨勢分析  集中趨勢分析主要靠平均數、中數、眾數等統計指標來表示數據的集中趨勢。 例如被試的平均成績多少? 是正偏分布還是負偏分布?用推論統計方法進行數據處理,最後會得出類似這樣兒的結論: 「研究發現,大學畢業生組的成績顯著高於初中畢業生組的成績,二者在0.01水平上具有顯著性差異,說明大學畢業生的一些智力測驗成績優於中學畢業生組。 」  正態性檢驗  很多統計方法都要求數值服從或近似服從正態分布,所以之前需要進行正態性檢驗。
  • python數據分析--回歸函數及線性回歸分析
    1.常見的回歸函數2.工具數據分析有很多成熟的工具可以使用,如R、python、此處我們選用python進行分析。首先,我們需要安裝並導入python數據分析常用的庫。result.params)  # 對應的各個變量的權重resid = result.resid  # 輸出殘差print(type(resid))    # <class 'pandas.core.series.Series'>print(stats.normaltest(result.resid.values)) #對殘差進行正態分布檢驗