web-dev-qa-db-ja.com

RのPredict.lm()-フィットされた値の周囲の非定数予測バンドを取得する方法

したがって、私は現在、線形モデルの信頼区間を描画しようとしています。これにはpredict.lm()を使用する必要があることがわかりましたが、実際に関数を理解するのにいくつかの問題があり、何が起こっているのかを知らずに関数を使用したくありません。私はこの問題についていくつかのハウツーを見つけましたが、対応するRコードのみで、実際の説明はありません。これは関数自体です:

## 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でそれを再度行うことは意味がありません。ですから、私は再び間違っていると思いますが、理由を理解することはできません。

何人かはそう思うかもしれません:なぜこれを試してみませんか?そして、私は(ここですべてを解決しないかもしれないとしても)しますが、私は今のところ方法を知りません。現在、newdataの目的がわからないので、それを使用する方法がわかりません。試しても、正しい信頼区間が得られません。どういうわけか、そのデータをどのように選択するかが非常に重要ですが、私にはわかりません!

編集:私の意図は、predict.lmがどのように機能するかを理解することです。つまり、私が思ったとおりに機能するかどうかはわかりません。つまり、Yハット(予測値)を計算し、間隔の上限/下限のそれぞれに対して加算/減算を使用して、いくつかのデータポイントを計算します(その場合、信頼線のように見えます)??次に、なぜ線形モデルの場合と同じ長さをnewdataに含める必要があるのか​​を理解します。

14
lisa

いくつかのデータを構成します。

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")

会議と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に信頼区間や予測区間の計算に煩わされず、予測値のみを返すように指示するだけです。

21
Ben Bolker