我有一个逻辑回归使用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) )
Run Code Online (Sandbox Code Playgroud)
这与我现在正在做的相似.但我不认为2是最优的并且"手动"迭代非常耗时.
您可以使用包gnm中的函数 gnm 。
gnm(y~Mult(1, # c1
offset(k)+1,# c3=a*c2
Inv(offset(t)+1)) # c2
+other terms,
family=binomial,
data=models)
Run Code Online (Sandbox Code Playgroud)
编辑(约束系数的解决方案)
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)
Run Code Online (Sandbox Code Playgroud)