初始参数估计的奇异梯度矩阵 - 非线性回归
singular gradient matrix at initial parameter estimates - Non Linear Regression
所以我是使用 R 的数据科学新手,我不确定自己做错了什么。使用数据集:
rocketBurn
Oxygen Consumed
Hydrogen Used
Trajectory
Thrust
20
20000
30000
0
500000
40
40000
60000
0
525000
60
60000
90000
0
551250
80
80000
120000
4
578813
100
100000
150000
8
593283
120
120000
180000
12
593283
140
140000
210000
16
593283
160
160000
240000
20
593283
180
180000
270000
24
593283
200
200000
300000
28
593283
220
220000
330000
32
593283
240
240000
360000
36
593283
260
260000
390000
40
593283
280
280000
420000
44
593283
300
300000
450000
46
593283
320
320000
480000
46
593283
我能够使用 R 中的 lm() 公式创建线性回归模型,当我尝试使用 nls 公式时,我收到以下错误消息
nlrModel <- nls(Trajectory ~ Oxygen.Consumed + Thrust,data = df,start = c(a=0,b=0,c=0))
Error in nlsModel(formula, mf, start, wts, scaleOffset = scOff, nDcentral = nDcntr) :
singular gradient matrix at initial parameter estimates
经过一番谷歌搜索后,我认为错误是由于启动参数引起的,但是,我不知道如何获得正确的启动参数。非常感谢任何有关如何让这个模型工作的帮助!
问题是nls模型中的公式有误。 lm 和 nls 不使用相同的公式表示法。在 lm 中,对于没有交互作用的模型,自变量以加号分隔列出,而在 nls 中,公式包括系数。例如,这描述了 lm 和 nls 中的相同模型。
lm(Trajectory ~ Oxygen.Consumed + Thrust, df)
st <- list(a = 1, b = 1, c = 1)
nls(Trajectory ~ a + b * Oxygen.Consumed + c * Thrust, df, start = st)
备注
可重现形式的输入是:
df <-
structure(list(rocketBurn = c(20L, 40L, 60L, 80L, 100L, 120L,
140L, 160L, 180L, 200L, 220L, 240L, 260L, 280L, 300L, 320L),
Oxygen.Consumed = c(20000L, 40000L, 60000L, 80000L, 100000L,
120000L, 140000L, 160000L, 180000L, 200000L, 220000L, 240000L,
260000L, 280000L, 300000L, 320000L), Hydrogen.Used = c(30000L,
60000L, 90000L, 120000L, 150000L, 180000L, 210000L, 240000L,
270000L, 300000L, 330000L, 360000L, 390000L, 420000L, 450000L,
480000L), Trajectory = c(0L, 0L, 0L, 4L, 8L, 12L, 16L, 20L,
24L, 28L, 32L, 36L, 40L, 44L, 46L, 46L), Thrust = c(500000L,
525000L, 551250L, 578813L, 593283L, 593283L, 593283L, 593283L,
593283L, 593283L, 593283L, 593283L, 593283L, 593283L, 593283L,
593283L)), class = "data.frame", row.names = c(NA, -16L))
所以我是使用 R 的数据科学新手,我不确定自己做错了什么。使用数据集:
rocketBurn | Oxygen Consumed | Hydrogen Used | Trajectory | Thrust |
---|---|---|---|---|
20 | 20000 | 30000 | 0 | 500000 |
40 | 40000 | 60000 | 0 | 525000 |
60 | 60000 | 90000 | 0 | 551250 |
80 | 80000 | 120000 | 4 | 578813 |
100 | 100000 | 150000 | 8 | 593283 |
120 | 120000 | 180000 | 12 | 593283 |
140 | 140000 | 210000 | 16 | 593283 |
160 | 160000 | 240000 | 20 | 593283 |
180 | 180000 | 270000 | 24 | 593283 |
200 | 200000 | 300000 | 28 | 593283 |
220 | 220000 | 330000 | 32 | 593283 |
240 | 240000 | 360000 | 36 | 593283 |
260 | 260000 | 390000 | 40 | 593283 |
280 | 280000 | 420000 | 44 | 593283 |
300 | 300000 | 450000 | 46 | 593283 |
320 | 320000 | 480000 | 46 | 593283 |
我能够使用 R 中的 lm() 公式创建线性回归模型,当我尝试使用 nls 公式时,我收到以下错误消息
nlrModel <- nls(Trajectory ~ Oxygen.Consumed + Thrust,data = df,start = c(a=0,b=0,c=0))
Error in nlsModel(formula, mf, start, wts, scaleOffset = scOff, nDcentral = nDcntr) :
singular gradient matrix at initial parameter estimates
经过一番谷歌搜索后,我认为错误是由于启动参数引起的,但是,我不知道如何获得正确的启动参数。非常感谢任何有关如何让这个模型工作的帮助!
问题是nls模型中的公式有误。 lm 和 nls 不使用相同的公式表示法。在 lm 中,对于没有交互作用的模型,自变量以加号分隔列出,而在 nls 中,公式包括系数。例如,这描述了 lm 和 nls 中的相同模型。
lm(Trajectory ~ Oxygen.Consumed + Thrust, df)
st <- list(a = 1, b = 1, c = 1)
nls(Trajectory ~ a + b * Oxygen.Consumed + c * Thrust, df, start = st)
备注
可重现形式的输入是:
df <-
structure(list(rocketBurn = c(20L, 40L, 60L, 80L, 100L, 120L,
140L, 160L, 180L, 200L, 220L, 240L, 260L, 280L, 300L, 320L),
Oxygen.Consumed = c(20000L, 40000L, 60000L, 80000L, 100000L,
120000L, 140000L, 160000L, 180000L, 200000L, 220000L, 240000L,
260000L, 280000L, 300000L, 320000L), Hydrogen.Used = c(30000L,
60000L, 90000L, 120000L, 150000L, 180000L, 210000L, 240000L,
270000L, 300000L, 330000L, 360000L, 390000L, 420000L, 450000L,
480000L), Trajectory = c(0L, 0L, 0L, 4L, 8L, 12L, 16L, 20L,
24L, 28L, 32L, 36L, 40L, 44L, 46L, 46L), Thrust = c(500000L,
525000L, 551250L, 578813L, 593283L, 593283L, 593283L, 593283L,
593283L, 593283L, 593283L, 593283L, 593283L, 593283L, 593283L,
593283L)), class = "data.frame", row.names = c(NA, -16L))