标签: lme4

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

我正在使用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
查看次数

从lme4 mer模型对象中提取随机效应方差

我有一个具有固定和随机效果的mer对象.如何提取随机效应的方差估计?这是我的问题的简化版本.

study <- lmer(Reaction ~ Days + (1|Subject), data = sleepstudy)
study
Run Code Online (Sandbox Code Playgroud)

这样可以提供长输出 - 在这种情况下不会太长.无论如何,我如何明确选择

Random effects:
Groups   Name        Variance Std.Dev.
Subject  (Intercept) 1378.18  37.124  
Residual              960.46  30.991  
Run Code Online (Sandbox Code Playgroud)

部分输出?我想要自己的价值观.

我长期看看

str(study)
Run Code Online (Sandbox Code Playgroud)

那里什么都没有!还检查了lme4包中的任何提取器功能都无济于事.请帮忙!

random r effects lme4

41
推荐指数
3
解决办法
4万
查看次数

R中具有交叉重复效应和AR1协方差结构的线性混合模型

我有来自参与者的受试者内部生理数据(part),他们都在三轮(round)中查看了刺激(阅读报纸),每轮都有五篇论文(paper),并且在报纸中每个都有不同的访问次数(visit) .我有两个固定的因素(CONDhierCONDabund)加上相互作用来预测生理状态(例如EDA),这通常是自回归的.我试着考虑生理学中随机效应的个体差异(让我们暂时解决拦截问题),并且可能会因为其他随机效应而导致疲劳.

因此,我希望在R中运行的模型在SPSS中是:

MIXED EDA BY CONDhier CONDabund  
 /FIXED=CONDhier CONDabund CONDhier*CONDabund | SSTYPE(3)  
 /RANDOM=INTERCEPT | SUBJECT(part) COVTYPE(VC)  
 /RANDOM=INTERCEPT | SUBJECT(part*round) COVTYPE(VC)  
 /PRINT=SOLUTION  
 /METHOD=REML  
 /REPEATED=visit | SUBJECT(part*round*paper) COVTYPE(AR1).
Run Code Online (Sandbox Code Playgroud)

现在,我已经明白,虽然lme没有做好交叉术语,lmer(处理交叉术语没有问题)不能使用不同的协方差结构.我可以运行简单的lme模型,如

    lme(EDA ~ factor(CONDhier) * factor(CONDabund), random= ~1
   |part, na.action=na.exclude, data=phys2)
Run Code Online (Sandbox Code Playgroud)

但是更复杂的模型超出了我的范围.我已经读过lme中的交叉术语可以用随机定义来完成

    random=pdBlocked(list(pdCompSymm(~part), pdCompSymm(~round-1), pdCompSymm(~paper-1), 
pdCompSymm(~visit-1)))
Run Code Online (Sandbox Code Playgroud)

但这似乎阻止了AR1结构,并且第二次随机拦截了部分*round,来自我.而且我不太确定它和我的SPSS语法一样.

那么,有什么建议吗?虽然在lme和lmer上有很多不同的着作,但我找不到一个既有交叉术语又有AR1的作品.

(另外,关于lme的语法看起来很模糊:从几个不同的来源我已经理解了|在左边的东西下面是什么,组成嵌套术语,~1是随机截距,~x是随机斜率,和~1 + x都是,但似乎至少有:和-1定义,我在任何地方都找不到.是否有一个教程可以解释所有不同的定义?)

r lme4 mixed-models nlme

41
推荐指数
1
解决办法
3542
查看次数

在R中,使用qqmath或dotplot绘制来自lmer(lme4包)的随机效果:如何使它看起来很花哨?

qqmath函数使用lmer软件包的输出产生很好的随机效应图.也就是说,qqmath非常适合绘制层次模型中的截距及其在点估计周围的误差.下面使用名为Dyestuff的lme4包中的内置数据,给出了lmer和qqmath函数的一个示例.代码将使用ggmath函数生成分层模型和一个漂亮的图.

library("lme4")
data(package = "lme4")

# Dyestuff 
# a balanced one-way classiï¬cation of Yield 
# from samples produced from six Batches

summary(Dyestuff)             

# Batch is an example of a random effect
# Fit 1-way random effects linear model
fit1 <- lmer(Yield ~ 1 + (1|Batch), Dyestuff) 
summary(fit1)
coef(fit1) #intercept for each level in Batch 

