datawhale學習小組 Task4:方差分析

基本概念

方差分析(Analysis of variance, ANOVA) :——又稱“變異數分析”
①用於兩個及兩個以上樣本均數差別的顯著性檢驗
②主要研究分類變量作爲自變量時,對因變量的影響是否是顯著

(1)組間因子 & 組內因子

組間因子:同一結果在同一變量的不同維度上單次試驗

組內因子:同一結果在同一變量的不同維度上反覆試驗

(2)自變量 & 因變量

自變量:可以自由改變的量;因變量:隨着自變量的改變而改變的量
簡單點說,自變量是“原因”,而因變量就是“結果”

(3)均衡設計(balanced design) & 非均衡設計(unbalanced design)

研究組間變量時,設計的試驗在每個組間因子下的觀測數是否相等,相等就叫均衡設計(試驗),否則,就叫非均衡設計(試驗)

(4)主效應 & 交互效應

(5)單因素方差分析(one-way ANOVA)——單因素組間方差分析

(6)單因素組內方差分析——重複測量方差分析

(7)因素方差分析設計【雙因素方差分析、三因素方差分析等】

(8)混合模型方差分析

(9)混淆因素(confounding factor)也被稱作干擾變數(nuisance variable)


以焦慮症治療爲例,
現有兩種治療方案:認知行爲療法(CBT)和眼動脫敏再加工法(EMDR)。
招募10位焦慮症患者作爲志願者,
隨機分配一半的人接受爲期五週的CBT,另外一半接受爲期五週的EMDR,
設計方案如表1-1所示。在治療結束時,要求每位患者都填寫狀態特質焦慮問卷(STAI),也就是一份焦慮度測量的自我評測報告

表1-1 單因素組間方差分析

CBT EMDR
s1 s6
s2 s7
s3 s8
s4 s9
s5 s10

治療方案CBT和治療方案EMDR是組間因子,因爲每位患者都僅被分配到一個組別中,沒有患者同時接受CBT和EMDR。表中字母s代表受試者(患者)。STAI是因變量,治療方案是自變量(CBT、EMDR是治療方案的不同維度)。由於在每種治療方案下觀測數相等,因此這種設計也稱爲均衡設計(balanced design);若觀測數不同,則稱作非均衡設計(unbalanced design)。

因爲僅有一個類別型變量,表1的統計設計又稱爲單因素方差分析(one-way ANOVA),或進一步稱爲單因素組間方差分析

方差分析主要通過F檢驗來進行效果評測,若治療方案的F檢驗顯著,則說明五週後兩種療法的STAI得分均值不同


方差分析基本步驟

研究分類型自變量對數值型因變量的影響
實際就是多個樣本的均值比較
注意:數據必須是兩列數值數據(分類型數值、度量值)
步驟:
F檢驗 原假設:三個品牌壽命方差沒有顯著差異
備擇假設:三個品牌壽命方差有顯著差異
注意:F檢驗結果中顯著性>0.05纔算方差齊
ANOVA檢驗結果
原假設:三個品牌電池壽命的均值相等(三個品牌電池壽命方差沒有顯著差異)
備擇假設:三個品牌電池壽命的均值不全相等(三個品牌電池壽命方差有顯著差異)
事後檢驗-----方差齊 LSD; 方差不齊 T2
事後多重比較是兩兩對比均值
4、 P<0.05,接受備擇假設,兩總體均值有顯著性差異
P>0.05,接受原假設,兩總體均值不存在顯著性差異

案例—python實現

from scipy.stats import f_oneway
a = [87,86,76,56,78,98,77,66,75,67]   #羣體1成績    
b = [87,85,99,85,79,81,82,78,85,91]  #羣體2成績
c = [89,91,96,87,89,90,89,96,96,93]  #羣體3成績

#計算F值
f,p = f_oneway(a,b,c)
print(f,p)

在這裏插入圖片描述

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

treatment = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]    #處理 變量 
gender    = [1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2]    #性別
loss      = [76,78,76,76,76,74,74,76,76,55,65,90,65,90,65,90,90,79,70,90, 88,76,76,76,56,76,76,98,88,78,65,67,67,87,78,56,54,56,54,56]  #體重減少 

data = {'T':treatment, 'G':gender, 'L':loss}
df = pd.DataFrame(data)
formula = 'L~T+G+T:G'                           #~ 隔離因變量和自變量 (左邊因變量,右邊自變量 )
                                                #+ 分隔各個自變量, :表示兩個自變量交互影響 
model = ols(formula,df).fit()                   # 根據公式數據建模,擬合
results = anova_lm(model)                       # 計算F和P
print(results)

在這裏插入圖片描述

import pandas as pd
import numpy as np
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm
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的水平對結果的影響  '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 (model.summary())
print (anovat)

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

# # 如果是直接導入excel,通過pandas讀取excel後,得到df,那麼就不需要在ols()函數中data選擇列,直接加入df
# model = ols('value~C(group) + C(time)',df).fit()  
# anovat = anova_lm(model)
# print (model.summary())
# print (anovat)
# #進行單因素多方差分析,將formula中的C(B)去掉即可。
# #如果是對於有重複的多因素方差分析,將formula中加上C(A)*C(B)

在這裏插入圖片描述

總結

方差分析的思想就是通過方差比較各族羣之間有沒有差異,
其中就是計算組內均方和和組間均方和,然後代入統計量做顯著性檢驗
方差分析可以算是個線性模型,在統計學上面的檢驗原理和線性迴歸是差不多的

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

原理

SST=SS組間+SSR組內 (全部平方和=組間平方和+組內平方和)

說明

方差分析本質上對總變異的解釋。
組間平方和=每一組的均值減去樣本均值
組內平方和=個體減去每組平方和
方差分析看的最終結果看的統計量是:F統計量、R2

參考資料:
datawhale組隊學習——《率統計(四)-方差分析》
Task3:常見分佈與假設檢驗
python中anova方差分析

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章