如何用R的sapply()函数查看自变量增1个标准差时因变量的变化
计算简单线性回归中自变量增1个标准差时因变量的变化(sapply实现)
核心逻辑
在简单线性回归模型 y = a + b₁*x 中,当自变量x增加1个标准差时,因变量y的变化量等于回归系数b₁乘以x的标准差,即 Δy = b₁ * sd(x)。
实现步骤(含sapply用法)
以下用模拟数据演示完整流程:
- 生成模拟数据
set.seed(123) # 固定随机种子保证结果可复现 x <- rnorm(100, mean = 5, sd = 2) y <- 3 + 1.5*x + rnorm(100, sd = 1)
- 拟合线性回归模型
model <- lm(y ~ x)
- 定义计算函数
先写一个函数,输入变量名、回归模型和数据集,返回该变量增1个标准差时y的变化量:
sd_effect <- function(var, mod, dat) { coef_val <- coef(mod)[[var]] # 提取对应变量的回归系数 var_sd <- sd(dat[[var]]) # 提取变量的标准差 coef_val * var_sd # 计算变化量 }
- 用sapply执行计算
sapply可以批量处理变量(这里以单个变量x为例,也可传入多个变量名向量):
# 传入变量名,调用函数 result <- sapply("x", sd_effect, mod = model, dat = data.frame(x, y)) print(result)
运行后会输出类似x=3.02的结果,意思是x每增加1个标准差,y平均增加约3.02个单位。
扩展:多自变量场景
如果是多元回归模型(比如y ~ x1 + x2),只需把变量名改成向量传入sapply即可:
# 模拟多变量数据 x1 <- rnorm(100) x2 <- rnorm(100) y_multi <- 2 + 0.8*x1 + 1.2*x2 + rnorm(100) model_multi <- lm(y_multi ~ x1 + x2) # 批量计算x1和x2的效应 sapply(c("x1", "x2"), sd_effect, mod = model_multi, dat = data.frame(x1, x2, y_multi))
内容的提问来源于stack exchange,提问作者Key
相关产品推荐
相关产品推荐

