2016-03-18 20 views
0

我正在試圖建立一個如the manual for gmn in R中所述的非線性模型。該模型的期望形式是`R.gnm`中的自定義非線性函數

y = b0*x0^g0 + b1*x1^g1 + ... 

這似乎是非線性模型對我的最簡單的可能形式,但出於某種原因(和請糾正我,如果我錯了!)我必須寫自定義非線性函數以適應R.非常好!

df=read.csv("d:/mydataframe.csv") 
require(gnm) 

mypower = function(x){ 
    list(predictors = list(beta=1,gamma=1), 
     variables = list(substitute(x)), 
     term = function(predlabels,varlabels) { 
     paste(predlabels[1],"*(",varlabels[1],"**",predlabels[2],")") 
     } 
) 
} 
class(mypower) <- "nonlin" 

現在,當我嘗試

fit <- gnm(formula=y ~ mypower(x1), data=df) 

我從模型β和γ的擬合值。但是,當我嘗試

fit <- gnm(formula=y ~ mypower(x1)+mypower(x2), data=df) 

我得到的錯誤

Algorithm failed - no model could be estimated. 

所以,問題1:我怎麼能解決這個問題?

此外,當 - 試圖以匹配所有XS - 我嘗試

fit <- gnm(formula=PedalCycles ~ mypower(.), data=df) 

我得到

Error in eval(expr, envir, enclos) : object '.' not found 

這是指定每個冪所有XS的和正確的方式?

回答

1

估計y = b_0*x_0^g_0你可以使用內置的Exp() GNM的估計

Exp(1 + I(log(x_0))) 

這給您係數:

  1. b'_0截距
  2. g'_0log(x_0)

因此g'_0是你想要的g_0(因爲e^log(x_0)*g'_0 = x_0^g_0)和e^b'_0b_0。您的模型現在是這些術語的總和。

警告:這將工作,如果x_0假定您的數據非正值設置。

相關問題