我在拟合Y = aX^b类型的潜在回归模型时遇到了一些问题。
我有以下数据向量:
x <- c(2.08, 1.99, 2.03, 2.01, 2.10, 1.91, 1.84, 2.16, 2.04, 2.05, 2.04, 1.97, 2.03, 2.11, 2.06, 2.07, 2.12, 1.98, 2.13, 2.13, 1.97, 1.79, 2.11, 2.09, 2.19, 2.07, 1.99, 2.03, 2.12, 2.14)*100
y <- c(157.91, 138.47, 146.26, 142.81, 161.77, 123.76, 109.68, 175.48, 149.84, 151.99, 149.39, 134.55, 147.54, 164.49, 153.63, 154.44, 167.12, 136.43, 169.25, 168.22, 134.32, 101.56, 164.96, 160.17, 182.02, 154.95, 137.78, 147.75, 166.54, 171.11)
plot(x,y)
虽然这个玩具数据很好地拟合了线性模型(R^2 0.997),但实际上我的数据中X的范围更广,从5到450,我凭直觉认为它更适合于Y = aX^b类型的函数。
我正尝试使用log(x)
和log(y)
拟合一个将X和Y线性化的模型。
fit <- lm(log(y)~log(x))
plot(x,y)
lines(x, exp(fit$fitted.values), col="red")
但是,由于出现了许多线,绘图没有意义。我如何改进此图形?是拟合模型不正确还是绘图错误?
如果我打印以下内容,我可以得到模型的摘要:
summary(fit)
输出:
> summary(fit)
Call:
lm(formula = log(y) ~ log(x))
Residuals:
Min 1Q Median 3Q Max
-0.0064932 -0.0026293 -0.0003367 0.0026992 0.0065128
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -10.49654 0.08586 -122.3 <2e-16 ***
log(x) 2.91462 0.01614 180.6 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.003912 on 28 degrees of freedom
Multiple R-squared: 0.9991, Adjusted R-squared: 0.9991
F-statistic: 3.261e+04 on 1 and 28 DF, p-value: < 2.2e-16
我怎样才能得到RMSE,怎样才能得到定义模型的方程,也就是说,它们在方程Y = aX^b中的值为a和b。
1条答案
按热度按时间ogq8wdun1#
问题出在绘图而不是模型上,如果绘制直线,你的数据应该是有序的,否则你会得到一个非常曲折的东西,就像你注意到的那样。
或者在运行模型之前对数据进行排序。