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

标签 r curve-fitting polynomials nonlinear-functions coefficients

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

Plot 1

但是,每次执行此回归时,即使这些点看起来紧密地排列在一条线上,我也会得到较低的 R 平方值。我对为什么发生这种情况的猜测是 r 正在使用方程来拟合曲线

First equation

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

New Equation

对这些数字进行一番研究后,我在图 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 是一个非常强大的函数,我建议花一些时间阅读文档。

关于r - 如何使用R中的非标准多项式函数调整非线性曲线拟合的系数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51334460/

相关文章:

algorithm - 符号计算 Neville 算法的多项式

r - 如何创建车辆沿路线从 A 移动到 B 的动画?

R查找数据帧的不匹配列名

r - 返回单个条形的堆积条形图

Python scipy.optimise.curve_fit 给出线性拟合

matlab - Matlab 函数 "fit"是否有等效的 GNU Octave?

c++ - NTRUEncrypt:无法使用开源标准算法中描述的正确找到两个多项式的 GCD,无法定义是否存在 poly 的倒数

正则表达式在存在多个时提取第一个 date_time 戳

python - 函数调用的结果不是 float 组

python - 类型错误 : expected 1D vector for x