标签: lmer

用先前估计的值重新开始混合效应模型估计

我正在使用lmer()lme4来估计混合效果模型.这很有效,但现在我想在固定数量的迭代中运行估算过程,然后通过指定由上一个估算过程计算的起始值来恢复过程.

根据这方面的帮助,?lmer可以通过设置参数:

  • start- 这些是新的起始值,根据帮助,可以ST从拟合模型中提取槽中的值并使用这些值,即使用x@ST
  • maxiter - 作为命名参数提供给 control

因此,例如,假设我想要lme使用iris数据,可以尝试这样做:

library(lme4)

# Fit model with limited number of iterations

frm <- "Sepal.Length ~ Sepal.Width | Species"

x <- lmer(frm, data=iris, 
          verbose=TRUE, control=list(maxIter=1), model=FALSE)

# Capture starting values for next set of iterations
start <- list(ST=x@ST)

# Update model
twoStep <-  lmer(frm, data=iris, 
          verbose=TRUE, control=list(maxIter=100), model=TRUE, 
          start=start)
Run Code Online (Sandbox Code Playgroud)

这有效.看一下输出,其中第一列是REML,即随机效应最大似然.特别注意模型2中的REML从模型1终止的地方开始:

> x <- lmer(frm, data=iris, 
+           verbose=TRUE, control=list(maxIter=1), …
Run Code Online (Sandbox Code Playgroud)

r lme4 mixed-models lmer

68
推荐指数
1
解决办法
2680
查看次数

在ggplot中绘制混合效果模型

我是混合效果模型的新手,我需要你的帮助.我在ggplot中绘制了下图:

ggplot(tempEf,aes(TRTYEAR,CO2effect,group=Myc,col=Myc)) + 
  facet_grid(~N) +
  geom_smooth(method="lm",se=T,size=1) +
  geom_point(alpha = 0.3) + 
  geom_hline(yintercept=0, linetype="dashed") +
  theme_bw()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但是,我想代表一个混合效果模型,而不是lmin geom_smooth,所以我可以包含SITE一个随机效果.

该模型如下:

library(lme4)
tempEf$TRTYEAR <- as.numeric(tempEf$TRTYEAR)
mod <- lmer(r ~ Myc * N * TRTYEAR + (1|SITE), data=tempEf)
Run Code Online (Sandbox Code Playgroud)

我已经包括TRTYEAR(治疗年份),因为我也对效果的模式感兴趣,这可能会随着时间的推移而增加或减少.

接下来是我迄今为止从模型中提取绘图变量的最佳尝试,但仅提取了TRTYEAR= 5,10和15的值.

library(effects)
ef <- effect("Myc:N:TRTYEAR", mod)
x <- as.data.frame(ef)
> x
   Myc     N TRTYEAR        fit         se       lower     upper
1   AM  Nlow       5 0.04100963 0.04049789 -0.03854476 0.1205640
2  ECM  Nlow       5 0.41727928 0.07342289  0.27304676 0.5615118
3 …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 lmer

20
推荐指数
1
解决办法
3万
查看次数

增加lmer新版本的迭代次数?

我刚刚将lme4更新为版本1.0-4,当我运行lmer()时,我的混合效果模型(之前收敛)现在打印出此警告:

Warning message:
In (function (fn, par, lower = rep.int(-Inf, n), upper = rep.int(Inf,  :
  failure to converge in 10000 evaluations
Run Code Online (Sandbox Code Playgroud)

所以,我想尝试增加迭代次数,看看能不能解决这个问题.(我必须说我不知道​​导致警告的是什么,因为消息的第一部分听起来有些不透明).无论如何,我在文档中读到现在我应该使用lmerControl(),但我无法实现它.有人能给我一个具体的例子说明你是如何做到具体的吗?(帮助文件没有帮助).这是我的模型:

m <- lmer(RT ~ Factor1*Factor2 + (0+Factor1+Factor2|Subject) + (1|Subject)  + (1|Item) + (0+Factor1+Factor2|Item), data= data)
Run Code Online (Sandbox Code Playgroud)

非常感谢!

iteration r lme4 lmer

12
推荐指数
1
解决办法
2万
查看次数

lmer(来自R包lme4)如何计算对数似然?

我正在努力理解lmer的功能.我已经找到了很多关于如何使用命令的信息,但没有太多关于它实际做了什么(除了一些神秘的评论:http://www.bioconductor.org/help/course-materials/2008/PHSIntro/ lme4Intro-handout-6.pdf).我正在玩以下简单的例子:

library(data.table)
library(lme4)
options(digits=15)

n<-1000
m<-100
data<-data.table(id=sample(1:m,n,replace=T),key="id")
b<-rnorm(m)
data$y<-rand[data$id]+rnorm(n)*0.1
fitted<-lmer(b~(1|id),data=data,verbose=T)
fitted
Run Code Online (Sandbox Code Playgroud)

我理解lmer拟合形式为Y_ {ij} = beta + B_i + epsilon_ {ij}的模型,其中epsilon_ {ij}和B_i分别是具有方差sigma ^ 2和tau ^ 2的独立法线.如果theta = tau/sigma是固定的,我用正确的均值和最小方差计算β的估计值

c = sum_{i,j} alpha_i y_{ij}
Run Code Online (Sandbox Code Playgroud)

哪里

alpha_i = lambda/(1 + theta^2 n_i)
lambda = 1/[\sum_i n_i/(1+theta^2 n_i)]
n_i = number of observations from group i
Run Code Online (Sandbox Code Playgroud)

我还计算了sigma ^ 2的以下无偏估计:

s ^ 2 =\sum_ {i,j} alpha_i(y_ {ij} - c)^ 2 /(1 + theta ^ 2 - lambda)

这些估计似乎与lmer产生的一致.但是,我无法弄清楚在这种情况下如何定义对数似然.我计算了概率密度

pd(Y_{ij}=y_{ij}) = …
Run Code Online (Sandbox Code Playgroud)

r random-effects lmer

9
推荐指数
1
解决办法
2363
查看次数

在使用anova()的lmer()模型中测试随机效果时,是否需要设置refit = FALSE?

我目前正在测试是否应该在我的lmer模型中包含某些随机效果.我使用anova函数.我的过程,到目前为止是一个函数调用模型适合lmer()REML=TRUE(默认选项).然后我打电话anova()给两个模型,其中一个确实包括要测试的随机效果,另一个没有.但是,众所周知,该anova()函数使用ML重新生成模型,但在新版本中,anova()您可以anova()通过设置选项来防止这样做refit=FALSE.为了测试随机效应refit=FALSE,我应该在我的调用中设置anova() or not?(如果我设置refit=FALSEp值往往更低.当我设置时,p值是反保守的refit=FALSE吗?)

方法1:

    mod0_reml <- lmer(x ~ y + z + (1 | w), data=dat)
    mod1_reml <- lmer(x ~ y + z + (y | w), data=dat)
    anova(mod0_reml, mod1_reml)
Run Code Online (Sandbox Code Playgroud)

这将导致anova()使用ML而不是改装模型REML.(该anova()函数的较新版本也将输出有关此信息.)

方法2:

    mod0_reml <- lmer(x ~ y + z + (1 | w), data=dat)
    mod1_reml <- lmer(x ~ y + …
Run Code Online (Sandbox Code Playgroud)

r anova lmer

8
推荐指数
1
解决办法
3574
查看次数

如何从带有缩放响应的lmer()模型中去除系数

我从包中装了一个R带有lmer()-function 的模型lme4.我缩放了因变量:

    mod <- lmer(scale(Y)
                ~ X
                + (X | Z),
                data = df,
                REML = FALSE)
Run Code Online (Sandbox Code Playgroud)

我看一下固定效应系数fixef(mod):

    > fixef(mod)
    (Intercept)      X1          X2         X3           X4 
     0.08577525 -0.16450047 -0.15040043 -0.25380073  0.02350007
Run Code Online (Sandbox Code Playgroud)

从固定效应系数手动计算平均值非常容易.但是,我希望它们不被缩放,我不确定如何完全这样做.我知道缩放意味着减去每个平均值Y并且偏离标准偏差.但是,平均值和标准偏差都是从原始数据计算出来的.在lmer()使用原始数据的均值和标准偏差拟合-model 后,我可以简单地反转此过程吗?

谢谢你的帮助!


更新:我提出上述模型的方式似乎意味着通过取所有响应的均值并除以所有响应的标准差来缩放因变量.通常,它的完成方式不同.不是采用总体平均值和标准偏差,而是通过使用该受试者的反应的平均值和标准偏差来对每个受试者标准化响应.(这是奇怪的,lmer()我认为随机拦截应该照顾...更不用说我们正在谈论按顺序计算方法的事实......)然而问题保持不变:一旦我适合这样一个模型,是否有一种干净的方法来重新调整拟合模型的系数?

r mean lme4 lmer

7
推荐指数
1
解决办法
4094
查看次数

如何在具有多个预测变量的混合模型中绘制随机截距和斜率?

当有多个预测变量时,是否可以绘制混合模型的随机截距或斜率?

有了一个预测器,我会这样做:

#generate one response, two predictors and one factor (random effect)
resp<-runif(100,1, 100)
pred1<-c(resp[1:50]+rnorm(50, -10, 10),resp[1:50]+rnorm(50, 20, 5))
pred2<-resp+rnorm(100, -10, 10)
RF1<-gl(2, 50)

#gamm
library(mgcv)
mod<-gamm(resp ~ pred1, random=list(RF1=~1))
plot(pred1, resp, type="n")
for (i in ranef(mod$lme)[[1]]) {
abline(fixef(mod$lme)[1]+i, fixef(mod$lme)[2])
}

#lmer
library(lme4)
mod<-lmer(resp ~ pred1 + (1|RF1))
plot(pred1, resp, type="n")
for (i in ranef(mod)[[1]][,1]) {
abline(fixef(mod)[1]+i, fixef(mod)[2])
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我有这样的模型呢?:

mod<-gamm(resp ~ pred1 + pred2, random=list(RF1=~1))
Run Code Online (Sandbox Code Playgroud)

或者与lmer

mod<-lmer(resp ~ pred1 + pred2 + (1|RF1))
Run Code Online (Sandbox Code Playgroud)

我应该考虑所有系数还是只考虑我正在绘制的变量?

谢谢

plot r random-effects mixed-models lmer

6
推荐指数
1
解决办法
6454
查看次数

如何在R中使用tryCatch

我想使用try()或者tryCatch()像这样的函数来检测我的模型中是否存在名为"fit1"的错误.如果模型没问题,我想使用"fit1",否则我想使用"fit2"

fit1<-glmer(stat ~ dataint + DBH + DBH2 + (1|site_plot), family=binomial(link="logit"))

fit2<-glm (stat ~ dataint + DBH + DBH2, family=binomial(link="logit"))
Run Code Online (Sandbox Code Playgroud)

你知道怎么做吗?我没有添加任何数据,因为我的问题可能很容易解决,但如果需要,我可以上传它们.

谢谢!

r try-catch lmer

6
推荐指数
1
解决办法
4385
查看次数

如何在R中运行lmer的诊断图?

我试图在lmer模型上运行诊断图,但一直在撞墙.我不确定我需要提供多少信息,但这里有:

模型很简单:

best <- lmer(MSV_mm ~ Size_treat + (1|Rep) + (1|Patch) + (1|Trap), data= early_nopine). 
Run Code Online (Sandbox Code Playgroud)

MSV_mm是数字(鼻孔长度),Size_treat是4个级别的因素:连续,大,中和小.Rep,Patch并且Trap是随机效应.

当我运行时plot(best),我收到以下错误消息:

"Error in as.double(y) : 
  cannot coerce type 'S4' to vector of type 'double'"
Run Code Online (Sandbox Code Playgroud)

我认为这与lmer功能有关.我已经开网了,还没有找到这个问题的答案.这是lmer件事吗?

diagnostics r lmer

5
推荐指数
1
解决办法
1万
查看次数

这在 lme4 中意味着什么:包“Rcpp”未提供函数“dataptr”

我正在尝试使用 lme4 执行 LMM,并且弹出此消息:

initializePtr() 中的错误:包“Rcpp”未提供函数“dataptr”

我应该怎么办?

r lme4 lmer

5
推荐指数
1
解决办法
5606
查看次数

标签 统计

lmer ×10

r ×10

lme4 ×4

mixed-models ×2

random-effects ×2

anova ×1

diagnostics ×1

ggplot2 ×1

iteration ×1

mean ×1

plot ×1

try-catch ×1