使用矩阵方法在R中编写支持任意n个参数的线性回归函数
适配多自变量的R线性回归函数实现方案
你现有的双变量回归代码核心逻辑已经兼容多自变量计算,仅需调整参数传入和处理逻辑,即可支持任意数量自变量的场景。
优化后实现代码
优化版支持和原生lm一致的公式调用语法,无需手动拼接自变量矩阵:
new_lm <- function(formula, data = environment()){ # 自动提取响应变量、构造带截距的自变量矩阵 model_df <- model.frame(formula = formula, data = data) y <- model.response(model_df) x_matrix <- model.matrix(object = formula, data = model_df) # 最小二乘计算回归系数 coef <- solve(t(x_matrix) %*% x_matrix) %*% t(x_matrix) %*% y colnames(coef) <- "回归系数" return(coef) }
不同场景调用示例
- 单自变量场景(n=1)
# 构造测试数据 x1 <- rnorm(100) y <- 2 + 3 * x1 + rnorm(100) # 调用函数 new_lm(y ~ x1)
- 双自变量场景(n=2)
x2 <- rnorm(100) y <- 2 + 3 * x1 + 1.5 * x2 + rnorm(100) new_lm(y ~ x1 + x2)
- 3个及以上自变量场景
x3 <- rnorm(100) y <- 2 + 3 * x1 + 1.5 * x2 + 0.8 * x3 + rnorm(100) new_lm(y ~ x1 + x2 + x3)
如果要保留原来的传参方式(手动传入y和x),无需修改现有代码,仅需在调用时将自变量拼接为n行k列的矩阵即可:单自变量时传入
as.matrix(x1),多自变量时传入cbind(x1, x2, x3...),同样可以得到正确的计算结果。
内容的提问来源于stack exchange,提问作者cmpunk
相关产品推荐
相关产品推荐

