含不同变换变量的多元线性回归模型预测精度评估咨询
含逆变换自变量的对数线性模型:逆变换与预测精度分析
一、逆变换得到原始因变量Y的预测值
你的模型是对log(Y)做线性回归,自变量中的1/X3属于输入变换,预测时只需将新的X3值代入计算1/X3即可,无需对自变量做逆变换。核心是对因变量的预测值做逆变换:
- 先通过拟合好的模型得到
log(Y)的预测值Ŷ_log:# 假设拟合好的模型命名为lm_model Ŷ_log <- predict(lm_model) - 对
Ŷ_log做指数逆变换,得到原始Y的预测值Ŷ:Ŷ <- exp(Ŷ_log) - 偏差修正(可选):指数变换会引入均值偏差(若误差项ε服从正态分布),可利用残差标准差σ修正预测值:
sigma <- summary(lm_model)$sigma Ŷ_corrected <- exp(Ŷ_log + sigma^2 / 2)
二、预测精度分析方法
原模型的R²=0.924是针对log(Y)的拟合优度,不能直接反映原始Y的预测效果,建议从以下维度分析:
- 残差诊断:计算原始Y与预测值
Ŷ的残差(Y - Ŷ)或相对残差((Y-Ŷ)/Y),绘制残差散点图(残差 vs 预测值)、QQ图,检查是否存在异方差、非正态性或异常点——小数据集下可视化诊断更直观。 - 误差指标:针对原始Y计算:
- MAE(平均绝对误差):
mean(abs(Y - Ŷ)) - RMSE(均方根误差):
sqrt(mean((Y - Ŷ)^2)) - 原始Y的R²:
1 - sum((Y - Ŷ)^2)/sum((Y - mean(Y))^2)
- MAE(平均绝对误差):
- 小数据集的泛化误差估计:由于样本量小,不建议拆分训练/测试集,改用**留一交叉验证(LOOCV)**评估模型泛化能力:
# 实现LOOCV计算RMSE loocv_rmse <- function(model, data) { n <- nrow(data) rmse_vec <- numeric(n) for(i in 1:n) { train_data <- data[-i, ] test_data <- data[i, ] temp_model <- update(model, data = train_data) y_log_pred <- predict(temp_model, newdata = test_data) y_pred <- exp(y_log_pred) rmse_vec[i] <- (test_data$Y - y_pred)^2 } sqrt(mean(rmse_vec)) } # 调用函数 loocv_result <- loocv_rmse(lm_model, your_data_frame)
内容的提问来源于stack exchange,提问作者Doug418
相关产品推荐
相关产品推荐

