2012-09-22 86 views
14

所以我目前正在嘗試繪製線性模型的置信區間。我發現我應該使用predict.lm()來做這件事,但是我有一些真正理解函數的問題,並且我不喜歡在不知道發生了什麼事情的情況下使用函數。我發現了幾個關於這個主題的方法,但是隻有使用相應的R代碼才能解釋。 這是函數本身:R中的Predict.lm() - 如何獲得擬合值附近的非恆定預測帶

## S3 method for class 'lm' 
predict(object, newdata, se.fit = FALSE, scale = NULL, df = Inf, 
     interval = c("none", "confidence", "prediction"), 
     level = 0.95, type = c("response", "terms"), 
     terms = NULL, na.action = na.pass, 
     pred.var = res.var/weights, weights = 1, ...) 

現在,我一直很難理解:

1) newdata 
    An optional data frame in which to look for variables 
    with which to predict. If omitted, the fitted values are used. 
  • 似乎每個人都使用newdata這一點,但我不明白爲什麼。爲了計算置信區間,我顯然需要這個區間的數據(如觀察數,x等的平均數),所以不能是它的意思。但是:那是什麼意思?

    2) interval
    Type of interval calculation.

  • 好..但什麼是 「無」 的呢?

    3a) type
    Type of prediction (response or model term).

    3b) terms
    If type="terms", which terms (default is all terms)

  • 3A:我用的是可以得到的置信區間在我的模型一個特定的變量?如果是這樣,那麼3b是什麼?如果我可以在3a中指定這個術語,那麼在3b中再次做這個術語是沒有意義的......所以我想我又錯了,但是我不明白爲什麼。

我想你們中的一些人可能會認爲:爲什麼不試試這個呢?我會(即使這可能不會解決所有問題),但我現在不知道該怎麼做。因爲我現在不知道新數據是什麼,我不知道如何使用它,如果我嘗試,我沒有得到正確的置信區間。不知何故,你如何選擇這些數據是非常重要的,但我只是不明白!

編輯:我想補充一點,我的意圖是瞭解如何predict.lm的作品。我的意思是我不明白它是否按照我認爲的方式工作。那就是它計算y-hat(預測值),並且比間隔的每個upr/lwr界限使用加/減計算幾個數據點(看起來像是一個置信線)?然後,我會明白爲什麼有必要在新數據中具有與線性模型相同的長度。

+0

本文檔的Details部分討論'newdata'參數的長度。討論的哪一部分仍然令人困惑? – joran

+0

我想這是讓我感到困惑的:「predict.lm產生預測值,通過評估幀newdata中的迴歸函數獲得」(在一般解釋中)和「如果newdata被忽略,則預測基於用於適合。」爲newdata。爲什麼我會嘗試獲得在我的實際迴歸中沒有連接的置信區間?這就是我對這句話的理解,所以這就讓我感到困惑。 然後它解釋了在這種情況下如何處理缺失的值,但我已經與第一部分鬥爭了! – lisa

+2

您可能對_prediction_間隔有興趣瞭解新的觀測值。 – joran

回答

21

化妝一些數據:

d <- data.frame(x=c(1,4,5,7), 
       y=c(0.8,4.2,4.7,8)) 

擬合模型:

lm1 <- lm(y~x,data=d) 

置信和預測區間與原始x值:

p_conf1 <- predict(lm1,interval="confidence") 
p_pred1 <- predict(lm1,interval="prediction") 

CONF。和pred。用新的x值的時間間隔(外推法和更精細/均勻比原始數據間隔):

nd <- data.frame(x=seq(0,8,length=51)) 
p_conf2 <- predict(lm1,interval="confidence",newdata=nd) 
p_pred2 <- predict(lm1,interval="prediction",newdata=nd) 

繪製一切融合在一起:

par(las=1,bty="l") ## cosmetics 
plot(y~x,data=d,ylim=c(-5,12),xlim=c(0,8)) ## data 
abline(lm1) ## fit 
matlines(d$x,p_conf1[,c("lwr","upr")],col=2,lty=1,type="b",pch="+") 
matlines(d$x,p_pred1[,c("lwr","upr")],col=2,lty=2,type="b",pch=1) 
matlines(nd$x,p_conf2[,c("lwr","upr")],col=4,lty=1,type="b",pch="+") 
matlines(nd$x,p_pred2[,c("lwr","upr")],col=4,lty=2,type="b",pch=1) 

enter image description here

使用新的數據允許超出了原來的外推數據;另外,如果原始數據稀疏或不均勻間隔,預測間隔(不是直線)可能不能很好地通過原始x值之間的線性插值來近似...

我不太確定你意思是「我模型中的一個特定變量的置信區間」;如果您需要參數的置信區間,那麼您應該使用confint。如果您只想根據某些參數變化(忽略其他參數引起的不確定性)對變化進行預測,那麼您確實需要使用type="terms"

interval="none"(默認值)只是告訴R不要打擾計算任何置信度或預測間隔,並只返回預測值。

+0

也許有人試圖用幾句話來解釋預測和置信區間之間的區別?這就是我理解它的原因:CI給出了一個關於95%的時間裏人口平均值可能下降的線索。另一方面,PI不是關於平均值,而是關於未來值,這是您的數據中尚未包含的y值。這是正確的嗎? – lisa

+2

我可以建議你谷歌「預測間隔」「置信區間」'...?答案就在那裏......如果你沒有得到你需要的東西,那麼你應該問一下http://stats.stackexchange.com,因爲我們已經超越了編程領域......另外:http ://stackoverflow.com/questions/9406139/r-programming-predict-prediction-vs-confidence –

+0

是的,我讀過,謝謝你 – lisa