Нелинейная регрессия в R с несколькими категориальными зависимыми переменными

Мне нужно выполнить нелинейную множественную регрессию с данными, которые выглядят следующим образом:

ID    Customer   Country   Industry      Machine-type    Service hours**
1     A          China     mass          A1              120
2     B          Europe    customized    A2              400
3     C          US        mass          A1               60
4     D          Rus       mass          A3              250
5     A          China     mass          A2              480
6     B          Europe    customized    A1              300
7     C          US        mass          A4              250
8     D          Rus       customized    A2              260
9     A          China     Customized    A2              310
10    B          Europe    mass          A1              110
11    C          US        Customized    A4               40
12    D          Rus       customized    A2              80

Зависимая переменная: часы работы. Независимые переменные: клиент, страна, отрасль, тип машины.

Я применил линейную регрессию, но поскольку предположение о линейности не выполняется, я должен выполнить нелинейную регрессию.

Я знаю, что нелинейную регрессию можно выполнить с помощью функции nls. Как мне добавить категориальные переменные к нелинейной регрессии, чтобы получить статистическую сводку в R?

Имена столбцов после добавления макетов: таблица с макетами

ID  Customer.a  Customer.b  Customer.c  Customer.d  Country.China   Country.Europe  Country.Rus Country.US  Industry.customized industry.Customized Industry.mass   Machine type.A1 Machine type.A2 Machine type.A3 Service hours
1 1 0 0 0 1 0 0 0 0 0 1 1 0 0 120 
2 0 1 0 0 0 1 0 0 1 0 0 0 1 0 400 
3 0 0 1 0 0 0 0 1 0 0 1 0 0 1 60 
4 0 0 0 1 0 0 1 0 0 0 1 1 0 0 250 
5 1 0 0 0 1 0 0 0 1 0 0 0 0 1 480 
6 0 1 0 0 0 1 0 0 0 1 0 1 0 0 300 
7 0 0 1 0 0 0 0 1 0 0 1 0 0 1 250 
8 0 0 0 1 0 0 1 0 1 0 0 0 1 0 260 
9 1 0 0 0 1 0 0 0 0 0 1 0 1 0 210 
10 0 1 0 0 0 1 0 0 1 0 0 0 1 0 110 
11 0 0 1 0 0 0 0 1 0 0 1 0 0 1 40 
12 0 0 0 1 0 0 1 0 0 0 1 1 0 0 80

