我试图按照这个例子 在R中修改glm...用户指定的链接函数 进行操作,但是出现了错误。我有二进制数据,并希望将链接函数从“logit”更改为负指数链接。我想预测成功的概率(p) = 1-exp(线性预测器)。
我需要这个链接的原因是在0和0.5之间,p以凸形增加,但“logit”,“cloglog”,“probit”和“cauchy”只允许凹形。请参考附图:预测的p vs 分段观测 模拟数据
创建自定义链接函数。注意:eta = 线性预测器,mu = 概率。
将种苗大小视为模型成功的函数
我需要这个链接的原因是在0和0.5之间,p以凸形增加,但“logit”,“cloglog”,“probit”和“cauchy”只允许凹形。请参考附图:预测的p vs 分段观测 模拟数据
location<-as.character(LETTERS[rep(seq(from=1,to=23),30)])
success<-rbinom(n=690, size=1, prob=0.15)
df<-data.frame(location,success)
df$random_var<-rnorm(690,5,3)
df$seedling_size<-abs((0.1+df$success)^(1/df$random_var))
df<-df[order(df$location)]
创建自定义链接函数。注意:eta = 线性预测器,mu = 概率。
negex<-function(){
##link
linkfun<-function(mu) log(-mu+1)
linkinv<-function(eta) 1-exp(eta)
## derivative of inverse link with respect to eta
mu.eta<-function(eta)-exp(eta)
valideta<-function(eta) TRUE
link<-"log(-mu+1)"
structure(list(linkfun=linkfun,linkinv=linkinv,
mu.eta=mu.eta,valideta=valideta,
name=link),
class="link-glm")
}
将种苗大小视为模型成功的函数
negexp<-negex()
model1<-glm(success~seedling_size,family=binomial(link=negexp),data=df)
错误:未找到有效的系数集合,请提供起始值
使用glmer模型(我的最终目标)
model2<-glmer(success~seedling_size+ (1|location),family=binomial(link=negexp),data=df)
错误信息:(function (fr, X, reTrms, family, nAGQ = 1L, verbose = 0L, maxit = 100L, maxstephalfit) PIRLS step-halvings failed to reduce deviance in pwrssUpdate
我收到不同的错误信息,但我认为无论是使用glmer还是glm,问题都是相同的,那就是我的链接函数出了问题。