我正在使用lmer()包lme4来估计混合效果模型.这很有效,但现在我想在固定数量的迭代中运行估算过程,然后通过指定由上一个估算过程计算的起始值来恢复过程.
根据这方面的帮助,?lmer可以通过设置参数:
start- 这些是新的起始值,根据帮助,可以ST从拟合模型中提取槽中的值并使用这些值,即使用x@STmaxiter - 作为命名参数提供给 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) 我是混合效果模型的新手,我需要你的帮助.我在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) 我刚刚将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)
非常感谢!
我正在努力理解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) 我目前正在测试是否应该在我的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带有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()我认为随机拦截应该照顾...更不用说我们正在谈论按顺序计算方法的事实......)然而问题保持不变:一旦我适合这样一个模型,是否有一种干净的方法来重新调整拟合模型的系数?
当有多个预测变量时,是否可以绘制混合模型的随机截距或斜率?
有了一个预测器,我会这样做:
#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)
我应该考虑所有系数还是只考虑我正在绘制的变量?
谢谢
我想使用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)
你知道怎么做吗?我没有添加任何数据,因为我的问题可能很容易解决,但如果需要,我可以上传它们.
谢谢!
我试图在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件事吗?
我正在尝试使用 lme4 执行 LMM,并且弹出此消息:
initializePtr() 中的错误:包“Rcpp”未提供函数“dataptr”
我应该怎么办?