R中未知的非线性项

时间:2012-12-19 02:15:43

标签: r regression gnm

我使用glm进行逻辑回归,我想添加一个表格

C <子> 1 第(k + AC <子> 2 )/(T + C <子> 2

其中k和t是数据帧中的列,a是常量。我希望R找到c 1 和c 2 的最佳拟合值。这可能吗?

如果我只想要一个固定值,比如c 2 = 2,

C <子> 1 (K + 2A)/(T + 2)

我可以写

glm( model$y ~ I((model$k + 2*a)/(model$t + 2)) + model$otherterms,
  family = binomial(logit) )

这与我现在正在做的相似。但我不认为2是最优的并且“手动”迭代是非常耗时的。

1 个答案:

答案 0 :(得分:3)

您可以使用 gnm 包中的函数gnm。

gnm(y~Mult(1, # c1
           offset(k)+1,# c3=a*c2 
           Inv(offset(t)+1)) # c2
           +other terms, 
    family=binomial, 
    data=models)

EDIT(约束系数的解)

term_fun <- function(predLabels, varLabels){
                     paste0(predLabels[1],"*(",varLabels[1],
                            "+",predLabels[2],"*3)/(", # a=3 for example
                            varLabels[2],"+", predLabels[3],")")}

  Ratio <- function(t,x){
   list(predictors = list(C1 = 1, C2 = 1),
        variables = list(substitute(t), substitute(x)),
        term = term_fun)
  }
  class(Ratio) <- "nonlin"

  fit <- gnm(Y~Ratio(k,t), data=models, family=binomial)