如何在R中用优化技术转换变量优化线性回归模型
在R中优化变量转换参数构建最优线性回归模型
需求说明
需要通过优化alpha和beta两个常数,按照指定公式转换自变量,构建线性回归模型以最大化R²(或最小化RMSE/MAE),复现Excel Solver的参数优化效果。当前使用初始参数得到的R²为0.8952383,目标是找到最优参数提升模型性能。
变量转换公式
转换规则为:
var_transformed = (var + lag(var_transformed) * beta)^alpha
其中lag(var_transformed)为转换后变量的前一期值。
R实现步骤与代码
1. 定义目标优化函数
根据优化目标(最大化R²/最小化RMSE),编写对应目标函数:
目标:最大化R²
由于R中优化器默认寻找最小值,我们返回负的R²,等价于最大化R²:
objective_r2 <- function(par, df) { alpha <- par[1] beta <- par[2] # 初始化转换变量(第一期无滞后项) var_transformed <- numeric(nrow(df)) var_transformed[1] <- (df$var[1])^alpha # 循环计算后续期的转换变量 for(i in 2:nrow(df)) { var_transformed[i] <- (df$var[i] + var_transformed[i-1] * beta)^alpha } # 拟合线性回归并提取R² model <- lm(y ~ var_transformed, data = df) r_squared <- summary(model)$r.squared # 返回负R²供优化器最小化 return(-r_squared) }
目标:最小化RMSE
直接计算模型预测的RMSE作为优化目标:
objective_rmse <- function(par, df) { alpha <- par[1] beta <- par[2] var_transformed <- numeric(nrow(df)) var_transformed[1] <- (df$var[1])^alpha for(i in 2:nrow(df)) { var_transformed[i] <- (df$var[i] + var_transformed[i-1] * beta)^alpha } model <- lm(y ~ var_transformed, data = df) predictions <- predict(model) rmse <- sqrt(mean((df$y - predictions)^2)) return(rmse) }
2. 运行参数优化
使用R内置的optim()函数执行优化,设置初始参数与参数约束范围(避免不合理值):
# 假设你的数据框为df,包含自变量var和因变量y # 初始参数(示例值,可替换为当前使用的参数) initial_par <- c(1, 0) # 优化R²:使用L-BFGS-B方法设置参数约束(alpha>0.1,beta∈[0,1]) optim_r2 <- optim(par = initial_par, fn = objective_r2, df = df, method = "L-BFGS-B", lower = c(0.1, 0), upper = c(5, 1)) # 查看最优参数与对应的R² cat("最优alpha:", optim_r2$par[1], "\n") cat("最优beta:", optim_r2$par[2], "\n") cat("最优R²:", -optim_r2$value, "\n") # 优化RMSE(同理) optim_rmse <- optim(par = initial_par, fn = objective_rmse, df = df, method = "L-BFGS-B", lower = c(0.1, 0), upper = c(5, 1)) cat("最优RMSE:", optim_rmse$value, "\n")
3. 注意事项
- 滞后项初始化:第一期的转换变量无滞后项,示例中直接用
(df$var[1])^alpha,可根据数据特性调整。 - 参数约束:设置
lower和upper避免参数出现不合理值(如alpha为负导致复数、beta过大引发变量值爆炸)。 - 优化方法选择:若参数无约束可使用默认的Nelder-Mead方法;有约束时优先选择L-BFGS-B。
- 性能优化:若数据量极大,循环计算转换变量效率较低,可改用向量化操作或
dplyr::accumulate()替代循环。
内容的提问来源于stack exchange,提问作者ViSa
相关产品推荐
相关产品推荐

