Я полностью новичок в R и пытаюсь согласовать две нелинейные модели роста с nlsLM
для своей диссертации, но я не могу получить никакого результата.Модели от Tomé и др. , 2006 о кривых роста, не зависящих от возраста, которые они соответствуют, используя SAS:
, где ti = (-k / log(Yi / A)) ^ (1 / m), «Yi + a» - это высота на проектируемой длине, а «Yi» - это высота.
Сейчас я делаю первый, но так как он довольнодля меня, я решил упростить его и установить «ti + a» как «x», а затем выполнить математику позже, но я получил эту ошибку:
fm0 <- nlsLM(y ~ A * exp(-k * (1/(x^m))), data=df, start = c(A=30, k=0.1, m=0.1, x=1))
Error in qr(.swts * attr(rhs, "gradient")) :
dims [product 4] do not match the length of object [55]
In addition: Warning messages:
1: In min(x) : no non-missing arguments to min; returning Inf
2: In max(x) : no non-missing arguments to max; returning -Inf
3: In .swts * attr(rhs, "gradient") :
longer object length is not a multiple of shorter object length
Это весь мой набор данных
id block plot species dbh height
1 61 A1 2 bw 23.1 17.50
2 102 A1 2 pr 41.2 24.50
3 139 A1 3 po 22.0 17.00
4 207 A1 3 pr 37.0 23.50
5 256 B2 1 pw 22.5 15.50
6 286 B2 1 pr 32.5 24.50
7 308 B2 2 pr 35.9 21.00
8 366 B2 2 pw 33.5 22.50
9 390 B2 3 pr 36.5 22.50
10 416 B2 3 pw 22.5 14.25
11 439 C3 1 pr 34.5 23.50
12 498 C3 1 pw 48.5 24.50
13 520 C3 2 ob 30.0 19.75
14 522 C3 2 pr 32.5 22.00
15 523 C3 2 bf 30.5 19.25
16 534 C3 3 pr 30.3 25.00
17 563 C3 3 pw 32.2 24.50
18 577 E5 1 pw 34.4 20.50
19 609 E5 1 mr 14.0 14.50
20 617 E5 1 pr 41.0 26.50
21 690 D4 1 mh 19.3 21.00
22 711 D4 1 pw 50.0 22.00
23 746 P13 1 pr 35.6 24.80
24 773 P13 1 mr 12.7 18.50
25 784 P13 2 pw 23.5 17.00
26 786 P13 2 pw 45.6 33.00
27 839 K9 1 mr 12.4 16.00
28 852 K9 1 pr 33.1 25.00
29 917 N12 1 ob 45.0 24.00
30 926 N12 1 mr 13.4 23.00
31 943 N12 2 mr 15.5 16.75
32 972 N12 2 pr 37.0 23.25
33 1015 M11 1 pr 36.1 27.00
34 1016 M11 1 or 22.6 18.25
35 1067 L10 1 ob 11.7 20.75
36 1072 L10 1 pr 34.2 22.00
37 1085 J8 1 pr 33.6 28.00
38 1127 J8 1 or 14.8 17.00
39 1150 J8 2 or 14.1 18.75
40 1163 J8 2 pr 32.1 26.50
41 1229 H7 1 pr 31.5 27.00
42 1262 H7 1 ob 12.0 18.25
43 1356 G6 1 mr 8.5 12.75
44 1360 G6 1 pw 41.5 21.00
45 1361 G6 2 po 39.0 28.75
46 1364 G6 2 mr 8.0 14.75
47 1410 D4 2 mr 10.2 14.50
48 1437 D4 2 pr 34.5 22.50
49 1450 R15 1 mr 15.0 30.00
50 1482 R15 1 pw 50.0 36.00
51 1496 R15 2 pw 14.9 15.00
52 1497 R15 2 pw 25.7 27.00
53 1498 R15 2 mr 15.8 18.00
54 1574 Q14 1 pr 34.8 26.50
55 1615 Q14 1 or 13.9 22.00
Буду очень признателен за любую помощь!Спасибо!
Edit2:
Я попытался подогнать первую нелинейную модель, откалибровав и линеаризовав ее как
fm0 <- nlsLM(log(y) ~ log(A)-k*(1/(y^m)), data = df1, start = list(k=0.01, m=0.6, A=max(y)))
, где y - высотав наборе данных, используя пакет nlsLM
, и я получил оценку и предупреждение
k m A
8.2350 0.3632 322.9463
residual sum-of-squares: 0.00711
Warning messages:
1: In min(x) : no non-missing arguments to min; returning Inf
2: In max(x) : no non-missing arguments to max; returning -Inf
3: In nls.lm(par = start, fn = FCT, jac = jac, control = control, lower = lower, :
lmdif: info = -1. Number of iterations has reached `maxiter' == 50.
Edit3:
Поскольку концепция функции размещена в "Edit2"не правильно, я смог уместить вторую нелинейную модель с nlsLM
, отредактировав свой набор данных.Я сравнил предыдущие высоты 2015 года с высотами, собранными в этом году (набор данных в этом посте), и это сработало.Затем я изменил уравнение первого, основываясь на новых наблюдениях за высотой, но, похоже, оно не работает должным образом.Однако я решил свои сомнения по поводу второй модели.