`R.gnm`中的自定义非线性函数

时间:2016-03-18 15:09:06

标签: r regression non-linear-regression

我正在尝试构建the manual for gmn in R中描述的非线性模型。所需的模型形式是

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)

我从模型中得到了拟合的beta和gamma值。但是当我尝试

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加到幂的所有x的总和的正确方法吗?

1 个答案:

答案 0 :(得分:1)

要估算y = b_0*x_0^g_0,您可以使用gnm的内置Exp()进行估算

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

这给你系数:

    拦截
  1. b'_0
  2. {li> g'_0 log(x_0)

    因此g'_0是您所需的g_0(因为e^log(x_0)*g'_0 = x_0^g_0)而e^b'_0b_0。您的模型现在是这些术语的总和。

    警告:如果x_0假设您的数据集中存在非正值,则将会有效。