glmnet。用套索或山脊拟合一个GLMM,并添加二项式cloglog连接。

问题描述 投票:1回答:1

如何在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中不能改变二项式家族的默认链接函数吗?

hyperlink glmnet
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.