person Yannick    schedule 03.02.2018    source источник
comment
Не уверен, может ли используемая вами функция принимать факторные переменные или вам может потребоваться создать фиктивные переменные. Взгляните на пакет dummies   -  person Sam    schedule 03.02.2018
comment
Привет, Спасибо за быстрый ответ! Да, я использовал пакет пустышек. Итак, теперь у меня есть несколько манекенов, но как я могу поместить эти манекены в нелинейную функцию, в которой результаты статистической сводки?   -  person Yannick    schedule 03.02.2018
comment
›Datadum‹ - dummy.data.frame (Map1, sep =.) ›Имена (datadum) [1] ID Customer.a Customer.b [4] Customer.c Customer.d Country.China [7] Country.Europe Country .Rus Country.US [10] Industry.customized Industry.Customized Industry.mass [13] Тип машины.A1 Тип машины.A2 Тип машины.A3 [16] Часы работы   -  person Yannick    schedule 03.02.2018
comment
это те манекены, которые я получаю. Я хотел бы добавить их к нелинейной регрессии. Заранее спасибо за помощь!   -  person Yannick    schedule 03.02.2018
comment
Можете ли вы обновить фрейм данных в вопросе, пожалуйста   -  person Sam    schedule 03.02.2018
comment
Я добавил таблицу, но не знаю, как сделать из нее красивую таблицу в качестве последней. Поэтому я добавил картинку. Спасибо!   -  person Yannick    schedule 03.02.2018
comment
Сейчас данные выглядят неплохо. Вы должны уметь соответствовать модели.   -  person Sam    schedule 03.02.2018
comment
модель ‹- nls (datadum $ Service hours ~ datadum $ Customer.a + datadum $ Customer.b + datadum $ Customer.c + datadum $ Customer.d + datadum $ Country.China + datadum $ Country.Europe + datadum $ Country.Rus + datadum $ Country.US + datadum $ Industry.customized + datadum $ Industry.Customized + datadum $ Industry.mass + datadum $ Machine type.A1 + datadum $ Machine type.A2 + datadum $ Machine type.A3)   -  person Yannick    schedule 03.02.2018
comment
это то, что я сделал бы с функцией lm, но как она работает правильно для функции nls?   -  person Yannick    schedule 03.02.2018
comment
Выполните make.names() в своем наборе данных, чтобы удалить пробел между ответом, и используйте формулу nls(Service.hours ~ . -ID, data = df)   -  person Sam    schedule 03.02.2018
comment
Примечание. Я предполагаю, что вам также нужно будет указать свой алгоритм и параметр запуска, это всего лишь пример.   -  person Sam    schedule 03.02.2018
comment
Ok! хорошо, это сработало.   -  person Yannick    schedule 03.02.2018
comment
Отлично, напишу ответ :)   -  person Sam    schedule 03.02.2018
comment
мне нужно что-то делать с предупреждением? и как мне интерпретировать эти результаты? могу я сказать что-нибудь о прогнозируемом значении независимых переменных? вывод: ›nls (Часы ~. -ID, data = df) Модель нелинейной регрессии: Часы ~. - Идентификационные данные: df. 219,8 остаточная сумма квадратов: 204970 Число итераций до сходимости: 1 Достигнутый допуск сходимости: 2,825e-16 Предупреждающее сообщение: в nls (часы ~. - ID, data = df): для некоторых параметров не указаны начальные значения. Инициализация «.» На «1.». Рассмотрите возможность указания start или использования модели selfStart   -  person Yannick    schedule 03.02.2018
comment
хм, вам может потребоваться указать ваши предикторы в формуле. Обычно период интерпретируется как «все». Не совсем уверен, что это за параметр запуска. Что касается интерпретации результатов, посмотрите на коэффициенты, привязанные к предикторам.   -  person Sam    schedule 03.02.2018
comment
Хорошо, как узнать, какой алгоритм и начальный параметр использовать? Мои прогнозы - это заказчик, страна, машина и отрасль. Как добавить эти предикторы?   -  person Yannick    schedule 03.02.2018
comment
Алгоритм по умолчанию - алгоритм Гаусса-Ньютона. Я думаю, вам нужен алгоритм plinear. В случае сомнений обратитесь к документации по этой функции. ?nls   -  person Sam    schedule 03.02.2018
comment
Спасибо! Это способ добавить плоскостность? Если я добавлю плоскостность, я получаю предупреждающее сообщение об отсутствии начальных значений: как мне решить эту проблему? ›Nls (Часы ~. -ID, data = df, algorithm = plinear, start =) Ошибка в nls (Часы ~. - ID, data = df, algorithm = plinear, start =): начальные значения не указаны   -  person Yannick    schedule 04.02.2018
comment
Я также не получаю следующего вывода: Параметры: Estimate Std. Ошибка t значение Pr (›| t |)   -  person Yannick    schedule 04.02.2018


Ответы (1)


Способ обработки категориальных предикторов зависит от количества уровней, которые предиктор может удерживать.

Для таких предикторов, как пол, которые могут принимать только 2 формы (мужской или женский), вы можете просто представить их как двоичную (1,0) переменную.

Для предикторов с более чем 2 уровнями мы используем фиктивное кодирование 1 из k, где k - количество уровней, которые принимает конкретная переменная. См. Полезные функции в пакете dummies!

После этого вы можете подогнать модель по формуле:

nls(Service.hours ~ predictor1 + predictor2 + predictorN, data = df)
person Sam    schedule 03.02.2018
comment
Если я использую эту функцию nls, я получаю следующую ошибку: ›test2nls‹ - nls (Часы ~ ID + Customer.a + Customer.b + + Customer.c + Customer.d + Country.China + + Country.Europe + Country. Rus + + Industry.customized + Industry.Customized + + Industry.mass + Machine.A1 + Machine.A2 + + Machine.A3, data = df) Ошибка в getInitial.default (func, data, mCall = as.list (match .call (func,: для объектов функций не найден метод getInitial. - person Yannick; 04.02.2018