我正在使用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) 我有一个具有固定和随机效果的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包中的任何提取器功能都无济于事.请帮忙!
我有来自参与者的受试者内部生理数据(part),他们都在三轮(round)中查看了刺激(阅读报纸),每轮都有五篇论文(paper),并且在报纸中每个都有不同的访问次数(visit) .我有两个固定的因素(CONDhier和CONDabund)加上相互作用来预测生理状态(例如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定义,我在任何地方都找不到.是否有一个教程可以解释所有不同的定义?)
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组合,其他人也可以从中受益:
到目前为止,在qqmath函数中添加任何附加选项会产生错误,如果它是标准图,我不会得到错误,所以我很茫然.
另外,如果你觉得有一个更好的包装/功能来绘制来自lmer输出的拦截,我很乐意听到它!(例如,你能用dotplot做点1-3吗?)
谢谢.
编辑:如果可以合理格式化,我也可以使用替代的dotplot.我只是喜欢ggmath情节的外观,所以我开始提出一个问题.
我正在尝试使用 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) 在lm和glm模型中,我使用函数coef并confint实现目标:
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)......你怎么看?
我正在尝试使用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) 我正在使用估计随机效应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) 我可以使用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) 我正在尝试运行混合效果模型,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) lme4 ×10
r ×10
mixed-models ×5
nlme ×2
convergence ×1
effects ×1
ggplot2 ×1
lmer ×1
random ×1
regression ×1