方差分析(一元單因素)

利用樣本數(shù)據(jù)檢驗(yàn)兩個(gè)或兩個(gè)以上總體均值是否存在差異。

本例根據(jù)給定數(shù)據(jù)的三個(gè)指標(biāo):市場(chǎng),像素,銷量,研究像素大小是否會(huì)對(duì)相機(jī)銷量產(chǎn)生影響?

方差分析中,把影響因變量的可控制的定性變量或離散變量稱之為‘因素’;而各個(gè)因素具有的表現(xiàn)稱之為‘水平’。

本例中像素?cái)?shù)pixel便是影響因變量的一個(gè)因素,其具有5個(gè)水平。

而影響因變量的定性變量或連續(xù)型變量稱之為‘協(xié)變量’。

如銷售人員獎(jiǎng)金對(duì)銷售量的影響,獎(jiǎng)金可作為影響銷售量的一個(gè)協(xié)變量。

其他條件相同的情況下,本例要解決的問題就歸結(jié)為一個(gè)多總體的檢驗(yàn)問題,即檢驗(yàn)成像元器件的像素?cái)?shù)對(duì)銷量是否有影響?

把每一類不同像素的數(shù)碼相機(jī)總銷量分別看成是不同的總體,該問題便轉(zhuǎn)化為如下的假設(shè)檢驗(yàn)問題:

H0:u1=u2=u3=u4=u5;  H1:u1,u2,u3,u4,u5不完全相等
一元單因素方差分析主要研究單獨(dú)一個(gè)因素對(duì)因變量的影響,通過因素的不同水平看對(duì)因變量進(jìn)行分組,計(jì)算組內(nèi)和組間方差,利用方差比較的方法對(duì)各分組所形成的總體進(jìn)行均值比較,從而對(duì)各總體均值相等的原假設(shè)進(jìn)行檢驗(yàn)。

得到數(shù)據(jù)透視表

可以看到數(shù)據(jù)的箱型圖分布

方差同質(zhì)性檢驗(yàn)

一元單因素方差分析應(yīng)當(dāng)滿足方差齊性假設(shè),其原假設(shè)是不同水平所代表總體的方差是相同的。對(duì)于醫(yī)院方差分析常用levene's檢驗(yàn),多元方差分析多使用Bartlett's球形檢驗(yàn)法。

方差來源分解及檢驗(yàn)

組內(nèi)離差平方和為4682.125,組內(nèi)方差為133.7750,組間離差平方和為10472.850,組間方差為2618.2125,于是得出F統(tǒng)計(jì)量為19.57。對(duì)應(yīng)的P值幾乎為0,所以可以認(rèn)為像素大小對(duì)相機(jī)銷量影響是非常顯著的。
得出結(jié)論:在顯著性a=0.05水平下,可以拒絕根據(jù)像素變量劃分的各總體均值相等的原假設(shè)。即,不同的像素大小對(duì)相機(jī)銷量影響非常顯著。

多重比較檢驗(yàn)

進(jìn)一步研究因素的哪一水平對(duì)觀測(cè)變量產(chǎn)生了顯著影響,即那種像素大小對(duì)銷量有顯著影響。這就是單因素方差分析的均值多重比較檢驗(yàn)。
statsmodels.stats.multicomp中提供了pairwise_tukeyhsd函數(shù)可進(jìn)行TukeyHSD事后多重比較檢驗(yàn)。

系統(tǒng)自動(dòng)將不同像素進(jìn)行兩兩對(duì)比,并在reject列給出了是否應(yīng)該拒絕原假設(shè)--兩組屬性沒有差異的檢驗(yàn)結(jié)果。(meandiff表示二者對(duì)應(yīng)的因變量均值差,返回True表示二者對(duì)銷量的影響有差異)
結(jié)果表明600萬像素以下的數(shù)碼相機(jī)由于技術(shù)比較落后,消費(fèi)者需求不大,與中高像素的數(shù)碼相機(jī)進(jìn)行對(duì)比,銷量明顯萎縮,且差異最為顯著;消費(fèi)者對(duì)于像素?cái)?shù)量的要求不同,對(duì)銷售量也產(chǎn)生了顯著影響,像素高的相機(jī)明顯比像素低的相機(jī)銷量大。

方差分析模型的參數(shù)估計(jì)和預(yù)測(cè)

方差分析實(shí)際上是對(duì)一般線性模型進(jìn)行分析,其還可以對(duì)于用方差分析的線性模型進(jìn)行參數(shù)估計(jì)和假設(shè)檢驗(yàn)。根據(jù)參數(shù)估計(jì)結(jié)果,可以得出當(dāng)從一個(gè)水平變?yōu)榱硪粋€(gè)水平時(shí)對(duì)因變量產(chǎn)生的具體影響,并據(jù)此進(jìn)行預(yù)測(cè)。


