gpt4 book ai didi

multi-level - lmer 模型的标准化系数

转载 作者:行者123 更新时间:2023-12-03 18:38:32 25 4
gpt4 key购买 nike

我曾经使用下面的代码来计算 lmer 模型的标准化系数。但是,随着 lme 的新版本,返回对象的结构发生了变化。

如何调整函数 stdCoef.lmer 以使其与新的 lme4 版本一起使用?

# Install old version of lme 4
install.packages("lme4.0", type="both",
repos=c("http://lme4.r-forge.r-project.org/repos",
getOption("repos")[["CRAN"]]))

# Load package
detach("package:lme4", unload=TRUE)
library(lme4.0)

# Define function to get standardized coefficients from an lmer
# See: https://github.com/jebyrnes/ext-meta/blob/master/r/lmerMetaPrep.R
stdCoef.lmer <- function(object) {
sdy <- sd(attr(object, "y"))
sdx <- apply(attr(object, "X"), 2, sd)
sc <- fixef(object)*sdx/sdy
#mimic se.ranef from pacakge "arm"
se.fixef <- function(obj) attr(summary(obj), "coefs")[,2]
se <- se.fixef(object)*sdx/sdy
return(list(stdcoef=sc, stdse=se))
}

# Run model
fm0 <- lmer(Reaction ~ Days + (Days | Subject), sleepstudy)

# Get standardized coefficients
stdCoef.lmer(fm0)

# Comparison model with prescaled variables
fm0.comparison <- lmer(scale(Reaction) ~ scale(Days) + (scale(Days) | Subject), sleepstudy)

最佳答案

@LeonardoBergamini 的答案是有效的,但这个更紧凑、更易于理解,并且只使用标准访问器——如果/当 summary() 输出的结构或拟合模型的内部结构发生变化时,将来不太可能破坏。

stdCoef.merMod <- function(object) {
sdy <- sd(getME(object,"y"))
sdx <- apply(getME(object,"X"), 2, sd)
sc <- fixef(object)*sdx/sdy
se.fixef <- coef(summary(object))[,"Std. Error"]
se <- se.fixef*sdx/sdy
return(data.frame(stdcoef=sc, stdse=se))
}
library("lme4")
fm1 <- lmer(Reaction ~ Days + (Days | Subject), sleepstudy)
fixef(fm1)
## (Intercept) Days
## 251.40510 10.46729
stdCoef.merMod(fm1)
## stdcoef stdse
## (Intercept) 0.0000000 0.00000000
## Days 0.5352302 0.07904178
(这确实与 stdCoef.lmer 中的结果相同
@LeonardoBergamini 的回答...)

关于multi-level - lmer 模型的标准化系数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25142901/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com