Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R Logistic回归的预测和置信区间_R_Statistics_Intervals_Prediction_Glm - Fatal编程技术网

R Logistic回归的预测和置信区间

R Logistic回归的预测和置信区间,r,statistics,intervals,prediction,glm,R,Statistics,Intervals,Prediction,Glm,下面是一组虚构的概率数据,我将其转换为阈值为0.5的二项式。我在离散数据上运行了一个glm()模型,以测试从glm()返回的区间是“平均预测区间”(“置信区间”)还是“点预测区间”(“预测区间”)。从下图可以看出,返回的间隔是后者——“点预测间隔”;注意,在95%的置信度下,本样本中有2/20点落在测线之外 如果确实是这样,我如何使用glm()为0和1绑定的二项式数据集生成R中的“平均预测区间”(即“置信区间”)?请用拟合线显示与我类似的代码和绘图,给定概率、“置信区间”和“预测区间” # Fi

下面是一组虚构的概率数据,我将其转换为阈值为0.5的二项式。我在离散数据上运行了一个
glm()
模型,以测试从glm()返回的区间是“平均预测区间”(“置信区间”)还是“点预测区间”(“预测区间”)。从下图可以看出,返回的间隔是后者——“点预测间隔”;注意,在95%的置信度下,本样本中有2/20点落在测线之外

如果确实是这样,我如何使用glm()为0和1绑定的二项式数据集生成R中的“平均预测区间”(即“置信区间”)?请用拟合线显示与我类似的代码和绘图,给定概率、“置信区间”和“预测区间”

# Fictitious data
xVal <- c(15,15,17,18,32,33,41,42,47,50,
         53,55,62,63,64,65,66,68,70,79,
         94,94,94,95,98)
randRatio <- c(.01,.03,.05,.04,.01,.2,.1,.08,.88,.2,
               .2,.99,.49,.88,.2,.88,.66,.87,.66,.90,
               .98,.88,.95,.95,.95)
# Converted to binomial
randBinom <- ifelse(randRatio < .5, 0, 1)

# Data frame for model
binomData <- data.frame(
  randBinom = randBinom,
  xVal = xVal
)

# Model
mode1 <- glm(randBinom~ xVal, data = binomData, family = binomial(link = "logit"))

# Predict all points in xVal range
frame <- data.frame(xVal=(0:100))
predAll <- predict(mode1, newdata = frame,type = "link", se.fit=TRUE)

# Params for intervals and plot
confidence <- .95
score <- qnorm((confidence / 2) + .5)
frame <- data.frame(xVal=(0:100))

#Plot
with(binomData, plot(xVal, randBinom, type="n", ylim=c(0, 1), 
                 ylab = "Probability", xlab="xVal"))
lines(frame$xVal, plogis(predAll$fit), col = "red", lty = 1)
lines(frame$xVal, plogis(predAll$fit + score * predAll$se.fit), col = "red", lty = 3)
lines(frame$xVal, plogis(predAll$fit - score * predAll$se.fit), col = "red", lty = 3)
points(xVal, randRatio, col = "red") # Original probabilities
points(xVal, randBinom, col = "black", lwd = 3) # Binomial Points used in glm
#虚拟数据

xVal我不确定您是否要求直接预测时间间隔,但如果是,您可以简单地计算它

您可以提取模型的传统置信区间,如下所示:

confint(model)
然后,一旦运行了预测,就可以根据预测计算预测间隔,如下所示:

upper = predAll$fit + 1.96 * predAll$se.fit
lower = predAll$fit - 1.96 * predAll$se.fit
您只需进行预测(在任何给定点,如果使用一组预测变量),然后加上和减去标准误差的1.96*绝对值。(1.96 se包括97.5%的正态分布,代表95%的区间,正如它代表正态分布中的标准偏差)

这与传统置信区间使用的公式相同,只是使用标准误差(与标准偏差相反)会使区间更宽,以说明预测本身的不确定性

更新:


按要求…虽然不是我做的

我认为你的前提是错误的。我认为你们并没有看到你们所说的“点预测区间”和大多数人所说的“预测区间”。您所称的“平均预测区间”可能是大多数人所称的“置信区间”,这些区间适用于估计参数的合理位置。@42-我编辑了一些措辞,以便更好地与您的评论保持一致。@ZheyuanLi请查看修改后的问题。我很想看看您的解决方案,如果有一种使用glm()的方法的话,更是如此。在lm()上使用predict()和“confidence”或“prediction”似乎不是glm()的选项。请参阅:使用type=
link
可获得置信区间(在logit量表上)。你在概率尺度上呈现它们,但它们仍然不是预测区间。仔细想想。在二项式情况下,“Y”值的“预测”需要为1或0。
predict.glm
值都不是这些数字中的任何一个。感谢您的方法。我恳请您创建一个包含“置信区间”和“预测区间”以及完整代码的绘图。为什么要重新发明轮子…这里有一个简单而聪明的方法,可以使用ggplot2实现这一点:这些方法也可以用于GLM。谢谢;链接已断开,但已找到。我不相信线性回归中使用的SE和STDEV计算可以用逻辑回归中相同的方法应用。挑战依然存在。:)我会试试。。。或者如果有人,包括你自己,想在这里发布答案;我会投他们一票。