2016-08-05 39 views
2

下面是一組虛構的概率數據,我將其轉換爲二項式,其中threshold of 0.5。我對離散數據運行了一個glm()模型,以測試從glm()返回的間隔是'平均預測間隔'(「置信區間」)還是'點預測間隔'(「預測間隔」)。從下面的圖看來,返回的區間是後者 - 「點預測區間」;注意,在95%的置信度下,這個樣本中2/20點落在線外。Logistic迴歸的預測和置信區間

如果確實如此,那麼如何使用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 

這裏的情節,推測可能與「點預測的間隔」(即「​​預測區間」)的紅色虛線,且平均配合在固體紅色。黑點表示從初始概率離散二項數據randRatio

enter image description here

+0

我認爲你的前提是不正確的。我認爲你沒有看到你所稱的「點預測間隔」,而大多數人只是簡單地稱之爲「預測間隔」。你所說的「平均預測間隔」(可能)是大多數人稱之爲「置信區間」的東西,並且它們適用於估計參數的合理位置。 –

+0

@ 42-我編輯了一些措辭,以更好地與您的評論保持一致。 –

+0

@ZheyuanLi請參閱修改後的問題。我很想看到你的解決方案,更有甚者,如果有一種方法使用glm()。在lm()上用「confidence」或「prediction」預測()似乎不是glm()的一個選項。請參閱:http://stackoverflow.com/questions/12544090/predict-lm-in-r-how-to-get-nonconstant-prediction-bands-around-fitted-values –

回答

1

我不知道,如果你所要求的直線上升預測區間,但如果你是,你可以簡單地計算。

可以提取模型傳統的置信區間爲這樣:

confint(model) 

,然後一旦你運行的預測,你可以根據預測,像這樣計算的預測區間:

upper = predAll$fit + 1.96 * predAll$se.fit 
lower = predAll$fit - 1.96 * predAll$se.fit 

您只是簡單地進行預測(如果您使用一組預測變量,則在任何給定的點)並加上和減去標準誤差的1.96 *絕對值。 (1.96se包括正態分佈的97.5%,並且代表正態分佈中標準偏差的95%區間)

這與用於傳統置信區間的公式相同,除了使用標準誤差(與標準偏差相對)使得間隔更寬以說明預測本身的不確定性。

更新:

Method for plotting prediction invervals courtesy of Rstudio!

按照要求......雖然不是我做的!

+0

感謝您的方法。我會懇求你用「置信區間」和「預測間隔」以及完整的代碼創建一個情節。 –

+0

爲什麼重新發明輪子...這裏用ggplot2做這個簡潔明智的方法: – sconfluentus

+0

這些也可以和GLM一起使用。 – sconfluentus