【问题标题】:Custom nonlinear function in `R.gnm``R.gnm` 中的自定义非线性函数
【发布时间】:2016-03-18 15:09:05
【问题描述】:

我正在尝试建立一个非线性模型,如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

这是指定所有 x 的总和的正确方法吗?

【问题讨论】:

    标签: r regression non-linear-regression


    【解决方案1】:

    要估计y = b_0*x_0^g_0,你可以使用gnm内置的Exp()来估计

    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 在您的数据集中假定非正值,这将不起作用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-23
      • 2020-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-30
      • 1970-01-01
      • 2012-03-14
      相关资源
      最近更新 更多