2010-05-29 50 views
15

我一直在使用var.testbartlett.test來檢查基本方差分析假設,其中包括homoscedascity(同質性,差異性的等式)。程序是單因素方差分析很簡單:Two-Way ANOVA的同源性測試

bartlett.test(x ~ g) # where x is numeric, and g is a factor 
var.test(x ~ g) 

但是,對於2×2表,即二維方差分析的,我想要做這樣的事情:

bartlett.test(x ~ c(g1, g2)) # or with list; see latter: 
var.test(x ~ list(g1, g2)) 

當然,ANOVA假設可以用圖形程序檢查,但「算術選項」?這是否可以管理?你如何測試雙向方差分析中的homoscedascity?

+0

我從標題認爲這個問題完全彌補。 – sblom 2010-05-29 06:04:50

+0

你是什麼意思的「編造」? =)Homoscedascity(球形度,方差均勻性)是每個子樣本中分佈的正態性的基本方差分析假設之一。雙向代表具有兩個獨立/因子變量的ANOVA。我無意中發佈了這個話題兩次,所以第一篇文章是封閉的,因爲我記得...也許是因爲你認爲這是編造/某種垃圾郵件或如此... =) – aL3xa 2010-05-29 11:48:02

回答

17

假設檢驗是用來評估模型假設有效性的錯誤工具。如果樣本量很小,即使差異很大,您也無法檢測到任何差異差異。如果您的樣本量很大,您可以檢測相同方差中最微不足道的偏差,因此您幾乎總是會拒絕零值。模擬研究表明,模型假設的初步測試導致了不可靠的I型錯誤。

查看所有單元格的殘差是一個很好的指標,或者如果您的數據是正常的,您可以使用AIC或BIC有/無相等差異作爲選擇過程。

如果您覺得有不等方差,有類似下降的假設:

library(car) 
model.lm <- lm(formula=x ~ g1 + g2 + g1*g2,data=dat,na.action=na.omit) 
Anova(model.lm,type='II',white.adjust='hc3') 

你不鬆動的權力與穩健的方法(hetroscedastic一致協方差矩陣),所以如果有疑問,請強勁。

+0

迷人的回答伊恩,謝謝。 – 2010-05-29 08:54:59

+0

徹底,簡潔,巧妙地寫下答案!我會檢查殘差的方式......但是對於統計數據的教條式理解,這個回答讓人耳目一新!非常感謝你! – aL3xa 2010-05-29 11:57:36

5

對於bartlett.test

bartlett.test(split(x,list(g1,g2))) 

var.test是不適用的,因爲它的工作原理,只有當有兩組。

+0

我不敢相信它是如此簡單! O_o – aL3xa 2010-05-29 12:11:46

7

您可以使用方差齊性的Fligner–Killeen test來測試異方差性。假設你的模型是一樣的東西

model<-aov(gain~diet*supplement) 

fligner.test(gain~diet*supplement) 

     Fligner-Killeen test of homogeneity of variances 

data: gain by diet by supplement 
Fligner-Killeen:med chi-squared = 2.0236, df = 2, p-value = 0.3636 

您也可以使用bartlett.test(但這是更多的非正態性檢驗比差異的平等)

bartlett.test(gain~diet*supplement) 
     Bartlett test of homogeneity of variances 

data: gain by diet by supplement 
Bartlett's K-squared = 2.2513, df = 2, p-value = 0.3244 

此外,你可以爲執行Levene test在單向和雙向方差分析中都有相同的組方差。列文的測試的實現可以在包中發現car(鏈接固定),s20xlawstat

levene.test(gain~diet*supplement) # car package version 

Levene's Test for Homogeneity of Variance 
     Df F value Pr(>F) 
group 11 1.1034 0.3866 
     36 
+4

當有兩個因素時,我不認爲這是使用'bartlett.test'的正確方法。我相信它只使用第一個變量。例如,如果運行 'bartlett.test(total_bill_child * time,data = tips)'和'bartlett.test(total_bill_on,data = tips)',則得到相同的p值,並且df = 1兩者。我認爲你需要使用諸如'bartlett.test(total_bill〜interaction(time,sex),data = tips)'這樣的東西。在這種情況下,df = 3。 – wch 2011-04-30 06:25:34