數理統計(一)——用Python進行方差分析



  iwehdio的博客園:https://www.cnblogs.com/iwehdio/

  方差分析可以用來推斷一個或多個因素在其狀態變化時,其因素水平或交互作用是否會對實驗指標產生顯著影響。主要分為單因素方差分析、多因素無重復方差分析和多因素重復方差分析。
  做數理統計課后題,發現方差分析計算比較麻煩,想用Python掉包實現。但是發現大多教程對參數的講解不是很清楚,在此做記錄。
  主要用到的庫是pandas和statsmodels。簡要流程是,先用pandas庫的DataFrame數據結構來構造輸入數據格式。然后用statsmodels庫中的ols函數得到最小二乘線性回歸模型。最后用statsmodels庫中的anova_lm函數進行方差分析。

import pandas as pd
import numpy as np
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm

​   首先,是輸入的數據格式。使用pandas的DataFrame,每一行為一次試驗的因素水平和試驗結果。以下圖中的題目為例。

  則對於因素A和因素B即結果R可表示為如下的DataFrame:

data = pd.DataFrame([[1, 1, 32],
                     [1, 2, 35],
                     [1, 3, 35.5],
                     [1, 4, 38.5],
                     [2, 1, 33.5],
                     [2, 2, 36.5],
                     [2, 3, 38],
                     [2, 4, 39.5],
                     [3, 1, 36],
                     [3, 2, 37.5],
                     [3, 3, 39.5],
                     [3, 4, 43]], 
                    columns=['A', 'B', 'value'])

​   第一列為因素A的水平,第二列為因素B的水平,第三列為試驗結果。在方差分析中,只關心每次試驗中因素水平是否相同,所以我們可以把較為復雜的因素水平抽象為標簽值 1,2,3。  

​   然后,輸入ols函數。主要用到該函數的兩個參數,formula和data。
  formula指定了:
        ①試驗結果是哪一列。
        ②需要計算的是哪幾個因素水平對結果的影響。
        ③是否計算交互作用。

  formula的類型為字符串,輸入格式為如果試驗結果的列名為‘value’,需要計算的因素的列名為‘A’和‘B’,則示例如下。

# 因素A的水平對結果的影響
'value ~ C(A)'

# 因素A和因素B的水平對結果的影響
'value ~ C(A) + C(B)'

# 因素A和因素B以及A和B的交互作用的水平對結果的影響
'value ~ C(A) + C(B) + C(A)*C(B)'

# 多因素無重復試驗,不計算交互作用的影響
model = ols('value~C(A) + C(B)', data=data[['A', 'B', 'value']]).fit()
anovat = anova_lm(model)
print(anovat)

  data為之前生成的DataFrame中選出的進行分析所需要的列,實際上ols是通過DataFrame的列名來獲得試驗結果和因素水平的數據的。
  最后用ols函數進行最小二乘線性擬合,用anova_lm函數進行方差分析並輸出結果。之前題目輸出的結果為:

  Residual表示誤差,df表示自由度,sum_sq表示離差平方和,mean_sq表示均方離差,F表示F值,PR(>F)表示F值所對應的顯著水平α。
  進行單因素多方差分析,將formula中的C(B)去掉即可。如果是對於有重復的多因素方差分析,示例如下:

  結果為: 

 

 

參考:施雨 《應用數理統計(西安交通大學)》 課后習題 4.1,4.3,4.5,4.6,4.9
   python做單因素方差分析:https://www.cnblogs.com/jin-liang/p/9852321.html
   Python數據科學:方差分析:https://blog.csdn.net/Kaitiren/article/details/85066793

iwehdio的博客園:https://www.cnblogs.com/iwehdio/


免責聲明!

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



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