2017-10-18 105 views
1

我想循環混合模型和Tukey測試。 我想要做的就是重複擬合和3列(每個包含一個響應)和4個亞組(總數= 12)的比較。循環混合模型和tukey比較

類似的數據框可在此處獲得:https://drive.google.com/open?id=0Bwrsa11LAnrgTXMzWk1fYXR1MHM。這3個部分是「RESP_1」,「RESP_2」和「RESP_3」列,這些子組是「層」列的變量。

我獲得由模型和一個單個響應的adjustament和獨特的層:

#mixed model  
Mlm_RESP_1 <-lme(RESP_1~clay+till, random=~1|strata/point, data=loop_lm_tukey) 

#tukey 
ls_RSP_1 <- lsmeans(Mlm_RESP_1,pairwise~till,adjust="tukey") 
ls_RSP_1$contrasts 
cld(ls_RSP_1) 

然後,我嘗試循環通過爲每個列的模型:

#loop model  
mlm_RESP <- lapply(c("RESP_1", "RESP_2","RESP_3"), function(k) { 
     lme(eval(substitute(j ~ clay+till, list(j = as.name(k)))), random = ~1|strata/point, data = loop_lm_tukey)}) 

從目前來看,我無法使用lsmeans包循環Tukey比較,因爲lapply返回一個列表,並且此包無法處理這種類。

此外,我怎樣才能循環這個每層?

任何幫助做Tukey的比較循環將不勝感激。

+0

你應該可以在'mlm_RESP'列表上'lapply()'tukey。 – LAP

+0

只需在列表的每個成員上運行lsmeans即可。 – rvl

+0

'lsmeans'不能處理列表中的成員。不過,我想學習如何做一個循環(我有其他3個數據幀來應用此操作)。 –

回答

0

試試這個:

mlm_RESP <- lapply(c("RESP_1", "RESP_2","RESP_3"), function(k) { 
    df=cbind(resp=loop_lm_tukey[,k],loop_lm_tukey[,-c(1:3)]) 
    lme(resp~clay+till, random = ~1|strata/point, data = df)}) 

res1=lapply(mlm_RESP,function(rm)lsmeans(rm,pairwise~till,adjust="tukey")) 

或:

res2=list() 
for (i in 1:3) res2[[i]]=lsmeans(mlm_RESP[[i]],pairwise~till,adjust="tukey") 

的結果是一樣的。

+0

運行代碼時,它返回一個錯誤:錯誤as.name(k):object'k'not found 錯誤在ref.grid(object = list(modelStruct = list(reStruct = list(point = 8.82313412464084,: 也許需要'數據'或'參數'參數' –

+0

Off course !!我更新了答案! – Robert