【问题标题】:Why are the predictions from poisson lasso regression model in glmnet not integers?为什么 glmnet 中泊松套索回归模型的预测不是整数?
【发布时间】: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


【解决方案1】:

预测结果不应该与数据本身的形式相匹配吗? 即是整数?

当您使用回归模型时,您将由参数(在泊松情况下,lambda 参数,代表平均值)索引的(条件)概率分布与每个预测变量配置相关联。响应的预测会最小化一些以预测值为条件的预期损失函数,因此它取决于您使用的损失函数。

如果你考虑 0-1 损失,那么是的,预测值应该是一个整数:分布的模式,它的最可能值,在 Possion 分布的情况下,它是 lambda 的下限,如果它不是整数 (https://en.wikipedia.org/wiki/Poisson_distribution)。

如果您考虑平方损失(y - y_prediction)^2,那么您的预测就是条件期望(参见https://en.wikipedia.org/wiki/Minimum_mean_square_error#Properties),它不一定是整数,就像您得到的结果一样。

glmnet 使用平方损失,但您可以通过将floor() 函数应用于glmnet 输出的预测值来轻松预测整数值(使0-1 损失最小化的值)。

【讨论】:

    猜你喜欢
    • 2017-04-20
    • 2018-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-29
    • 2021-12-22
    • 1970-01-01
    相关资源
    最近更新 更多