# qqplot of the random effects with their variances
qqmath(ranef(fit1, postVar = TRUE), strip = FALSE)$Batch
Run Code Online (Sandbox Code Playgroud)

最后一行代码产生了每个截距的非常好的图,每个估计周围都有误差.但格式化qqmath函数似乎非常困难,而且我一直在努力格式化情节.我想出了一些我无法回答的问题,我认为如果他们使用lmer/qqmath组合,其他人也可以从中受益:

  1. 有没有办法采取上面的qqmath函数并添加一些选项,例如,使某些点为空而不是填充,或不同点的不同颜色?例如,您是否可以填充Batch变量的A,B和C的点数,但其余的点是否为空?
  2. 是否可以为每个点添加轴标签(例如,可能沿顶部或右侧y轴)?
  3. 我的数据接近45个截距,因此可以在标签之间添加间距,这样它们就不会相互碰撞?主要是,我感兴趣的是在图表上的点之间进行区分/标记,这在ggmath函数中似乎很麻烦/不可能.

到目前为止,在qqmath函数中添加任何附加选项会产生错误,如果它是标准图,我不会得到错误,所以我很茫然.

另外,如果你觉得有一个更好的包装/功能来绘制来自lmer输出的拦截,我很乐意听到它!(例如,你能用dotplot做点1-3吗?)

谢谢.

编辑:如果可以合理格式化,我也可以使用替代的dotplot.我只是喜欢ggmath情节的外观,所以我开始提出一个问题.

r ggplot2 lme4 random-effects

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

在 R 中使用 lmer 函数时,“initializePtr() 中出现错误:包‘Matrix’未提供函数‘cholmod_factor_ldetA’”

我正在尝试使用 R 中的 lmer 函数构建混合效应线性回归模型。我正在使用以下代码构建固定效应和混合效应模型,以通过比较 AIC 来证明使用混合效应模型的合理性。我已尝试多次重新加载 lme4 包并在上传之间重新启动(如其他问题中的建议);但是,这并没有解决错误。预先感谢您的任何指导。

    `# generate models
    m0.glm <- glm(SPL ~ 1, family = Gamma, data = CP)
    m0.lmer = lmer(SPL ~ 1 + (1|Lunar), REML = T, data = CP)

    `# compare models
    AIC(logLik(m0.glm))
    AIC(logLik(m0.lmer))

    > m0.glm <- glm(SPL ~ 1, family = Gamma, data = CP)
    > m0.lmer = lmer(SPL ~ 1 + (1|Lunar), REML = T, data = CP)
Run Code Online (Sandbox Code Playgroud)
    Error in initializePtr() : 
      function 'cholmod_factor_ldetA' not provided by package 'Matrix'`
Run Code Online (Sandbox Code Playgroud)

r lme4

30
推荐指数
2
解决办法
3万
查看次数

如何在混合效果模型中获得系数及其置信区间?

lmglm模型中,我使用函数coefconfint实现目标:

m = lm(resp ~ 0 + var1 + var1:var2) # var1 categorical, var2 continuous
coef(m)
confint(m)
Run Code Online (Sandbox Code Playgroud)

现在我添加了随机效果到模型 - 使用lmerlme4包的函数使用混合效果模型.但是,功能coef,confint不再为我工作!

> mix1 = lmer(resp ~ 0 + var1 + var1:var2 + (1|var3)) 
                                      # var1, var3 categorical, var2 continuous
> coef(mix1)
Error in coef(mix1) : unable to align random and fixed effects
> confint(mix1)
Error: $ operator not defined for this S4 class
Run Code Online (Sandbox Code Playgroud)

我试图谷歌并使用文档,但没有结果.请指出我正确的方向.

编辑:我也在考虑这个问题是否更适合https://stats.stackexchange.com/但我认为它比统计更具技术性,所以我认为它最适合这里(SO)......你怎么看?

r lme4 random-effects mixed-models

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

lme4的开发版本的收敛错误

我正在尝试使用lme4的开发版本和教程对混合效果模型进行功效分析.我在教程中注意到lme4引发了收敛错误:

## Warning: Model failed to converge with max|grad| = 0.00187101 (tol =
## 0.001)
Run Code Online (Sandbox Code Playgroud)

当我运行数据集的代码时出现相同的警告,其中:

## Warning message: In checkConv(attr(opt, "derivs"), opt$par, checkCtrl =
control$checkConv,  : 
Model failed to converge with max|grad| = 0.774131 (tol = 0.001)
Run Code Online (Sandbox Code Playgroud)

来自此更新版本的常规glmer调用的估计值与我使用更新的CRAN版本时略有不同(在这种情况下没有警告).知道为什么会这样吗?

编辑

我试图指定的模型是:

glmer(resp ~ months.c * similarity * percSem + (similarity | subj), family = binomial, data = myData)
Run Code Online (Sandbox Code Playgroud)

我拥有的数据集有一个主体间(年龄,居中)和两个主体内变量(相似性:2个水平,percSem:3个水平)预测二元结果(虚假记忆/猜测).另外,每个受试者内细胞具有3个重复测量.因此,对于每个个体总共存在2×3×3 = 18个二元响应,总共38个参与者.

structure(list(subj = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, …
Run Code Online (Sandbox Code Playgroud)

r lme4 convergence

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

有没有办法从"glmer"对象中获得"边际效应"

我正在使用估计随机效应logit模型glmer,我想报告自变量的边际效应.对于glm模型,包mfx有助于计算边际效应.glmer对象有任何包或函数吗?

谢谢你的帮助.

下面给出了可重现的例子

mydata <- read.csv("http://www.ats.ucla.edu/stat/data/binary.csv")
mydata$rank <- factor(mydata$rank) #creating ranks
id <- rep(1:ceiling(nrow(mydata)/2), times=c(2)) #creating ID variable
mydata <- cbind(mydata,data.frame(id,stringsAsFactors=FALSE)) 
set.seed(12345)
mydata$ran <- runif(nrow(mydata),0,1) #creating a random variable

library(lme4)
cfelr <- glmer(admit ~ (1 | id) + rank + gpa + ran + gre, data=mydata ,family = binomial)
summary(cfelr)
Run Code Online (Sandbox Code Playgroud)

r lme4 marginal-effects

21
推荐指数
2
解决办法
3210
查看次数

如何使用lme4将没有随机效应的模型与具有随机效应的模型进行比较?

我可以使用nlme包中的gls()来构建没有随机效果的mod1.然后我可以将使用AIC的mod1与使用lme()构建的mod2进行比较,其中包含随机效果.

mod1 = gls(response ~ fixed1 + fixed2, method="REML", data)
mod2 = lme(response ~ fixed1 + fixed2, random = ~1 | random1, method="REML",data)
AIC(mod1,mod2)
Run Code Online (Sandbox Code Playgroud)

是否有类似于gls()的lme4包,它允许我构建没有随机效果的mod3,并将它与使用lmer()构建的mod4进行比较,其中包含随机效果?

mod3 = ???(response ~ fixed1 + fixed2, REML=T, data)
mod4 = lmer(response ~ fixed1 + fixed2 + (1|random1), REML=T, data)
AIC(mod3,mod4)
Run Code Online (Sandbox Code Playgroud)

r lme4 mixed-models nlme

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

lme4 :: lmer报告"固定效应模型矩阵排名不足",我需要修复吗?如何?

我正在尝试运行混合效果模型,F2_difference该模型预测其余列作为预测变量,但我收到一条错误消息

固定效应模型矩阵排名不足,因此下降7列/系数.

从这个链接,固定效果模型是排名不足,我想我应该findLinearCombos在R包中使用caret.但是,当我尝试时findLinearCombos(data.df),它给了我错误信息

qr.default(object)中的错误:外部函数调用中的NA/NaN/Inf(arg 1)另外:警告消息:在qr.default(object)中:强制引入的NAs

我的数据没有任何NA - 可能导致这种情况的原因是什么?(对不起,如果答案很明显 - 我是R的新手).

我的所有数据都是除了我试图预测的数值之外的因素.这是我的数据的一小部分样本.

sex <- c("f", "m", "f", "m")
nasal <- c("TRUE", "TRUE", "FALSE", "FALSE")
vowelLabel <- c("a", "e", "i", "o")
speaker <- c("Jim", "John", "Ben", "Sally")
word_1 <- c("going", "back", "bag", "back")
type <- c("coronal", "coronal", "labial", "velar")
F2_difference <- c(345.6, -765.8, 800, 900.5)
data.df <- data.frame(sex, nasal, vowelLabel, speaker,
                      word_1, type, F2_difference
                      stringsAsFactors = TRUE)
Run Code Online (Sandbox Code Playgroud)

编辑:这是一些更多的代码,如果它有帮助.

formula <- F2_difference ~ …
Run Code Online (Sandbox Code Playgroud)

regression r linear-regression lme4 mixed-models

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