LM模型中经sqrt()变换的预测变量还原绘图方法咨询
还原平方根变换后的LM模型结果并对比原始数据的方法
嘿,这个问题我实操过好多次,其实核心就是把你做的平方根变换倒着来就行,我给你拆成步骤讲清楚:
一、先明确:你是对哪个变量做了sqrt变换?
首先得搞清楚核心——你是对**响应变量(y)做了sqrt变换,还是对预测变量(x)**做了?这俩的还原方式完全不一样:
情况1:响应变量y做了sqrt变换(最常见场景)
比如你拟合的模型是这样的:
# 用sqrt(y)作为响应变量拟合线性模型 my_model <- lm(sqrt(y) ~ x1 + x2, data = my_dataset)
这时候模型输出的预测值是sqrt(y)的估计值,要还原回原始y的尺度,直接对预测值做平方运算就好:
# 生成原始尺度的预测结果 my_dataset$predicted_y <- (predict(my_model))^2
现在predicted_y就和原始的y在同一个尺度上了,绘图时直接用这俩对比就行。
情况2:预测变量x做了sqrt变换
如果是预测变量x被做了变换,比如模型是:
# 用sqrt(x)作为预测变量拟合模型 my_model_x <- lm(y ~ sqrt(x), data = my_dataset)
这种情况其实不需要“还原”y,因为y本身就是原始尺度。要是想基于原始x值绘图,只需要在预测时传入原始x数据,模型会自动处理sqrt(x)的转换:
# 按原始x排序,让拟合线更平滑 sorted_data <- my_dataset[order(my_dataset$x), ] # 绘制原始y值 + 原始x尺度的拟合线 plot(sorted_data$x, sorted_data$y, xlab = "原始x值", ylab = "原始y值") lines(sorted_data$x, predict(my_model_x, newdata = sorted_data), col = "blue", lwd = 2)
二、解决绘图时的数值差异问题
你提到的“平方后存在较大差异”,其实是平方根变换的特性:小数值的sqrt结果平方后会更小,大数值的sqrt结果平方后会被放大。解决起来很简单:
- 直接用原始y值和还原后的predicted_y做散点图对比:
plot(my_dataset$y, my_dataset$predicted_y, xlab = "原始y值", ylab = "还原后的预测y值", main = "原始值 vs 还原后预测值") # 添加对角线,方便直观判断拟合效果(越贴近对角线拟合越好) abline(0, 1, col = "red", lwd = 2)
- 如果是画拟合线,记得按预测变量排序,避免线条乱跳:
sorted_data <- my_dataset[order(my_dataset$x1), ] plot(sorted_data$x1, sorted_data$y, xlab = "x1变量", ylab = "原始y值") lines(sorted_data$x1, (predict(my_model, newdata = sorted_data))^2, col = "darkgreen", lwd = 2)
关键提醒
千万别搞反顺序:一定要先让模型输出预测值,再做平方还原,绝对不能先把原始y平方再拟合模型——那完全是另一个模型了,结果会完全不对!
内容的提问来源于stack exchange,提问作者Saalva
相关产品推荐
相关产品推荐

