python方差分析

目錄

一元方差分析

一元單因素方差分析

 一元多因素方差分析

協方差分析 


 

一元方差分析

一元單因素方差分析

場景:5種不同像素的數碼相機(單因素)對銷量(研究的因變量)是否有顯著差異

G = dc_sales['pixel'].unique()
args = []
for I in list(G):
    args.append(dc_sales[dc_sales['pixel']==I]['sales'])
# 將pixel變量轉化爲分類變量併爲其值掛標籤
dc_sales['pixel']=dc_sales['pixel'].astype('category')
dc_sales['pixel'].cat.categories=['500像素以下','500-600萬像素','600-800萬像素','800-1000萬像素','1000萬像素以上']
dc_sales['pixel'].cat.set_categories=['500像素以下','500-600萬像素','600-800萬像素','800-1000萬像素','1000萬像素以上']

 

若方差齊性檢驗不滿足

1、檢查某些特殊表現的觀測值,剔除

2、使用無方差齊性的多重比較方法

3、數據變換(log/正態)

4、非參數檢驗

 

#1.方差齊性檢驗
stats.levene(*args)【p越大越滿足方差齊性】
#2.f檢驗
stats.f_oneway(*args)
#2.2 更詳細的結果
from statsmodels.formula.api import ols
dc_sales_anova=sm.stats.anova_lm(ols('sales ~ C(pixel)',dc_sales).fit())
print dc_sales_anova
>>              df      sum_sq     mean_sq       F     pr(>F)
>>C(pixcel)     4       10472       2618        19    1.5e-08
>>Residual      35      4682        133         NaN    NaN

組間離差平方和(SSA)=10472,組內離差平方和(SSE)=4682

組間方差=10472/4,組內方差=4682/35

多重比較檢驗

F檢驗只能回答多組之間的均值不同,但不不能說是哪幾組不同

通過2組配對比較,可以看哪幾組均值存在差異

from statsmodels.stats.multicomp import pairwise_tukeyhsd
ds_sales_anova_post=pairwise_tukeyhsd(dc_sales['sales'],dc_sales['pixel'].alpha=0.5)
dc_sales_anova_post.summary()
# 對5種不同像素兩兩對比,10個結果,看meandiff和P值即可
# 當然多重檢驗會有問題,這裏有多重檢驗校正之類的

 一元多因素方差分析

因素單獨對因變量產生的影響爲主效應,因素之間共同對因變量產生的影響稱爲交互作用

多因素方差分析假定因素和因變量之間的關係是線性關係

# 只考慮主效應
formula = 'space ~ C(education)+C(unit)+C(income)+C(type)'
house_anova = sm.stats.anova_lm(ols(formula,data=house).fit(),typ=3)
#typ=3代表作方差分析type3型檢驗
print house_anova

>>                 sum_sq        df           F           PR(>F)
Intercept           28663         1          89           1.5e-19
C(eudcation)         1519         3          1.58         1.9e-01
C(unit)              886          5          0.55         7.3e-01
C(income)           10545         4          8.25         1.99e-06
C(type)              9604        10          3            1.09e-03
Residual           143477        449         NaN           NaN          

這個結果與直接ols很像,但是不一樣哦,比如income有四個類型,ols的結果會把這四個類型的每個p值等等也會顯現出來~

# 有交互效應
formula = 'space ~ C(income)*C(type)'
house_anova_inter=sm.stats.anova_lm(ols(formula,data=house).fit())

協方差分析 

將方差分析與迴歸分析結合【個人覺得協方差分析=廣義線性迴歸】

方差分析:一個或幾個因子(分類變量) 對Y(連續變量)的影響

迴歸分析:一個或幾個變量(連續變量) 對Y(連續變量)的影響

將那些難以控制的因素當作協變量,在排除協變量影響的條件下,分析可控因素對因變量的影響

注意:協變量往往是連續型變量

因變量=因素主效應+因素交互效應+協變量+隨機誤差

例子:排除協變量(即返點【因銷售人員表現】指定)作用後,分析賣場因素和售後服務因素對銷售量的影響,爲企業後面選址和指定服務條款提供參考意見

formula='sales~points+C(market)*C(warranty)'
sale_points_anova_cov=sm.stats.anova_lm(ols(formula,data=sale_points).fit())

注意理解這裏排除points,其實在ols中的結果每一條都是固定其他不變,這一條的單獨影響,所以協方差分析和ols如出一轍 

 

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