我正在尝试构建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的总和的正确方法吗?
答案 0 :(得分:1)
要估算y = b_0*x_0^g_0
,您可以使用gnm的内置Exp()
进行估算
Exp( 1 + I( log(x_0) ) )
这给你系数:
b'_0
g'_0
log(x_0)
醇>
因此g'_0
是您所需的g_0
(因为e^log(x_0)*g'_0 = x_0^g_0
)而e^b'_0
是b_0
。您的模型现在是这些术语的总和。
警告:如果x_0
假设您的数据集中存在非正值,则不将会有效。