1. 程式人生 > >資料探勘基礎之統計學的假設檢驗實驗

資料探勘基礎之統計學的假設檢驗實驗

本部落格根據非常好的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、備擇假設是我們想真正檢驗的假設

上一篇部落格:區間估計的練習題
下一篇部落格:擬合優度檢驗