让我使用多项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%的置信区间?
答案 0 :(得分:3)
只需在模型对象上使用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
是否有可能估计信任间隔 具有多项功能的概率?
不,因为置信区间(sic)不适用于单个参数 概率(原文如此)。预测是概率分布,所以 不确定性必须是Kd空间中的某个区域,而不是区间。 为什么你想要关于预测的不确定性陈述(通常称为 公差间隔/区域)?在这种情况下,你有一个事件 是否发生,有意义的不确定性是概率 分配。如果你真的需要一个自信区域,你可以 模拟拟合参数的不确定性,预测和 总结了由此产生的经验分布。
答案 1 :(得分:3)
这可以使用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)
我们使用predict()
base
,而非使用Effect()
中的effects
。
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)