2014-09-04 60 views
0

我有一個迴歸其看起來像這樣:R,式具有線性和非線性部分

fit <- nls (data$y ~ (data$v1 + data$v2 + data$v3 + data$v4) *(1 + exp(theta1 - theta2*data$v5 - theta3*data$v6)^-1), 
     data = data, 
     start = c (theta1 =0, theta2= 0, theta3= 0)) 

摘要(適合)

在變量遵循線性關係的第一部分,但它們是由加權一個非線性表達式(第二部分)。該模型運行,但摘要僅顯示非線性部分(theta1,theta2和theta3)上參數的信息。有人知道如何獲得關於截距和非線性部分系數的信息嗎?或者我的公式錯誤,R不估計這些係數?

+2

您不需要每個變量前面的'data $'部分。 – 2014-09-04 20:51:39

+3

但是您確實需要顯式變量係數來表示數據中的每個值。與'lm()'不同,'nls()'不假定你想估計模型中每個變量的係數。所以你希望它看起來像'alpha1 * v1 + alpha2 * v2 + alpha3 * v3 + alpha4 * v4'或類似的東西。通過包含樣本數據,使其成爲一個[可重現的示例](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)數據中包含什麼,什麼不是。 – MrFlick 2014-09-04 20:53:15

回答

2

雖然lm會假設你想要在每個數據列前面的係數,nls沒有這樣的假設;你必須告訴它。

fit <- nls (y ~ (b0 + b1 * v1 + b2 * v2 + b3 * v3 + b4 * v4) * 
       (1 + exp(theta1 - theta2 * v5 - theta3 * v6)^-1), 
     data = data, 
     start = c (b0 = 0, b1 = 1, b2 = 2, b3 = 3, b4 = 4, 
        theta1 =0, theta2= 0, theta3= 0)) 

您可能要開始適應lm的第一部分,然後在nls使用的估計係數作爲初始值。

+1

,但請注意'nlme :: gnls'有一個'params'參數,它允許您爲某些參數指定線性子模型,例如gnls(yB *(1 + exp(T)^( - 1)),params = list(B_v1 + v2 + v3 + v4,T_v5 + v6),...) – 2014-09-04 21:09:24