【问题标题】:R How to get confidence interval for multinominal logit?R如何获得多项logit的置信区间?
【发布时间】:2013-11-07 21:48:40
【问题描述】:

让我以多项 logit 上的 UCLA 示例作为运行示例---

library(nnet)
library(foreign)

ml <- read.dta("http://www.ats.ucla.edu/stat/data/hsbdemo.dta")
ml$prog2 <- relevel(ml$prog, ref = "academic")
test <- multinom(prog2 ~ ses + write, data = ml)

dses <- data.frame(ses = c("low", "middle", "high"), write = mean(ml$write))
predict(test, newdata = dses, "probs")

我想知道如何获得 95% 的置信区间?

【问题讨论】:

  • 我指的是预测均值附近的 95% 置信区间。

标签: r logistic-regression multinomial


【解决方案1】:

这可以通过 effects 包来完成,我在 Cross Validated here 上展示了另一个问题。

让我们看看你的例子。

library(nnet)
library(foreign)

ml <- read.dta("http://www.ats.ucla.edu/stat/data/hsbdemo.dta")
ml$prog2 <- relevel(ml$prog, ref = "academic")
test <- multinom(prog2 ~ ses + write, data = ml)

我们不使用来自basepredict(),而是使用来自effectsEffect()

require(effects)

fit.eff <- Effect("ses", test, given.values = c("write" = mean(ml$write)))

data.frame(fit.eff$prob, fit.eff$lower.prob, fit.eff$upper.prob)

  prob.academic prob.general prob.vocation L.prob.academic L.prob.general L.prob.vocation U.prob.academic
1     0.4396845    0.3581917     0.2021238       0.2967292     0.23102295      0.10891758       0.5933996
2     0.4777488    0.2283353     0.2939159       0.3721163     0.15192359      0.20553211       0.5854098
3     0.7009007    0.1784939     0.1206054       0.5576661     0.09543391      0.05495437       0.8132831
  U.prob.general U.prob.vocation
1      0.5090244       0.3442749
2      0.3283014       0.4011175
3      0.3091388       0.2444031

如果我们愿意,我们还可以使用effects 中的设施绘制预测概率及其各自的置信区间。

plot(fit.eff)

【讨论】:

    【解决方案2】:

    只需在模型对象上使用confint 函数即可。

    ci <- confint(test, level=0.95)
    

    注意confint是一个通用函数,为multinom运行一个特定的版本,运行就可以看到

    > methods(confint)
    [1] confint.default   confint.glm*      confint.lm*       confint.multinom*
    [5] confint.nls* 
    

    编辑:

    关于计算预测概率的置信区间的问题,我引用自:https://stat.ethz.ch/pipermail/r-help/2004-April/048917.html

    有没有可能估计置信区间 多项式函数的概率?

    不,因为置信区间(原文如此)适用于单个参数 概率(原文如此)。预测是一个概率分布,所以 不确定性必须是 Kd 空间中的某个区域,而不是区间。 为什么需要关于预测的不确定性陈述(通常称为 公差区间/区域)?在这种情况下,您有一个事件 发生与否,有意义的不确定性是概率 分配。如果你真的需要一个信心区域,你可以 根据拟合参数的不确定性进行模拟,预测和 以某种方式总结得出的经验分布。

    【讨论】:

    • 我需要的不是多项式系数的 CI。相反,我需要 CI 来预测概率--- predict(test, newdata = dses, "probs")。
    • 不明白为什么 Ripley 教授(上面引用的作者)对此大惊小怪。在我看来,如果没有深入思考,他的反对意见将适用于任何“置信区间”(或任何你想称之为的),但这是一种相当标准的做法。我深入研究了nnet:::predict.multinomnnet:::predict.nnetnnet:::vcov.multinom如果您可以构建模型矩阵X,使得预测概率为X %*% coef(model),然后方差(在logit 尺度上为X %*% vcov(model) %*% t(X),然后您将在logit 尺度上构建CI 和反向变换
    • 但是,上述功能不够透明,我认为我可以在短时间内破解它们。如果您可以证明有序响应的合理性,ordinal::predict.clm() 确实允许使用 se.fit 选项。
    猜你喜欢
    • 1970-01-01
    • 2021-06-13
    • 2014-07-14
    • 2014-05-08
    • 2017-01-18
    • 1970-01-01
    • 2023-02-25
    • 2023-03-28
    相关资源
    最近更新 更多