2012-11-26 62 views
0

我需要一些幫助來執行R中的N元方差分析以捕獲不同因子之間的相互依賴性。在我的數據中,有大約100個不同的因素,我使用下面的代碼來執行方差分析。R中的N元方差分析

model.lm<-lm(y~., data=data) 
anova(model.lm) 

據我所知(可能是我錯了),這在每個因素單獨執行單向方差分析。由於某些原因,我需要在所有100組之間進行N-way ANOVA,即從x1到x100。我是否需要指定像下面這樣的每個因子,或者有一個簡寫符號?

model.lm<-lm(y~x1*x2*x3....,x100, data=data) 
anova(model.lm) 
+2

你需要澄清你的意思是一個'n-way'方差分析。 'lm(y〜.' fill)將所有因素作爲*主要效果*,沒有交互作用,而不是像你的措詞表明你想象的那樣是個人模型。你是否想要適應100個因素之間的所有相互作用(我真的希望答案這是沒有的。) – mnel

+0

我認爲你是不正確的,從我所瞭解的你的問題中,'y〜.'應該是你以後的事。 –

+0

@TylerRinker不是真的嗎?那個表示法並不關心交互 - 這是mnel的評論所問的(我也希望他們不希望適合所有的2路,3路,......,100路互動......) – Dason

回答

4

您可以使用update.formula~(.)^n符號。

例如,對於包括4個變量abcd

update(~a+b+c+d, ~(.)^3) 


## ~a + b + c + d + a:b + a:c + a:d + b:c + b:d + c:d + a:b:c + a:b:d + a:c:d + b:c:d 

因此,對於你的例子要適應100雙向交互,我會建議的思維三向交互模型更合適的模型(特別是如果是你在這裏考慮的時間)。

如果你決定繼續與基本ANOVA法,你可以做這樣的事情(和等待的R崩潰,由於有內存問題,由於你的大數據/不合適的模型。)

xvars <- paste0('x',1:100) 
oneway <- reformulate(termlabels= xvars, response = 'y') 


horribleformula <- update(oneway, . ~ (.)^100) 

horriblemodel <- lm(horribleformula, data=data) 

或(感謝@Dason提取這個)

stillhorrible <- lm(y ~ .^100, data = data) 
+2

是否需要更新的調用? 'lm(y〜。^ 100,data = data)'也不行? – Dason

+1

'可怕的模型'的確如此。 – joran

+0

謝謝mnel。我會試試這些數據,讓我們看看它有多可怕;)。謝謝。 – Shahzad