Как мне совместить экспоненциальные модели с R? - PullRequest
0 голосов
/ 26 сентября 2019

Я полностью новичок в R и пытаюсь согласовать две нелинейные модели роста с nlsLM для своей диссертации, но я не могу получить никакого результата.Модели от Tomé и др. , 2006 о кривых роста, не зависящих от возраста, которые они соответствуют, используя SAS:

model images

, где 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 года с высотами, собранными в этом году (набор данных в этом посте), и это сработало.Затем я изменил уравнение первого, основываясь на новых наблюдениях за высотой, но, похоже, оно не работает должным образом.Однако я решил свои сомнения по поводу второй модели.

...