如何将回归拟合到 R 中的自定义模型

机器算法验证 r 回归
2022-04-04 15:02:26

这是我的荣誉论文。我有一个大型数据集,我只分享我称之为“低磷”系列的数据:

> P0
    R   N P D.weight
1  r1   0 0     63.8
2  r2   0 0     34.2
3  r3   0 0     24.9
4  r4   0 0     30.4
5  r5   0 0     33.3
6  r1  45 0     24.5
7  r2  45 0     20.1
8  r3  45 0     23.7
9  r4  45 0     20.0
10 r5  45 0     66.8
11 r1  90 0     27.8
12 r2  90 0     17.2
13 r3  90 0     36.4
14 r4  90 0     33.5
15 r5  90 0     14.0
16 r1 180 0     20.6
17 r2 180 0      9.7
18 r3 180 0      8.8
19 r4 180 0     14.4
20 r5 180 0     21.6
21 r1 360 0     18.4
22 r2 360 0      8.9
23 r3 360 0     31.4
24 r4 360 0     13.3
25 r5 360 0     21.9
  • R是代表
  • N是施用于土壤的氮
  • P是施用于土壤的磷
  • D.weight 是植物的平均干重,以克为单位

可视化这些数据的方法是将 N 放在 x 轴上,将干重放在 y 轴上:

阴谋

我必须对这些数据进行非线性回归,但我不想将其拟合到二次模型;相反,我想将它拟合到下面的等式(Mitscherlich 等式的替代方案):

Y=ab×exp(cx)

  • Y是干重
  • a 是代表最大生物量的拟合参数
  • b 是一个拟合参数,表示土壤中添加的养分的初始水平
  • c 是一个拟合参数,表示生物量随着养分修正的增加而增加的速率
  • x 是,在这种情况下,氮水平

问题是,我只是不知道如何为此编码。我一直在疯狂地试图找出如何“告诉” R 我想使用该方程进行回归,而不是(如线性回归)或就像在二次回归等中一样。Y=ax+bY=ax2+bx+c

3个回答

您可以拟合非线性回归。如果 - 除了之间的非线性关系- 您的模型假设类似于普通回归(例如,独立性和恒定方差),这将是合适的。E(Y)x

在 R 中,请参阅?nls

这个特定模型的困难在于找到合适的起始值。但是,通过重新参数化,您可能能够将其转换为可用的自启动功能之一的形式并在那里省去一些麻烦(具体来说,我相信SSasymp您需要的重新参数化模型的自启动功能)。但是,我设法找到了足够合理的起始值并获得了收敛:

 nlsfit <- nls(D.weight ~ a - b * exp(-c*N) ,P0,start=list(a=10,b=-20,c=.05))

 summary(nlsfit)

Formula: D.weight ~ a - b * exp(-c * N)

Parameters:
    Estimate Std. Error t value Pr(>|t|)   
a  16.208572   6.222312   2.605  0.01617 * 
b -22.000400   7.552922  -2.913  0.00806 **
c   0.011082   0.009454   1.172  0.25364   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 12.63 on 22 degrees of freedom

Number of iterations to convergence: 11 
Achieved convergence tolerance: 8.554e-06

它似乎非常适合,尽管可能会怀疑恒定方差假设:

在此处输入图像描述

还有一些关于右偏的可能性的建议。

如果您搜索“非线性最小二乘法”或“nls”,您应该找到一些帖子,其中一些包含有用的建议。我同意你已经收到的关于寻求建议的意见。

@Glen_b 提供了您应该追求的正确道路。以下是我想针对这种非线性建模场景指出的一些问题。

首先,@Glen_b 显示的非线性拟合有一个基本假设,即每个观察值,无论是否在相同的 N 上,都是独立的。我注意到你有一个变量“R”,它是代表。我不确定这意味着什么,但在我看来,有 5 个 R,即 r1、r2、r3、r4 和 r5。所以我担心每个代表的数据可能是相关的(您可能想提供有关变量的更多信息)。如果它们相关,您可能希望使用每个氮水平 N 的汇总平均值来拟合非线性最小二乘回归模型。否则,您应该得到相似的点估计,但标准误的估计是不同的。

其次,至于初始值,这里是你可以使用的技巧。请注意,是当趋于正无穷时的权重值。(即氮水平)的重量数据的合并平均值,因为这将是最接近的猜测。类似地,当时,您可以使用处的合并权重平均值来获得的初始估计值。因此,您可以计算出的初始猜测。之后,您可以选择任意处的数据,并代入来求解初始估计值axxax=0,y=abx=0abbxa,bc

第三,如果来自每个代表的数据真正相关。您可能想首先建立一个非线性随机效应模型,假设在不同的 R 水平,非线性曲线是不同的,即不同。建立模型后,您可以测试三个随机系数中的每一个是否显着。例如,随机本质上是随机截距。如果只有随机截距,则意味着所有非线性曲线形状相同,只是随机上下移动我没有使用 R 在 R 中做非线性混合效应模型。但在 SAS 中,PROC NLMIXED 正是这样做的。a,b,caa

我假设由于您不是统计学家,我会给您一个简单的解决方案。

安装 SPSS 并转到回归 >> 非线性

在此处输入图像描述