在R中进行非线性多元回归

7

我正在尝试在R中运行一个非线性多元回归,并使用一个数据集,它有成千上万的行,所以我只会把前几个放在这里:

      Header.1 Header.2   Header.3  Header.4 Header.5 Header.6 Header.7
1          -60      -45 615 720        1.8318          0.428    -11.614
2          -59      -45 616 720        1.8322          0.429    -11.498
3          -58      -45 617 720        1.8326          0.430    -11.383
4          -57      -45 618 720        1.8330          0.430    -11.267
5          -56      -45 619 720        1.8334          0.431    -11.152
6          -55      -45 620 720        1.8338          0.432    -11.036
7          -54      -45 621 720        1.8342          0.433    -10.921
8          -53      -45 622 720        1.8346          0.433    -10.806
9          -52      -45 623 720        1.8350          0.434    -10.691
10         -51      -45 624 720        1.8354          0.435    -10.576
11         -50      -45 625 720        1.8357          0.435    -10.461
12         -49      -45 626 720        1.8361          0.436    -10.347
13         -48      -45 627 720        1.8365          0.437    -10.232
14         -47      -45 628 720        1.8369          0.438    -10.118
15         -46      -45 629 720        1.8373          0.438    -10.003
16         -45      -45 630 720        1.8377          0.439     -9.889
17         -44      -45 631 720        1.8381          0.440     -9.775
18         -43      -45 632 720        1.8385          0.440     -9.660
19         -42      -45 633 720        1.8389          0.441     -9.546
20         -41      -45 634 720        1.8393          0.442     -9.432
21         -40      -45 635 720        1.8397          0.442     -9.318
22         -39      -45 636 720        1.8400          0.443     -9.205
23         -38      -45 637 720        1.8404          0.444     -9.091
24         -37      -45 638 720        1.8408          0.445     -8.977
25         -36      -45 639 720        1.8412          0.445     -8.864
26         -35      -45 640 720        1.8416          0.446     -8.751
27         -34      -45 641 720        1.8420          0.447     -8.637
28         -33      -45 642 720        1.8424          0.447     -8.524

请简单说明如何使用Header.1和Header.2作为自变量,Header.7作为因变量运行非线性多元回归。您已经成功地使用lm()运行了线性多元回归,但是当您尝试使用nls()时,出现了以下错误信息:
Error in getInitial.default(func, data, mCall = as.list(match.call(func, : no 'getInitial' method found for "function" objects
如果您需要更多信息以便能够运行回归,请告诉我。谢谢。

3
你能展示你尝试运行的实际代码吗? - mgamba
听起来你需要设置初始值 - 请参阅 R 文档中的 NLS 部分,并查看 "start" 参数的示例。 - alex keil
nls(Header.7 ~ Header.1 + Header.2, data = mydataset)我怀疑这完全是错误的,但我不确定该如何正确地做。我像使用lm()一样做了,但我不确定是否应该这样做。 - japem
你想拟合什么非线性模型?我可以看到Header.1Header.2是预测变量,但是它们与响应之间的非线性函数是什么? - Ben Bolker
2个回答

11

要使用nls,您需要为变量指定公式和起始值。因此,首先要做的是决定您想尝试拟合哪种非线性公式。

例如,如果您执行以下操作:

m2<-nls(Header.7 ~ Header.1*a + Header.2*b + c,data=data,start=c(a=0,b=0,c=0))

如果您拟合的模型是线性的,那么您将获得与普通线性回归(大约)相同的结果。没有“默认”的非线性回归,因此您需要确定要适配哪种非线性模型。请参见?nls以获取详细信息。


1
啊...有点烦人。不过感谢你澄清了这个问题。我觉得R应该能够自己解决,而不需要我设置一些系数,但无论如何。 - japem
你如何确定从哪里开始...在这种情况下,有4个预测变量,应该有比随便选择一个模型并尝试所有可能性更好的方法吧? - Kira
1
SSasymp()可以帮助选择这些系数。 - CrunchyTopping

6

因此,在线性模型中,参数是隐式指定的:

fit <- lm(Header.7 ~ Header.1 + Header.2, data=...)

将适合模型:

Header.7 = a * Header.1 + b * Header.2 + c

在非线性模型中,您需要明确指定参数,就像 @mrip 所演示的那样。当然,在非线性模型中,模型公式可以是任意复杂的:
fit <- nls(Header.7 ~ exp(a*Header.1 + b/Header.2), data=..., start=c(...))

最后,start是可选的:nls(...)会自动猜测。但是不能保证模型会收敛到有意义的参数值,甚至可能根本不会收敛。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接