2017-10-18 73 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