R如何获得多项logit的置信区间?

use*_*726 6 r multinomial logistic-regression

让我用多项式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")
Run Code Online (Sandbox Code Playgroud)

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

Joh*_*son 6

这可以通过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)
Run Code Online (Sandbox Code Playgroud)

我们不使用predict()from base,而是使用Effect()fromeffects

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
Run Code Online (Sandbox Code Playgroud)

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

plot(fit.eff)
Run Code Online (Sandbox Code Playgroud)

伊格


nic*_*ico 4

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

ci <- confint(test, level=0.95)
Run Code Online (Sandbox Code Playgroud)

请注意,这confint是一个通用函数,并且为 运行特定版本multinom,正如您可以通过运行看到的

> methods(confint)
[1] confint.default   confint.glm*      confint.lm*       confint.multinom*
[5] confint.nls* 
Run Code Online (Sandbox Code Playgroud)

编辑:

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

是否有可能用多项函数估计概率的置信区间?

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

  • 不明白为什么里普利教授(上面引用的作者)对此大惊小怪。在我看来,如果没有“太”深入地思考,他的反对意见将适用于任何“置信区间”(或任何你想称之为的东西),但这是一个相当标准的做法。我深入研究了“nnet:::predict.multinom”、“nnet:::predict.nnet”和“nnet:::vcov.multinom”。*如果*您可以构造模型矩阵“X”,使得预测概率为“X %*% coef(model)”,则方差(在 logit 尺度上为“X %*% vcov(model) %*% t”) (X)`,然后您将在 logit 尺度上构造 CI 并进行反向变换 (5认同)