python样本期望值_用 python 做 z 检验,t 检验
文章目錄
1. z 檢驗
2. t 檢驗
Python 中的假設檢驗一般用到 scipy 或 statsmodels 包,需要注意的是,這兩個包里面各種檢驗的置信度都是 0.05。
1. z 檢驗
對于大樣本數據(樣本量 ≥ \geq≥ 30),或者即使是小樣本,但是知道其服從正態分布,并且知道總體分布的方差時,需要用 z 檢驗。在 python 中,由于 scipy 包沒有 z 檢驗,我們只能用 statsmodels 包中的 ztest 函數。ztest 函數的一般用法如下:
ztest(x1, x2=None, value=0, alternative=`two-sided’)
輸入參數:
x1
數組,第一個樣本的數據值
x2
數組,第二個樣本的數據值,默認沒有值
value
浮點型數值,若是單樣本,則 value 是樣本假設的均值
若是雙樣本,則 value是兩個樣本均值的差值
alternative
若為 `larger’,備選假設 H1 大于 value 值
若為 `smaller’,備選假設 H1 小于 value 值
輸出參數:
tstats
統計量值
pvalue
p 值
假設有下面表格的數據:
23
36
42
34
39
34
35
42
53
28
49
39
46
45
39
38
45
27
43
54
36
34
48
36
47
44
48
45
44
33
24
40
50
32
39
31
檢測其均值是否為 39, 該問題顯然是一個雙側檢驗,由于樣本個數大于 30,則使用 z 檢驗,python 代碼如下:
>>> import statsmodels.stats.weightstats as sw
>>> arr=[23,36,42,34,39,34,35,42,53,28,49,39,
... 46,45,39,38,45,27,43,54,36,34,48,36,
... 47,44,48,45,44,33,24,40,50,32,39,31]
>>> sw.ztest(arr, value=39)
(0.3859224924939799, 0.6995540720244979)
從 ztest 的運行結果可以看出,統計量值為 0.385,而 p 值是 0.699,在置信度 α = 0.05 \alpha=0.05α=0.05 時,由于 p 值大于 α \alphaα,接受原假設,認為該樣本的均值是 39。
若要檢測該樣本均值是否大于 39,即原假設 H0:μ > 39 \mu>39μ>39,備選假設為:μ ≤ 39 \mu\leq 39μ≤39,則我們需要在代碼中增加一個參數 alternative=``smaller”:
>>> sw.ztest(arr, value=39, alternative="smaller")
(0.3859224924939799, 0.650222963987751)
檢測結果的 p 值為 0.650,大于置信度 0.05,則接受原假設,認為樣本均值大于39。假設另外一個樣本 2 的數據:
41
34
36
32
32
35
33
31
35
34
37
34
31
36
37
34
33
37
33
38
38
37
34
36
36
31
33
36
37
35
33
34
33
35
34
34
34
35
35
34
檢測兩個樣本的均值是否相等,因為兩個樣本都是大樣本,使用 z 檢驗, python 代碼如下:
>>> arr2 = [41, 34, 36, 32, 32, 35, 33, 31, 35, 34,
... 37, 34, 31, 36, 37, 34, 33, 37, 33, 38,
... 38, 37, 34, 36, 36, 31, 33, 36, 37, 35,
... 33, 34, 33, 35, 34, 34, 34, 35, 35, 34]
>>> sw.ztest(arr, arr2, value=0)
(3.775645601380307, 0.0001595937672736755)
從 ztest 的檢驗結果可以看出,p 值小于 0.05, 則拒絕原假設,認為兩個樣本的均值不相等。
2. t 檢驗
小樣本(樣本量小于30個),一般用 t 檢驗。對于 t 檢驗,可以根據樣本特點,用 scipy 包中的 ttest_1sample(單樣本 t檢驗函數),ttest_ind(兩個獨立樣本的 t 檢驗),ttest_rel (兩個匹配樣本的 t 檢驗)。但這些函數得到都是雙側 t 檢驗的 p 值。如果是單側檢驗,我們還要進行一些換算,得到單側檢驗的 p 值。
ttest_1sample 函數的語法為:
ttest_1samp(a, popmean)
輸入參數:
a
數組,樣本的數據值
popmean
原假設 H 0 H_0H0? 中樣本的期望值
輸出參數:
tstats
統計量值
pvalue
p 值
下面是一個樣本的數據:
99.3 98.7 100.5 101.2 98.3 99.7 99.5 102.1 100.5 99.3\quad 98.7\quad 100.5\quad 101.2\quad 98.3\quad 99.7\quad 99.5\quad 102.1\quad 100.599.398.7100.5101.298.399.799.5102.1100.5
檢測樣本均值是否等于100,對其進行雙側 t 檢驗的語法為:
>>> import scipy.stats as st
>>> a = [99.3, 98.7, 100.5, 101.2, 98.3, 99.7, 99.5, 102.1, 100.5]
>>> st.ttest_1samp(a, 100)
Ttest_1sampResult(statistic=-0.054996133220328265, pvalue=0.9574902045208937)
從結果可以看出,雙側檢驗的 p 值為 0.95, 大于置信度 0.05,因此接受原假設,認為樣本的均值是100。若是單側檢驗中的左側檢驗,則 p 值為 0.957 / 2 = 0.4785 0.957/2=0.47850.957/2=0.4785,若是右側檢驗,則 p 值為 1 ? 0.957 / 2 = 0.5215 1-0.957/2=0.52151?0.957/2=0.5215。
假設有另外一個樣本的數據:
91.1 93.7 93.6 96.1 94.3 92.2 94.0 95.7 97.1 91.1\quad 93.7\quad 93.6\quad 96.1\quad 94.3\quad 92.2\quad 94.0\quad 95.7\quad 97.191.193.793.696.194.392.294.095.797.1
若兩個樣本相互獨立,檢測兩個樣本的均值是否相等,使用 ttest_ind 函數。
ttest_ind 函數的語法為:
ttest_ind(a, b, axis=0, equal_var=True)
輸入參數:
a
數組,樣本的數據值
b
數組,樣本2的數據值
axis
一般為 0
equal_var
若為 true,表示兩個樣本由相同的方差
若為 false,表示兩個樣本的方差不同,使用合并方差
輸出參數:
tstats
統計量值
pvalue
p 值
假設兩個樣本的方差不同,則獨立雙樣本的 t 檢驗 python 代碼為:
\begin{lstlisting}[Language=Python]
>>> a = [99.3, 98.7, 100.5, 101.2, 98.3, 99.7, 99.5, 102.1, 100.5]
>>> b = [91.1, 93.7, 93.6, 96.1, 94.3, 92.2, 94.0, 95.7, 97.1]
>>> st.ttest_ind(a, b, equal_var = False)
Ttest_indResult(statistic=7.723221821038956, pvalue=2.4331092243754622e-06)
從上面結果可以看出,p 值小于置信度 0.05,拒絕原假設,認為兩個兩個樣本的均值不同。
若兩個樣本是匹配樣本,使用函數 ttest_rel,它的語法更簡單,只需在函數里輸入兩個樣本的數組即可。假設上面兩個樣本為匹配樣本,python 代碼為:
>>> import scipy.stats as st
>>> a = [99.3, 98.7, 100.5, 101.2, 98.3, 99.7, 99.5, 102.1, 100.5]
>>> b = [91.1, 93.7, 93.6, 96.1, 94.3, 92.2, 94.0, 95.7, 97.1]
>>> st.ttest_rel(a, b)
Ttest_relResult(statistic=10.845107419335658, pvalue=4.617509769582176e-06)
結果顯示,p 值小于置信度 0.05,拒絕原假設,認為這兩個匹配樣本的均值不同。
總結
以上是生活随笔為你收集整理的python样本期望值_用 python 做 z 检验,t 检验的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 面试有没有看过spring源码_如何看S
- 下一篇: linux 使cpu使用率升高_Linu