如何使用 R 中的非标准多项式函数调整非线性曲线拟合的系数

How to adjust coefficients for nonlinear curve fit using non-standard polynomial function in R

我正在尝试对一组数据执行多项式回归,其图如下所示

但是,每次我执行此回归时,我都会得到一个较低的 R 平方值,即使这些点看起来紧紧地围绕着一条线。我猜测为什么会发生这种情况是因为 r 使用方程来拟合曲线

(虽然我不确定 poly 函数是否真的使用了这个方程,这只是一个猜测),而且这似乎无法生成图中那样的曲线。为了解决这个问题,我写了一个新的方程式,它似乎非常适合数据。

玩了一会儿数字后,我在图 1 上生成了红色曲线,其值为 beta_0 = 22、beta_one = 195 和 beta_two = 。 001.然后我 运行 对该等式进行回归并得到更合理的 R 平方值。该图的代码和回归如下:

plot(full_simulation_data$T_n_rt_tds~full_simulation_data$d_rt_tds, pch = 20, cex = .5, ylim = c(0,1000), xlim = c(.75,1))

curve((22+((x^195)/.001*x)), add = TRUE, col = "red")

summary(lm(full_simulation_data$T_n_rt_tds~I(22+((full_simulation_data$d_rt_tds^195)/(.001*full_simulation_data$d_rt_tds)))))

我的问题是双重的。第一,有没有办法让 R 自动调整这些系数,这样我就不必通过目测来拟合这条线?第二,有没有一种方法可以让正态多项式函数拟合数据,这样我就不必发明新的方程来拟合数据?

是的,R 具有函数 nls 以适合自定义函数:

#create fake data
b0<-22
b1<-195
b2<-0.001
x<-sort(runif(1000, 0, 1))
y<-b0+x^b1/(b2*x)+ rnorm(1000, 2, 2)

#fit model
model<-nls(y~ beta0+x^beta1/(beta2*x), start=list(beta0=10, beta1=100, beta2=0.001))

print(summary(model))
#plot results
plot(x, y)
lines(x, predict(model, data.frame(x)), col="red")

nls 函数中,我定义了您的函数并提供了参数起始值列表并允许 R 求解。 nls是一个非常强大的功能,我建议花一些时间阅读文档。