2017-01-04 5 views
1

Для получения линейной модели, полученной по вызову функции reg = lm(...), как вы можете найти коэффициенты, которые максимизируют полученную функцию регрессии?Максимизировать функцию нелинейной регрессии в R

Я знаю о функции optim(...), но для этого требуется функция . Я не понял, как извлечь это из регрессионной модели.

Следует отметить, что я использую нелинейные термины в моем регрессионном анализе (точнее, квадратичные переменные).

Другими словами, функция регрессии выглядит

y_hat = kx_11*x_1+kx_12*x_1^2 + kx_21*x_2+kx_22*x_2^2 + ... 
+1

Что вы подразумеваете под «коэффициентами, которые максимизируют полученную функцию регрессии»? – thc

+0

Я только что обновил сообщение для ясности. То, что я пытаюсь достичь, соответствует взятию частных производных по всем переменным и решению множества уравнений, в которых все частные производные равны нулю. – user2810330

+0

Вы совсем не выяснили. Взяв ваш вопрос буквально, функция регрессии не будет максимизирована, потому что вы всегда можете неограниченно увеличить величину ваших коэффициентов. I.e, «установка ваших коэффициентов до бесконечности» приведет к «максимуму». Я предполагаю, что это не то, что вы хотите сделать, поэтому вам нужно уточнить больше. – thc

ответ

2

Вот краткий пример, чтобы продемонстрировать 1 способ. Используйте функцию прогнозирования() для объекта lm для создания вашей функции. fxn() немного беспорядочно, так как у меня нет ваших точных данных, но вы должны получить эту идею.

#set up dummy data 
x1 = -10:10 
x2 = runif(21) 
y = -x1^2 + x1 - 10*x2^2 + runif(21)*.1 
data = data.frame(y= y, x1=x1, x2=x2) 

#fit model 
m = lm(data=data, y ~ x1 + I(x1^2) + I(x2^2)) 

#define function that returns predicted value 
fxn = function(z){ 
    z = as.data.frame(t(z)) 
    colnames(z) = colnames(data)[-1] 
    predict(m, newdata=z) 
} 

optim(c(0,0), fxn, control=list(fnscale=-1)) #maximizes fxn 

$par 
[1] 4.991601e-01 -3.337561e-06 

$value 
[1] 0.3153461 

$counts 
function gradient 
     65  NA 

$convergence 
[1] 0 

$message 
NULL 
+0

Довольно умное решение! – thc

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

  • Нет связанных вопросов^_^