【问题标题】:Nonlinear term with unknown in RR中未知的非线性项
【发布时间】:2012-12-19 02:15:43
【问题描述】:

我有一个使用 glm 的逻辑回归,我想添加一个形式的术语

c1(k+ac2)/(t+c2)

其中 k 和 t 是数据框中的列,a 是常数。我希望 R 找到 c1 和 c2 的最佳拟合值。这可能吗?

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

c1(k+2a)/(t+2)

我可以写

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

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

【问题讨论】:

  • 看函数nls
  • @mnel:我如何告诉它两个参数相等?

标签: r regression gnm


【解决方案1】:

您可以使用包 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)

【讨论】:

  • 对于给定的 a 值,如何约束 c3 = a*c2?例如,假设 a = 0.4。
  • 也就是说第二个和第三个常量不是独立的,需要相互固定倍数;我怎样才能做到这一点?
  • 我已经为受约束的 c3=a*c2 添加了解决方案。
  • 这很棒而且很复杂。谢谢,我想我永远不会想到这个。
猜你喜欢
  • 2019-04-30
  • 2021-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-25
  • 2015-01-02
  • 2011-10-14
  • 1970-01-01
相关资源
最近更新 更多