本博客根据非常好的excel资料而编写,使用python语言操作,预计使用一周的时间更新完成。需要《非常好的excel资料》word文档,欢迎发邮件给1982500361@qq.com,免费发放。这篇博客对应《非常好的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)
结果图如下
下一篇:方差分析实验练习题
上一篇:假设检验实验和拟合优度检验练习题