1. 程式人生 > >資料探勘之方差分析實驗

資料探勘之方差分析實驗

本部落格根據非常好的excel資料而編寫,使用python語言操作,預計使用一週的時間更新完成。需要《非常好的excel資料》word文件,歡迎發郵件給[email protected],免費發放。這篇部落格對應《非常好的excel資料》裡的第5章節。

1.1 單因素方差分析

資料
在這裡插入圖片描述
Python程式碼如下:

import pandas as pd
from scipy import stats
args = [d1,d2,d3,d4]
w,p = stats.levene(*args)
#levene方差齊性檢驗。levene(*args, **kwds)  Perform Levene test for equal variances.如果p<0.05,則方差不齊
print (w,p)
#進行方差分析
f,p = stats.f_oneway(*args)
print (f,p)

結果圖:在這裡插入圖片描述
即1.305047是F統計量的計算值,
0.317978745>0.05接受假設,即無顯著差異

1.2 雙因素無重複試驗的方差分析

Python程式碼

varfangcha2 = varfangcha.iloc[:20,19:22]
aa1=varfangcha.iloc[1:5,13:19]
aa2 =aa1.iloc[0:,1:]
a1=aa2.values   #dataframe型別轉numpy.ndarray型別
c=a1.reshape(1,20).tolist() #改形狀
c=c[0]
c= list(map(eval,c)) #將list裡的值轉成int型,返回map型,前需要加list
a = varfangcha2['a']
b = varfangcha2['b']
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm
formula = 'c~ a + b '
anova_results = anova_lm(ols(formula,varfangcha2).fit())
print(anova_results)

結果圖
在這裡插入圖片描述
可以看出0.000052<0.05,拒絕原假設
0.23528>0.05接受假設

from statsmodels.stats.multicomp import pairwise_tukeyhsd
print(pairwise_tukeyhsd(c, varfangcha2['a']))

結果圖
在這裡插入圖片描述
可以看出a1,a4和a2,a4和a3,a4這組有顯著性差異
所以因素a對實驗有顯著影響,因素b無顯著影響

1.3雙因素等重複試驗方差分析

①資料
在這裡插入圖片描述
python操作程式碼

def Somesumvalue(r,s,l,ins521):
    soth = []  #所有縱行的和(12個)
    for i in range(0,r*l,l):
        soth+=list(ins521[i:i+l].sum())
    rowsum = []  #所有行的和(4個)
    for i in range(0,len(soth),s):
        rowsum.append(np.sum(soth[i:i+s]))  
    colsum = []  #所有列的和(3個)
    for i in range(s):
        colsum.append(sum(soth[i:len(soth):s]))
    return soth,rowsum,colsum

def Mapmultwo(val):
    return val**2

def Somekeyvalue(r,s,l,ins521):
    soth,rowsum,colsum=Somesumvalue(r,s,l,ins521)
    ssall = sum(colsum)
    P = ssall**2/(r*s*l)
    
    ssoth = list(map(Mapmultwo,soth))
    R = np.sum(ssoth)/l
    
    rrowsum = list(map(Mapmultwo,rowsum))
    Qa = sum(rrowsum)/(s*l)

    ccolsum = list(map(Mapmultwo,colsum))
    Qb = sum(ccolsum)/(r*l)

    allval = list(ins521.values.reshape(1,r*s*l)[0])
    W = sum(list(map(Mapmultwo,allval)))
    return P,Qa,Qb,R,W    
def Somefinal(r,s,l,ins521):
    
    P,Qa,Qb,R,W = Somekeyvalue(r,s,l,ins521)
    Sa = Qa - P
    Sb = Qb - P
    Se = W - R
    St = W - P
    Si = R-Qa-Qb + P
    
    Da = r-1
    Db = s-1
    Di = (r-1)*(s-1)
    De = r*s*(l-1)
    
    MSa = Sa/(r-1)
    MSb = Sb/(s-1)
    MSi = Si/((r-1)*(s-1))
    MSe = Se/(r*s*(l-1))
    
    Fa = MSa/MSe
    Fb = MSb/MSe
    Fi = MSi/MSe
    from scipy.stats import f
    Fcrita = f.ppf(1-0.05,(r-1),r*s*(l-1))
    Fcritb = f.ppf(1-0.05,(s-1),r*s*(l-1))
    Fcriti = f.ppf(1-0.05,(r-1)*(s-1),r*s*(l-1))
    print('多因素重複實驗方差分析:')
    print('差異源\t','SS\t\t','    df\t','\tMS\t','\t','F\t\t','    F crit')
    print('樣本\t %.6f'%Sa,'\t %.6f'%Da,'\t %.6f'%MSa,'\t %.6f'%Fa,'\t %.6f'%Fcrita)
    print('列\t %.6f'%Sb,'\t %.6f'%Db,'\t%.6f'%MSb,'\t%.6f'%Fb,'\t %.6f'%Fcritb)
    print('互動\t%.6f'%Si,'\t %.6f'%Di,'\t%.6f'%MSi,'\t%.6f'%Fi,'\t %.6f'%Fcriti)
    print('內部\t%.6f'%Se,'\t %.6f'%De,'\t %.6f'%MSe)
    return Fa,Fb,Fi,Fcrita,Fcritb,Fcriti
    
def Compare(r,s,l,ins521):
    Fa,Fb,Fi,Fcrita,Fcritb,Fcriti = Somefinal(r,s,l,ins521)
    print('\n假設命題是否接受情況:')
    if(Fa>Fcrita):
        print('樣本拒絕原假設')
    else:
        print('樣本接受原假設')
        
    if(Fb>Fcritb):
        print('列拒絕原假設')
    else:
        print('列接受原假設')
    
    if(Fi>Fcriti):
        print('互動間拒絕原假設')
    else:
        print('互動間接受原假設')

執行語句

l=2
r = int(ins521.shape[0]/l)
s = ins521.shape[1]
Compare(r,s,l)

結果圖如下
在這裡插入圖片描述
下一篇:方差分析實驗練習題
上一篇:假設檢驗實驗和擬合優度檢驗練習題