第一張表主要展示模型診斷的總體信息,如擬合優(yōu)度判定系數(shù)R2,F(xiàn)統(tǒng)計(jì)量值、P值、AIC和BIC等信息指數(shù)等。第二章表主要反映方差分析模型的參數(shù)估計(jì)結(jié)果及其檢驗(yàn)結(jié)果。
這個(gè)圖中的C(pixel)[500萬像素及以下] 沒有出現(xiàn),而是由截距項(xiàng)intercept表示該像素下對(duì)因變量的影響:銷量為81.125臺(tái)。其他水平對(duì)于因變量的影響都是一截距項(xiàng)為基準(zhǔn)進(jìn)行衡量,其對(duì)應(yīng)的參數(shù)估計(jì)代表了各個(gè)水平對(duì)因變量影響與截距項(xiàng)對(duì)因變量影響的差距。

為了避免手工繁瑣的計(jì)算,需要估計(jì)不含截距項(xiàng)的模型參數(shù)的絕對(duì)數(shù)值,在程序定義formula的右邊加上‘-1’即可。
這樣的出的結(jié)果更清晰明了,高像素(800萬以上)的數(shù)碼相機(jī)銷量比較大,中低像素(500-800萬)的相機(jī)銷售一般,低像素(500萬以下)銷量最小。

使用模型的參數(shù)估計(jì)值對(duì) 因變量進(jìn)行預(yù)測(cè)
確保預(yù)測(cè)較為準(zhǔn)確的前提就是估計(jì)出的模型要依據(jù)統(tǒng)計(jì)理論模型進(jìn)行模型診斷。本利模型參數(shù)估計(jì)均非常顯著,且擬合優(yōu)度與F值均較大,可以認(rèn)為該模型適合進(jìn)行檢測(cè)。


python代碼

import numpy as np
import pandas as pd
from scipy import stats
import statsmodels.api as sm
import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams['font.sans-serif'] = ['SimHei']#顯示中文
plt.style.use('ggplot')

數(shù)據(jù)預(yù)處理

dc_sales = pd.read_csv('dc_sales.csv')
#將 ‘market’和‘pixel’轉(zhuǎn)化為分類變量,并將其掛上標(biāo)簽:
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萬像素及以上']
pd.pivot_table(dc_sales,index = ['pixel'],columns = ['market'],
               values = ['sales'],aggfunc='sum')

畫數(shù)據(jù)箱型圖

G=dc_sales['pixel'].unique()
args = []
for i in list(G):
    args.append(dc_sales[dc_sales['pixel']==i]['sales'])#存儲(chǔ)不同像素屬性下的銷售數(shù)據(jù)
dc_sales_plot = plt.boxplot(args,vert=True,patch_artist=True)#畫出的是普通箱型圖
colors = ['pink','lightblue','lightgreen','cyan','lightyellow']
for patch,color in zip(dc_sales_plot['boxes'],colors):
    patch.set_facecolor(color)
fig = plt.gcf()
fig.set_size_inches(8,5)
combinebox = plt.subplot(111)
combinebox.set_xticklabels(G)
plt.show()

方差同質(zhì)性檢驗(yàn)

stats.levene(*args)
##p值很大,不能拒絕原假設(shè),即滿足方差齊性。
LeveneResult(statistic=0.233384556281214, pvalue=0.9176929576341715)

對(duì)方差來源進(jìn)行分解

#使用statsmodels中的anova_lm配合ols函數(shù):
from statsmodels.formula.api import ols
dc_sales_anova = sm.stats.anova_lm(ols('sales ~ C(pixel)',dc_sales).fit())
#上述語句也可寫成調(diào)用 formula的形式,等價(jià)于上面兩行代碼
#formula = 'sales ~ C(pixel)'
#dc_sales_anova = sm.stats.anova_lm(ols(formula,dc_sales).fit())  
dc_sales_anova

多重比較檢驗(yàn)

#究竟是因素的那一水平對(duì)觀察量產(chǎn)生了影響,即具體哪種像素對(duì)銷售量有顯著影響。
from statsmodels.stats.multicomp import pairwise_tukeyhsd
dc_sales_anova_post=pairwise_tukeyhsd(dc_sales['sales'],dc_sales['pixel'],alpha = 0.05)
dc_sales_anova_post.summary()

參數(shù)估計(jì)和預(yù)測(cè)

dc_sales_est = ols('sales ~ C(pixel)',dc_sales).fit()
dc_sales_est.summary2()
#估計(jì)不含截距項(xiàng)模型的參數(shù)
formula = 'sales~C(pixel)-1'
dc_sales_est1 = ols(formula,dc_sales).fit()
dc_sales_est1.summary2()

方差分析模型的預(yù)測(cè)

dc_sales_est.fittedvalues
#也可使用模型對(duì)象的get_influence方法得到更詳細(xì)的預(yù)測(cè)信息:
dc_sales_influence = dc_sales_est.get_influence()
dc_sales_influence.summary_table()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容