添加变量后 lmer 中分类因子的所有级别的系数不变
Coefficients for all levels of a categorical factor unchanged in lmer after adding variables
我正在为受试者内设计研究估计具有受试者随机效应的 lmer 模型。我在三种不同的治疗条件下对每个受试者的因变量进行了测量,从而实现了平衡设计。除了治疗假人,我在 lmer 模型中还有控制变量。
首先突出的是所有治疗假人都有相同的标准误差,这已经在这里被询问和回答:
第二个突出的问题是,如果我向模型添加控制变量,治疗假人的系数不会改变。
此处使用一些模拟数据重现了 lmer 的行为:
library(tidyverse)
library(lme4)
library(lmerTest)
#Some data:
id <- rep(1:50) #subject id
dependent_1 <- rnorm(50,10,5) #dependent measure in treatment 1
dependent_2 <- rnorm(50,18,3) #dependent measure in treatment 2
dependent_3 <- rnorm(50,28,4) #dependent measure in treatment 3
control_a <- rnorm(50, 100, 5) #first control
control_b <- rnorm(50, 200,33) #second control
df <- data.frame(id, dependent_1, dependent_2, dependent_3, control_a, control_b) #make dataframe
#Reshape to long form
df_long <- pivot_longer(df,
cols = starts_with("dependent_"),
names_to = c(".value","treatment"),
names_sep = "\_")
#Treatment to factor
df_long$treatment <- as.factor(df_long$treatment)
#LMER Models
lmer_model.1 <- lmer(dependent ~ treatment +(1|id), data = df_long, REML = FALSE) #Model with treatment dummies only
lmer_model.2 <- lmer(dependent ~ treatment + control_a + control_b + (1|id), data = df_long, REML = FALSE) #Model with treatment dummies and controls
我得到以下结果:
===============================================================
Model 1 Model 2
---------------------------------------------------------------
(Intercept) 9.246 (0.567) *** 17.535 (7.796) *
treatment2 8.157 (0.787) *** 8.157 (0.787) ***
treatment3 20.030 (0.787) *** 20.030 (0.787) ***
control_a -0.067 (0.072)
control_b -0.008 (0.011)
---------------------------------------------------------------
AIC 852.194 854.977
BIC 867.247 876.051
Log Likelihood -421.097 -420.488
Num. obs. 150 150
Num. groups: id 50 50
Var: id (Intercept) 0.596 0.457
Var: Residual 15.492 15.492
===============================================================
*** p < 0.001; ** p < 0.01; * p < 0.05
谁能给我解释一下为什么会这样?
这显然是关于统计,而不是编程。考虑在 Cross Validated 上提问。
看来您问题的答案在于您设置示例数据的方式。一个额外的 control/predictor 变量 X2 只影响另一个之前包含的预测变量 X1 的估计,它们是(至少有一点)相关的。实际上,这在很大程度上是正确的,因为您很难在现实生活中的数据中获得 r = .00 相关性。但是您设置数据的方式使得 treatment
与 control_a
和 control_b
正交。因此,包括任何一个控制都不会影响治疗假人的系数。
我正在为受试者内设计研究估计具有受试者随机效应的 lmer 模型。我在三种不同的治疗条件下对每个受试者的因变量进行了测量,从而实现了平衡设计。除了治疗假人,我在 lmer 模型中还有控制变量。
首先突出的是所有治疗假人都有相同的标准误差,这已经在这里被询问和回答:
第二个突出的问题是,如果我向模型添加控制变量,治疗假人的系数不会改变。
此处使用一些模拟数据重现了 lmer 的行为:
library(tidyverse)
library(lme4)
library(lmerTest)
#Some data:
id <- rep(1:50) #subject id
dependent_1 <- rnorm(50,10,5) #dependent measure in treatment 1
dependent_2 <- rnorm(50,18,3) #dependent measure in treatment 2
dependent_3 <- rnorm(50,28,4) #dependent measure in treatment 3
control_a <- rnorm(50, 100, 5) #first control
control_b <- rnorm(50, 200,33) #second control
df <- data.frame(id, dependent_1, dependent_2, dependent_3, control_a, control_b) #make dataframe
#Reshape to long form
df_long <- pivot_longer(df,
cols = starts_with("dependent_"),
names_to = c(".value","treatment"),
names_sep = "\_")
#Treatment to factor
df_long$treatment <- as.factor(df_long$treatment)
#LMER Models
lmer_model.1 <- lmer(dependent ~ treatment +(1|id), data = df_long, REML = FALSE) #Model with treatment dummies only
lmer_model.2 <- lmer(dependent ~ treatment + control_a + control_b + (1|id), data = df_long, REML = FALSE) #Model with treatment dummies and controls
我得到以下结果:
===============================================================
Model 1 Model 2
---------------------------------------------------------------
(Intercept) 9.246 (0.567) *** 17.535 (7.796) *
treatment2 8.157 (0.787) *** 8.157 (0.787) ***
treatment3 20.030 (0.787) *** 20.030 (0.787) ***
control_a -0.067 (0.072)
control_b -0.008 (0.011)
---------------------------------------------------------------
AIC 852.194 854.977
BIC 867.247 876.051
Log Likelihood -421.097 -420.488
Num. obs. 150 150
Num. groups: id 50 50
Var: id (Intercept) 0.596 0.457
Var: Residual 15.492 15.492
===============================================================
*** p < 0.001; ** p < 0.01; * p < 0.05
谁能给我解释一下为什么会这样?
这显然是关于统计,而不是编程。考虑在 Cross Validated 上提问。
看来您问题的答案在于您设置示例数据的方式。一个额外的 control/predictor 变量 X2 只影响另一个之前包含的预测变量 X1 的估计,它们是(至少有一点)相关的。实际上,这在很大程度上是正确的,因为您很难在现实生活中的数据中获得 r = .00 相关性。但是您设置数据的方式使得 treatment
与 control_a
和 control_b
正交。因此,包括任何一个控制都不会影响治疗假人的系数。