資料探勘基礎之統計學的假設檢驗實驗
本部落格根據非常好的excel資料而編寫,使用python語言操作,預計使用一週的時間更新完成。需要《非常好的excel資料》word文件,歡迎發郵件給[email protected],免費發放。這篇部落格對應《非常好的excel資料》裡的第3章節。
1.假設檢驗實驗
1.1 單個正態總體均值μ的檢驗
1.1.1 方差已知時μ的U檢驗
①題目及資料
外地一良種作物,其1000m2產量(單位:kg)服從N(800, 〖50〗^2),引入本地試種,收穫時任取5塊地,其1000m2產量分別是800,850,780,900,820(kg),假定引種後1000m2產量X也服從正態分佈,試問::
(1)若方差未變,本地平均產量μ與原產地的平均產量μ0=800kg 有無顯著變化
(2)本地平均產量μ是否比原產地的平均產量μ0=800kg高.
(3)本地平均產量μ是否比原產地的平均產量μ0=800kg低.
U檢驗值:(樣本平均畝產量-原產地總平均產量)/(總方差/樣本數)
可以看出U檢驗值小於臨界值(雙側),所以本地平均產量μ是否比原產地的平均產量μ0=800kg無顯著變化
U檢驗值小於臨界值(右側),所以本地平均產量μ是否比原產地的平均產量μ0=800kg高
U檢驗值大於臨界值(右側),所以本地平均產量μ是否比原產地的平均產量μ0=800kg低
② 對於(1)問python程式碼如下:
def VarisknforU(a,m1,mn,stdn,n):
u=(m1-mn)/(stdn/np.sqrt(n))
uall=stats.norm.ppf(1-a/2)
print('u的檢驗值:',u)
print('臨界值(雙側)',uall)
if(u<uall):
print('無顯著變化')
else:
print('有顯著變化')
結果圖
④ 對於(2)問python程式碼如下:
def VarisknforUright(a,m1,mn,stdn,n): u=(m1-mn)/(stdn/np.sqrt(n)) uall=stats.norm.ppf(1-a) print('u的檢驗值:',u) print('臨界值(右側)',uall) if(u<uall): print('高於') else: print('不高於')
結果圖
⑤對於(3)問python程式碼:
def VarisknforUleft(a,m1,mn,stdn,n):
u=(m1-mn)/(stdn/np.sqrt(n))
uall=stats.norm.ppf(a)
print('u的檢驗值:',u)
print('臨界值(左側)',uall)
if(u<uall):
print('低於')
else:
print('不低於')
結果圖
1.1.2 方差未知時t的U檢驗
①題目:樣本的資料為 ,該引擎製造商宣稱引擎的平均速度高於250 km/h,請問樣本資料在顯著性水平為0.025時,是否和他的宣告抵觸。
② python程式碼如下
def Varisnoforright(a,m1,mn,stdn,n):
u=(m1-mn)/(stdn/np.sqrt(n))
uall=t.ppf(1-a,n-1)
print('檢驗值:',u)
print('臨界值',uall)
if(u<uall):
print('高於')
else:
print('不高於')
結果圖
1.2 兩個正態總體引數的假設檢驗
1.21 方差相等但未知時,求u1-u2的檢驗
①題目:判別磷肥對玉米產量有無顯著影響
實驗假設:H_0:u_1=u_2 ,u_(1 )>u_2
因為3.034>1.73 ,所以拒絕原假設,即有顯著影響
②python程式碼
ins321=pd.read_csv('D:\ins321.csv',encoding= 'gbk')
a = ins321['實驗區1']
b = ins321['實驗區2']
ttest_ind(a,b)
結果圖
因為0.0071386<0.05,所以拒絕原假設,即均值差異不顯著
1.22 方差1和2已知u_1-u_2的U檢測
python程式碼
import pandas as pd
ins322=pd.read_csv('D:\ins322.csv',encoding='gbk',dtype={'code':int})
ins322
ins3221=ins322['第一組']
ins3222 = ins322['第二組']
m2 = ins3222.mean()
m1 = ins3221.mean()
def U_test3(*args):
import numpy as np
from scipy import stats
tails, mean1, var1, n1, mean2, var2, n2 = [i for i in args]
segma_combine = np.sqrt(var1 / n1 + var2 / n2) # 需要先計算x1-x2的均方,即合併均方
u = abs(mean1 - mean2) / segma_combine
if tails == 2:
p = (1 - stats.norm.cdf(u, 0, 1)) * 2
if tails == 1:
p = 1 - stats.norm.cdf(u, 0, 1)
if p < 0.01:
print('extremely significant!')
elif p < 0.05:
print('significant!')
else:
print('unsignificant!')
print('u_value: %.6f,p_value: %.6f' % (u, p))
return [u, p]
執行程式碼
U_test3(2, m1,57 , 10, m2, 53, 10)
結果圖
1.23 兩個正態總體的方差齊性的F檢驗
0.144119<5.118597,所以拒絕原假設,即方差不齊
python操作如下
0.424569>0.05,所以拒絕原假設
1.3 備註
1、原假設(又稱零假設),是假定總體引數未發生變化,備擇假設(又稱對立假設),是假定總體引數發生變化。
2、因為原假設假定總體引數未發生變化,而備擇假設假定總體引數發生了變化,所以,“=”總體在原假設上
3、如果備擇假設為總體發生了特定方向的變化,則備擇假設去”=”,為雙側方向,假設檢驗為雙側檢驗(又稱雙尾檢驗);如果備擇假設為總體引數沿某一方向發生了變化,則備擇假設含有”>”或“<”符號,備擇假設為單向,假設檢驗為單側檢驗(又稱單尾檢驗),單側檢驗又可進一步分為左側單尾檢驗和右側單尾檢驗。根據備擇假設的表述,假設檢驗的方向可以區分為:
(a) 備擇假設 H1:θ=θ0為雙側假設,相應的假設檢驗稱為雙側檢驗。
(b) 備擇假設 H1:θ<θ0為左向假設,相應的假設檢驗稱為左側檢驗。
© 備擇假設 H1:θ>θ0 為右側假設,相應的假設檢驗稱為右側檢驗。
4、備擇假設是我們想真正檢驗的假設
上一篇部落格:區間估計的練習題
下一篇部落格:擬合優度檢驗