如何在混合效应逻辑模型中用 rcs 项预测 ln(odds)?
How to predict ln(odds) with rcs term in mixed effects logistic model?
我正在使用“lme4”包来拟合混合效应非线性逻辑模型来访问 Y 和 X 的关联。由于我的数据的响应变量是二进制的,而 nlmer 函数要求响应变量是连续的,所以我使用glmer 函数和“rms”包函数 rcs 来拟合模型并可视化非线性关联,如下面的 R 代码:
library(lme4)
library(rms)
m <- glmer(r2 ~ rcs(Anger, 5) + Gender + situ + btype + (1 | id),
data = VerbAgg, family = binomial("logit"),
control=glmerControl(optimizer="bobyqa"))
p <- predict(m, newdata = VerbAgg, type = "link")
scatter.smooth(VerbAgg$Anger,p,pch='.',col="blue",lpars=list(type="l",col="red"))
我对使用此代码有一些疑问:
- 代码是否正确?
- 如何预测r2的ln(Odds)?是“p <- predict(m, newdata =
VerbAgg,类型 = "link")" ?
- 如何可视化r2和Anger的ln(Odds)样条曲线?是吗
正确使用“scatter.smooth”函数绘制并添加平滑
散点曲线?
- 如何获得此模型的 P 非线性?
- 看起来很合理。
- 是的。只需
predict(m)
就可以为您提供每次观察的预测对数几率(因为 predict
默认使用原始数据,并且 type = "link"
也是默认值)。 (但更明确一点也无妨。)
- 您可以构建一个数据框,该数据框具有非焦点预测变量的基线值并且
Anger
跨越适当的值范围,然后将其用作 newdata
predict
称呼。或者您可以使用 emmeans
或 effects
包,它们都试图为您自动执行此过程。
这对我有用(ns
的自然样条似乎与 lme4
的集成比 rcs
更好)
library(lme4)
library(effects)
m <- glmer(r2 ~ splines::ns(Anger, df = 5) + Gender + situ + btype + (1 | id),
data = VerbAgg, family = binomial("logit"),
control=glmerControl(optimizer="bobyqa"))
plot(Effect("Anger", m)
您可以使用 car::Anova()
或通过模型比较(似然比检验)对样条项进行显着性检验:
m0 <- update(m, r2 ~ Gender + situ + btype + (1 | id))
anova(m, m0)
我正在使用“lme4”包来拟合混合效应非线性逻辑模型来访问 Y 和 X 的关联。由于我的数据的响应变量是二进制的,而 nlmer 函数要求响应变量是连续的,所以我使用glmer 函数和“rms”包函数 rcs 来拟合模型并可视化非线性关联,如下面的 R 代码:
library(lme4)
library(rms)
m <- glmer(r2 ~ rcs(Anger, 5) + Gender + situ + btype + (1 | id),
data = VerbAgg, family = binomial("logit"),
control=glmerControl(optimizer="bobyqa"))
p <- predict(m, newdata = VerbAgg, type = "link")
scatter.smooth(VerbAgg$Anger,p,pch='.',col="blue",lpars=list(type="l",col="red"))
我对使用此代码有一些疑问:
- 代码是否正确?
- 如何预测r2的ln(Odds)?是“p <- predict(m, newdata = VerbAgg,类型 = "link")" ?
- 如何可视化r2和Anger的ln(Odds)样条曲线?是吗 正确使用“scatter.smooth”函数绘制并添加平滑 散点曲线?
- 如何获得此模型的 P 非线性?
- 看起来很合理。
- 是的。只需
predict(m)
就可以为您提供每次观察的预测对数几率(因为predict
默认使用原始数据,并且type = "link"
也是默认值)。 (但更明确一点也无妨。) - 您可以构建一个数据框,该数据框具有非焦点预测变量的基线值并且
Anger
跨越适当的值范围,然后将其用作newdata
predict
称呼。或者您可以使用emmeans
或effects
包,它们都试图为您自动执行此过程。
这对我有用(ns
的自然样条似乎与 lme4
的集成比 rcs
更好)
library(lme4)
library(effects)
m <- glmer(r2 ~ splines::ns(Anger, df = 5) + Gender + situ + btype + (1 | id),
data = VerbAgg, family = binomial("logit"),
control=glmerControl(optimizer="bobyqa"))
plot(Effect("Anger", m)
您可以使用 car::Anova()
或通过模型比较(似然比检验)对样条项进行显着性检验:
m0 <- update(m, r2 ~ Gender + situ + btype + (1 | id))
anova(m, m0)