数据挖掘之方差分析实验

本博客根据非常好的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)

结果图如下
在这里插入图片描述
下一篇:方差分析实验练习题
上一篇:假设检验实验和拟合优度检验练习题

猜你喜欢

转载自blog.csdn.net/qq_31089125/article/details/84855286