2012-02-24 3 views
1

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

В частности, меня интересуют 3 функции, линейные, экспоненциальные и экспоненциальные, используя две точки останова. Пожалуйста посоветуйте

Karthik

+0

Как вы делали свою кусочно-линейную регрессию и почему не тот же метод обобщает на нелинейные функции? Пакет 'segmented' может выполнять кусочно-линейные регрессии, , и если ваша модель' y ~ x + exp (x) + log (x) ', она фактически линейна (с тремя предикторами' x', 'exp (x) 'и' log (x) '). –

ответ

3

Would с использованием nls() (нелинейного метода наименьших квадратов) решения вашей проблемы? Я использовал формулировку, подобную этой, путем добавления в True/False заявления для каждого «элемента»:

reg = nls(y ~ (Z < 0.33) * a + (Z < 0.33) * Z * b + 
     (Z >= 0.33 & Z < 0.67) * Z^a2 + 
     (Z >= 0.67) * a3 + (Z >= 0.67) * Z * a4, 
     start = list(a = 0, b = 50, a2 = 100, a3 = 150, a4 = 80), 
     data = yourdata) 

В стилизованной примере выше, контрольные точки при Z = 0,33 и Z = 0,67. Если вы можете быть более конкретным или предоставить код трех регрессий отдельно, я могу сделать свой ответ более конкретным.

0

Мое предложение состоит в том, чтобы загрузить пакет сплайнов, а затем запустить примеры в help(bs). Вы можете получить кусочно кубический (но непрерывный на узлах), который подходит с использованием линейного регрессионного оборудования. Харрелл использовал эту стратегию для превосходного эффекта в своем пакете «rms». Загрузите 'rms' и посмотрите на help(rcs). В примере на этой странице используется его реализация логистической регрессии, но rcs() работают в ols() и cph().

Смежные вопросы