如何在glmnet中指定lasso ridge弹性网回归的链接函数?我找到了下面的帖子,但不知道当我需要指定cloglog链接时,这对我有什么帮助。如何在glmnet中指定log链接?
我有一个调查数据集,其中有二进制的应答01(疾病noyes)和几个预测变量,这些变量大多是二进制的分类变量(yesno,malefemale),有些是计数变量(畜群规模),还有几个是有几个级别的分类变量。
我之前使用glmer()函数运行了一个广义线性混合模型,使用二项式家族和link = cloglog,因为这样做可以创建我想要的结果截距的精确解释(在疾病研究中,这种设置的截距相当于在随机效应(在我的案例中,地理单位(村或分村或家庭)中指定的变异中的平均值 "感染力"--易感者的感染率)。
由于我现在有几个调查变量,我想尝试使用glmnet进行套索和脊回归。我的理解是,我应该最好把glmm公式放入glmnet中。 但是,我找不到任何关于如何添加链接的文档。我这样做了,用我认为可行的语法,它确实运行了。 但它也是在链接函数中输入了废话的情况下运行的。
下面是一个可复制的例子。
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中必须是一个字符向量。
OUTPUT:
> 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中不能改变二项式家族的默认链接函数吗?