python做單因素方差分析


方差分析的主要功能就是驗證兩組樣本,或者兩組以上的樣本均值是否有顯著性差異,即均值是否一樣。

這里有兩個大點需要注意:①方差分析的原假設是:樣本不存在顯著性差異(即,均值完全相等);②兩樣本數據無交互作用(即,樣本數據獨立)這一點在雙因素方差分析中判斷兩因素是否獨立時用。

原理:

方差分析的原理就一個方程:SST=SS組間+SSR組內  (全部平方和=組間平方和+組內平方和)

說明:方差分析本質上對總變異的解釋。

  • 組間平方和=每一組的均值減去樣本均值
  • 組內平方和=個體減去每組平方和

方差分析看的最終結果看的統計量是:F統計量、R2

其中:g為組別個數,n為每個組內數據長度。

python實現:

from scipy import stats
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm
from statsmodels.stats.multicomp import pairwise_tukeyhsd
import warnings
warnings.filterwarnings("ignore")

import itertools

df2=pd.DataFrame()
df2['group']=list(itertools.repeat(-1.,9))+ list(itertools.repeat(0.,9))+list(itertools.repeat(1.,9))

df2['noise_A']=0.0
for i in data['A'].unique():
    df2.loc[df2['group']==i,'noise_A']=data.loc[data['A']==i,['1','2','3']].values.flatten()
    
df2['noise_B']=0.0
for i in data['B'].unique():
    df2.loc[df2['group']==i,'noise_B']=data.loc[data['B']==i,['1','2','3']].values.flatten()  
    
df2['noise_C']=0.0
for i in data['C'].unique():
    df2.loc[df2['group']==i,'noise_C']=data.loc[data['C']==i,['1','2','3']].values.flatten()  
    
df2

# for A
anova_reA= anova_lm(ols('noise_A~C(group)',data=df2[['group','noise_A']]).fit())
print(anova_reA)
#B
anova_reB= anova_lm(ols('noise_B~C(group)',data=df2[['group','noise_B']]).fit())
print(anova_reB)
#C
anova_reC= anova_lm(ols('noise_C~C(group)',data=df2[['group','noise_C']]).fit())
print(anova_reC)

  從結果可以看出,A、B兩樣本,在每個組間均值顯著無差異,C樣本的組間均值是有差異的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM