【发布时间】:2020-11-04 19:36:16
【问题描述】:
我正在glmnet 中对计数结果的预测变量进行 lasso 回归建模。
我想知道该模型的预测结果如何。
这是一些玩具数据。这不是很好,因为我不知道如何模拟多变量数据,但我主要对语法是否正确感兴趣。
set.seed(123)
df <- data.frame(count = rpois(500, lambda = 3),
pred1 = rnorm(500),
pred2 = rnorm(500),
pred3 = rnorm(500),
pred4 = rnorm(500),
pred5 = rnorm(500),
pred6 = rnorm(500),
pred7 = rnorm(500),
pred8 = rnorm(500),
pred9 = rnorm(500),
pred10 = rnorm(500))
现在运行模型
x <- model.matrix(count ~ ., df)[,-1]
y <- df$count
cvg <- cv.glmnet(x,y,family = "poisson")
现在当我生成预测结果时
yTest <- predict(cvg, newx = x, family = "poisson", type = "link")
这是输出
# 1 1.094604
# 2 1.094604
# 3 1.094604
# 4 1.094604
# 5 1.094604
# 6 1.094604
# ... ........
现在显然模型预测都是一样的,而且都很糟糕(鉴于预测变量和结果之间没有任何关联,这不足为奇),但我想知道的是为什么它们不是整数(根据我的真实数据,我有同样的问题)。
我有几个问题。
所以我的问题是:
我是否在 glmnet.predict() 函数中指定了正确的参数? 在 predict 函数的帮助中,它指出指定 type = "link" 会为泊松模型提供“线性预测变量”,而指定 type = "response" 会给出泊松模型的“拟合平均值”(在我的愚蠢示例中,它会生成 500 个 2.988 的值)。
预测结果不应该与数据本身的形式相匹配,即整数吗?
如果我在 predict() 函数中指定了正确的参数,我如何使用非整数预测我将它们四舍五入到最接近的整数,还是不理会它们? p>
【问题讨论】:
-
exp(1.094604)大约是3。相信你要指定type = "response"。您正在对链接规模进行预测,标准泊松链接是日志。使用此模型无法预测整数(如果使用二项式 GLM,问题会更加明显)。分布的期望值不必与随机变量的数据类型相匹配。并且(条件)期望值是您从这些模型中得到的。 -
简单示例:公平的硬币翻转(可能值为 0 和 1)。期望值为 0.5。不管你如何建模,你都不应该得到 0 或 1 作为预测。
标签: r poisson glmnet lasso-regression