Нелинейная множественная регрессия в R

Я пытаюсь запустить нелинейную множественную регрессию в 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

Может кто-нибудь объяснить мне очень простыми словами, как запустить множественную регрессию nonliner с использованием Header.1 и Header.2 в качестве независимых переменных и Header.7 в качестве зависимой переменной? Я успешно выполнил линейную множественную регрессию с помощью lm (), но когда я попытался использовать nls (), я получил следующее сообщение об ошибке:

Ошибка в getInitial.default (func, data, mCall = as.list (match.call (func,: для объектов «функция» не найден метод getInitial)

Если вам нужна дополнительная информация, чтобы запустить регрессию, дайте мне знать. Спасибо.


person japem    schedule 21.12.2013    source источник
comment
Можете ли вы показать реальный код, который вы пытались запустить?   -  person mgamba    schedule 21.12.2013
comment
Похоже, вам нужно установить начальные значения - см. Документацию R для NLS и посмотрите примеры для аргумента start для NLS.   -  person alex keil    schedule 21.12.2013
comment
nls (Header.7 ~ Header.1 + Header.2, data = mydataset) У меня есть подозрение, что это совершенно неверно, но я не уверен, как это сделать правильно. Я сделал это так же, как и с lm (), но я не уверен, что это так.   -  person japem    schedule 21.12.2013
comment
в какую нелинейную модель вы хотите вписаться ?? Я вижу, что Header.1 и Header.2 являются переменными-предикторами, но какая нелинейная функция связывает их с ответом?   -  person Ben Bolker    schedule 21.12.2013


Ответы (2)


Чтобы использовать nls, вам необходимо указать как формулу, так и начальные значения для переменных. Итак, первое, что вам нужно сделать, это решить, какую нелинейную формулу вы хотите попробовать и подобрать.

Например, если вы сделаете это:

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

тогда вы получите (приблизительно) тот же результат, что и обычная линейная регрессия, потому что модель, которую вы подбираете, является линейной. Не существует нелинейной регрессии "по умолчанию", поэтому вам нужно выяснить, какой тип нелинейной модели вы хотите использовать. Подробнее см. ?nls.

person mrip    schedule 21.12.2013
comment
Ах ... это немного раздражает. Тем не менее, спасибо за разъяснение. Я чувствую, что R должен понять это сам, без необходимости устанавливать какие-то коэффициенты, но что угодно. - person japem; 23.12.2013
comment
Как понять, с чего начать ... в этом случае, когда есть 4 предиктора, должен быть лучший способ начать, чем просто использовать любую модель и опробовать все возможности? - person Kira; 06.11.2016
comment
SSasymp() помогает подобрать эти коэффициенты - person CrunchyTopping; 29.04.2020

Итак, в линейной модели параметры указываются неявно:

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

person jlhoward    schedule 21.12.2013