在R中实现幂回归:绘图异常、RMSE计算及模型参数求解问题
幂回归模型拟合问题解答
绘图异常问题解决
你用lines(x, exp(fit$fitted.values))出现乱线,原因是原始x向量未排序,lines()会按x的原始顺序依次连接点,导致线条交叉混乱。解决方法是先对x排序,再计算对应排序后的拟合值:
# 对x排序,同时生成对应排序后的拟合值 sorted_x <- sort(x) # 利用模型系数计算拟合值:Y = a*X^b = exp(截距) * X^b fitted_y <- exp(coef(fit)[1] + coef(fit)[2] * log(sorted_x)) # 重新绘图 plot(x, y) lines(sorted_x, fitted_y, col="red", lwd=2)
获取幂回归方程的a和b值
从线性化模型log(y) ~ log(x)推导幂模型Y = aX^b:
- 线性模型形式:
log(Y) = 截距 + b*log(X) - 转换为幂模型:
Y = exp(截距) * X^b
因此:
- b值就是
log(x)的系数,即coef(fit)[2],你的结果中为2.91462 - a值是截距的指数,即
exp(截距),计算得exp(-10.49654) ≈ 2.73×10^-5
用代码直接计算:
a <- exp(coef(fit)[1]) b <- coef(fit)[2] cat(sprintf("幂回归方程:Y = %.4e * X^%.4f\n", a, b))
计算模型RMSE
RMSE是真实值与拟合值差值的均方根,需要用原始y值和对应原始x的拟合值计算:
# 生成原始数据的拟合值(将log拟合值转换回原始尺度) fitted_y_original <- exp(predict(fit)) # 计算RMSE rmse <- sqrt(mean((y - fitted_y_original)^2)) cat(sprintf("模型RMSE:%.4f\n", rmse))
内容的提问来源于stack exchange,提问作者sermomon
相关产品推荐
相关产品推荐

