无法从函数中运行lmer

无法从函数中运行lmer,r,lme4,R,Lme4,我在尝试将lmer嵌入函数时遇到问题。下面是一个使用lexdec数据的可复制示例。如果我直接在数据帧上运行lmer,则没有问题。例如,假设我想看看词汇判断任务中的阅读时间是否因试验而不同。有两种类型的词刺激,“动物”(如“狗”)和“植物”(如“樱桃”)。我可以为动物词语计算一个混合效应模型: library(languageR) #load lexdec data library(lme4) #load lmer() s <- summary(lmer(R

我在尝试将
lmer
嵌入函数时遇到问题。下面是一个使用
lexdec
数据的可复制示例。如果我直接在数据帧上运行
lmer
,则没有问题。例如,假设我想看看词汇判断任务中的阅读时间是否因试验而不同。有两种类型的词刺激,“动物”(如“狗”)和“植物”(如“樱桃”)。我可以为动物词语计算一个混合效应模型:

library(languageR)       #load lexdec data
library(lme4)            #load lmer()
s <- summary(lmer(RT ~ Trial + (1|Subject) + (1|Word), data = lexdec[lexdec$Class== "animal", ]))
s                        #this works well
library(languageR)#加载lexdec数据
图书馆(lme4)#加载lmer()

我不知道问题是什么,你的代码对我来说运行得很好。(您的软件包是最新的吗?您运行的是什么R版本?您是否清理了工作区并从头开始尝试代码?)

这就是说,这是
plyr::dlply
的一个很好的用例。我会这样做:

library(languageR) 
library(lme4)
library(plyr)

stats <- dlply(lexdec,
      .variables = c("Class"),
      .fun=function(x) return(summary(lmer(RT ~ Trial + (1 | Subject) +
                                                (1 | Word), data = x))))

names(stats) <- levels(lexdec$Class)
当我运行您的代码(复制和粘贴而不进行修改)时,我会得到类似的输出。除了
数据:
行之外,它是相同的

stats = list()  

compute.lmer <- function(df,class) {
    m <- lmer(RT ~ Trial + (1|Subject) + (1|Word),data = df[df$Class== class, ])
    m <- summary(m)
    return(m)
}

for (c in levels(lexdec$Class)){
    s <- compute.lmer(lexdec,c)
    stats[[c]] <- s
}

> stats[["plant"]]
Linear mixed model fit by REML ['lmerMod']
Formula: RT ~ Trial + (1 | Subject) + (1 | Word)
   Data: df[df$Class == class, ]

REML criterion at convergence: -389.5

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.2647 -0.6082 -0.1155  0.4502  6.0593 

Random effects:
 Groups   Name        Variance Std.Dev.
 Word     (Intercept) 0.003718 0.06097 
 Subject  (Intercept) 0.023293 0.15262 
 Residual             0.028697 0.16940 
Number of obs: 735, groups: Word, 35; Subject, 21

Fixed effects:
              Estimate Std. Error t value
(Intercept)  6.3999245  0.0382700  167.23
Trial       -0.0001702  0.0001357   -1.25

Correlation of Fixed Effects:
      (Intr)
Trial -0.379
stats=list()

很好。不知道dlply
同意,为我工作。这并不奇怪,我可能已经失败了与旧/旧版本;让lmer在正确的环境中查找数据,不管它最初是从哪个环境调用的,这比你想象的要复杂…@shujaa:谢谢!你是对的:当我更新
lme4
时,问题就消失了。我一直在避免更新它,因为我读到lme4 1.0有时会产生比前一版本更糟糕的拟合模型。
dlply
方式也不错@rawr这是关于
plyr
(a,d,m,l,r)(a,d,l,u)ply
(输入)(输出)ply
的伟大之处。这是一个合理的问题,但我认为标题有点误导——我认为,它并没有将结果保存到一个列表中,这会给您带来麻烦,它在一个函数中运行lmer,数据被传递到该函数中…谢谢Ben。我试着重新措辞这个问题,使它更准确
> stats[["plant"]]
Linear mixed model fit by REML ['lmerMod']
Formula: RT ~ Trial + (1 | Subject) + (1 | Word)
   Data: x

REML criterion at convergence: -389.5

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.2647 -0.6082 -0.1155  0.4502  6.0593 

Random effects:
 Groups   Name        Variance Std.Dev.
 Word     (Intercept) 0.003718 0.06097 
 Subject  (Intercept) 0.023293 0.15262 
 Residual             0.028697 0.16940 
Number of obs: 735, groups: Word, 35; Subject, 21

Fixed effects:
              Estimate Std. Error t value
(Intercept)  6.3999245  0.0382700  167.23
Trial       -0.0001702  0.0001357   -1.25

Correlation of Fixed Effects:
      (Intr)
Trial -0.379
stats = list()  

compute.lmer <- function(df,class) {
    m <- lmer(RT ~ Trial + (1|Subject) + (1|Word),data = df[df$Class== class, ])
    m <- summary(m)
    return(m)
}

for (c in levels(lexdec$Class)){
    s <- compute.lmer(lexdec,c)
    stats[[c]] <- s
}

> stats[["plant"]]
Linear mixed model fit by REML ['lmerMod']
Formula: RT ~ Trial + (1 | Subject) + (1 | Word)
   Data: df[df$Class == class, ]

REML criterion at convergence: -389.5

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.2647 -0.6082 -0.1155  0.4502  6.0593 

Random effects:
 Groups   Name        Variance Std.Dev.
 Word     (Intercept) 0.003718 0.06097 
 Subject  (Intercept) 0.023293 0.15262 
 Residual             0.028697 0.16940 
Number of obs: 735, groups: Word, 35; Subject, 21

Fixed effects:
              Estimate Std. Error t value
(Intercept)  6.3999245  0.0382700  167.23
Trial       -0.0001702  0.0001357   -1.25

Correlation of Fixed Effects:
      (Intr)
Trial -0.379