如何在glmnet中为套索/岭/弹性网回归指定链接函数?
我找到了下面的帖子,但不确定这对我需要指定一个cloglog链接有帮助。How to specify log link in glmnet?
我有一个具有二元响应0/1 (疾病no/yes)和几个预测变量的调查数据集,这些变量大多是二元分类(是/否,男性/女性),一些是计数(羊群大小),还有一些是具有多个水平的分类变量。
我之前使用二项式家庭的glmer()函数和link = cloglog运行了一个广义线性混合模型,因为这样做创建了我想要的结果截距的精确解释(在疾病研究中,来自此设置的截距等于在随机效应(在我的例子中是地理单位(村庄或子村或家庭))中指定的变量中的平均值“感染力”-易感人群被感染的速率。
由于现在有几个调查变量可供我使用,我想尝试使用glmnet进行套索和岭回归。我的理解是,最好是将glmm公式放入glmnet中。但是,我找不到任何有关如何添加链接的文档。我这样做了,在我认为可以工作的语法中,它确实运行了。但它也会在link函数中输入无用信息。
下面是一个可重复使用的示例:
library(msm)
library(glmnet)
set.seed(1)
N = 1000
X = cbind( rbinom(n=N,size=1,prob=0.5), rnorm(n=N) )
beta = c(-0.1,0.1)
phi.true = exp( X%*%beta )
p = 1 - exp(-phi.true)
y = rbinom(n=N,size=1,prob = p)
dat <- data.frame(x=X,y=y)
x <- model.matrix(y~., dat)
glmnet(x, y, family="binomial", link="logit", alpha = 1, lambda = 2)无论我输入'logit','cloglog‘,甚至是一个名字'adam’,我都会得到相同的输出。并且不能使用与GLMM相同的语法,因为在glmnet中必须是字符向量。
输出:
> glmnet(x, y, family="binomial"(link="logit"), alpha = 1, lambda = 2)
Error in match.arg(family) : 'arg' must be NULL or a character vector
> glmnet(x, y, family="binomial", link="logit", alpha = 1, lambda = 2)
Call: glmnet(x = x, y = y, family = "binomial", alpha = 1, lambda = 2, link = "logit")
Df %Dev Lambda
1 0 -7.12e-15 2
> glmnet(x, y, family="binomial", link="cloglog", alpha = 1, lambda = 2)
Call: glmnet(x = x, y = y, family = "binomial", alpha = 1, lambda = 2, link = "cloglog")
Df %Dev Lambda
1 0 -7.12e-15 2
> glmnet(x, y, family="binomial", link="adam", alpha = 1, lambda = 2)
Call: glmnet(x = x, y = y, family = "binomial", alpha = 1, lambda = 2, link = "adam")
Df %Dev Lambda
1 0 -7.12e-15 2在glmnet中不能更改二项式家族的默认链接函数吗?
发布于 2020-08-08 03:12:18
我想你应该使用family = binomial(link = "cloglog")
查看新的glmnet:https://cran.r-project.org/web/packages/glmnet/vignettes/glmnetFamily.pdf
https://stackoverflow.com/questions/61044966
复制相似问题