如何对标准化变量建模所得标准误进行逆变换以用于绘图?
线性混合模型标准化系数的逆变换(含标准误)
我用scale()函数标准化数据后构建了线性混合模型,代码如下:
data <- data.frame( X1 = c(1.2, 2.3, 3.1, 4.8, 5.5, 4.6), X2 = c(10.4, 9.3, 8.2, 7.1, 6.0, 5.2), X3 = c(5.5, 6.6, 7.7, 8.8, 9.9, 12.0), rand = c("A", "A", "B", "B", "C", "C") ) data = data %>% mutate(across(X1:X2, ~ scale(.), .names = "scaled_{.col}")) model = lmerTest::lmer(X3 ~ scaled_X1 + scaled_X2 + (1|rand), data = data) summary(model)
我希望将模型输出的估计值逆变换回原始尺度后绘图,提升结果可读性。已知系数可通过除以对应变量的标准差实现逆变换,推导过程如下:
标准化公式:$X_S = \frac{X_0 - \text{mean}}{sd}$
逆变换后原始尺度的预测公式:$Y = \frac{B}{sd} \times X_0 + \left(-\frac{B \times \text{mean}}{sd} + A\right)$
其中$B$是标准化变量的系数,$A$是截距项。
但我不清楚如何对summary(model)输出的标准误进行逆变换。虽然有观点认为这种变换无意义,但保留标准化值绘图会极大降低可读性。
解决方法
1. 标准误的逆变换逻辑
标准化是线性变换,系数的标准误(即系数估计值的标准差)可通过相同的缩放比例逆变换:
- 设标准化系数的标准误为$SE_S$
- 原始尺度下的标准误$SE_0 = \frac{SE_S}{sd(X)}$
原理:线性变换$B_0 = \frac{B_S}{sd(X)}$,方差满足$\text{Var}(B_0) = \frac{\text{Var}(B_S)}{sd(X)^2}$,因此标准差(标准误)就是$\frac{SE_S}{sd(X)}$。
2. R中实现逆变换的代码示例
先提取模型系数、标准误,同时获取原始变量的均值和标准差:
# 提取原始变量的均值和标准差 var_stats <- data %>% summarise(across(X1:X2, list(mean = mean, sd = sd))) %>% pivot_longer(everything(), names_sep = "_", names_to = c("var", "stat")) %>% pivot_wider(names_from = stat, values_from = value) # 提取模型的系数和标准误 model_coefs <- summary(model)$coefficients %>% as.data.frame() %>% rownames_to_column("term") %>% filter(term != "(Intercept)") %>% mutate(var = str_remove(term, "scaled_")) # 合并计算逆变换后的系数和标准误 original_scale_coefs <- model_coefs %>% left_join(var_stats, by = "var") %>% mutate( original_estimate = Estimate / sd, original_se = `Std. Error` / sd, # 可选:计算95%置信区间 original_lower = original_estimate - 1.96 * original_se, original_upper = original_estimate + 1.96 * original_se )
3. 基于原始尺度系数绘图示例
用ggplot2绘制系数森林图:
library(ggplot2) ggplot(original_scale_coefs, aes(x = original_estimate, y = var)) + geom_vline(xintercept = 0, linetype = "dashed", color = "gray50") + geom_point(size = 3) + geom_errorbarh(aes(xmin = original_lower, xmax = original_upper), height = 0.2) + labs(x = "原始尺度下的系数估计值(95%置信区间)", y = "自变量") + theme_minimal()
4. 截距项的逆变换说明
如果需要将截距项转换到原始尺度,公式为:
$A_0 = A_S + \sum \left(\frac{B_S \times \text{mean}(X)}{sd(X)}\right)$
其中$A_S$是模型输出的截距项,求和针对所有标准化自变量。这个截距对应所有原始自变量取均值时的预测值。
内容的提问来源于stack exchange,提问作者Maxime Buron
相关产品推荐
相关产品推荐

