11

Rのpredict関数はnewdataパラメーターを受け取ることができ、そのドキュメントは次のようになります。

newdata予測する変数を探すためのオプションのデータフレーム。省略した場合は、近似値が使用されます。

しかし、モデルがどのように適合しているかによっては、それが完全に真実ではないことがわかりました。たとえば、次のコードは期待どおりに機能します。

x <- rnorm(200, sd=10)
y <- x + rnorm(200, sd=1)
data <- data.frame(x, y)
train = sample(1:length(x), size=length(x)/2, replace=F)
dataTrain <- data[train,]
dataTest <- data[-train,]
m <- lm(y ~ x, data=dataTrain)
head(predict(m,type="response"))
head(predict(m,newdata=dataTest,type="response"))

しかし、モデルがそのように適合している場合:

m2 <- lm(dataTrain$y ~ dataTrain$x)
head(predict(m2,type="response"))
head(predict(m2,newdata=dataTest,type="response"))

最後の2行は、まったく同じ結果になります。このpredict関数は、パラメーターを無視する方法で機能しnewdataます。つまり、新しいデータの予測を実際に計算することはできません。

もちろん、犯人はlm(y ~ x, data=dataTrain)lm(dataTrain$y ~ dataTrain$x)です。しかし、これら2つの違いについて言及しているドキュメントは見つかりませんでした。既知の問題ですか?

R2.15.2を使用しています。

4

1 に答える 1

16

?predict.lm以下に引用する注のセクションを参照してください。

Note:

     Variables are first looked for in ‘newdata’ and then searched for
     in the usual way (which will include the environment of the
     formula used in the fit).  A warning will be given if the
     variables found are not of the same length as those in ‘newdata’
     if it was supplied.

「同じ名前」などの観点からの動作は示されていませんが、数式に関する限り、渡された用語は形式foo$varであり、そのような名前の変数はありませんnewdata。 Rがそれらを探すためにトラバースする検索パス。

2番目のケースでは、モデル式の表記を完全に誤用しています。アイデアは、モデルを簡潔かつ象徴的に説明することです。簡潔さとデータオブジェクトの繰り返しは互換性がありません。

注意する動作は、文書化された動作と完全に一致しています簡単に言うと、モデルに用語を当てはめてから、用語data$xdata$yを予測しようとしましxy。Rに関する限り、それらは異なる名前であり、したがって異なるものであり、それらと一致しないことは正しいことでした。

于 2013-02-27T15:20:53.407 に答える