資料探勘之方差分析實驗
阿新 • • 發佈:2018-12-20
本部落格根據非常好的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)
結果圖如下
下一篇:方差分析實驗練習題
上一篇:假設檢驗實驗和擬合優度檢驗練習題