線形回帰が単純な決定論的シーケンスの結果を予測できないのはなぜですか?


9

私の同僚が私にこの問題を送って、どうやらインターネット上でラウンドを行っているようです:

If $3 = 18, 4 = 32, 5 = 50, 6 = 72, 7 = 98$, Then, $10 =$ ?

答えは200のようです。

3*6  
4*8  
5*10  
6*12  
7*14  
8*16  
9*18  
10*20=200  

Rで線形回帰を行う場合:

data     <- data.frame(a=c(3,4,5,6,7), b=c(18,32,50,72,98))  
lm1      <- lm(b~a, data=data)  
new.data <- data.frame(a=c(10,20,30))  
predict  <- predict(lm1, newdata=new.data, interval='prediction')  

私は得ます:

  fit      lwr      upr  
1 154 127.5518 180.4482  
2 354 287.0626 420.9374  
3 554 444.2602 663.7398  

したがって、私の線形モデルは予測しています。10=154

データをプロットすると線形に見えますが、明らかに正しくないものを想定しています。

Rで線形モデルを最適に使用する方法を学習しようとしています。このシリーズを分析する適切な方法は何ですか?どこで私は間違えましたか?


7
f(3)=1818=3×632=4×86=3×28=4×218=3×3×232=4×4×2f(x)=2x2

4
f(10)

1
@TrevorAlexanderこの質問が時間の無駄だと思うなら、なぜわざわざそれに答えるのですか?明らかに、興味深い人もいます。
jwg 2014年

回答:


23

lm()暗黙的に当てはまる回帰モデルなどの回帰モデルは、基礎となるデータ生成プロセスが確率論的であると想定しています。モデル化しようとしているルールは決定論的であると想定しています。したがって、実行しようとしていることと実行しようとしている方法との間に不一致があります。

最も単純な関数を決定/確定データに適合させるように明示的に設計された他のソフトウェア(つまりRではない)があります(例はEureqaです)。そのためのRパッケージがあるかもしれません(私は知りません)が、Rは確率的データの統計的モデリングを目的としています。

lm()あなたに与えた答えについては、それは合理的に見え、正しいかもしれません。ただし、この問題が提示されたコンテキストを収集すると、それが決定論的であると理解されるべきであることが強く示唆されます。それが事実ではなく、フィットが妥当かどうか疑問に思っている場合、2つの極端なデータポイントが回帰直線の上にあり、中央のデータがすべてその下にあることに気付くかもしれません。これは、誤って指定された関数形式を示唆しています。これは、残差対適合プロットplot(lm1, which=1)でも確認できます。

ここに画像の説明を入力してください

@AlexWilliamsに適合するモデルについては、はるかに良く見えます。

ここに画像の説明を入力してください


17
+1残差プロットは、見逃せないようにストーリーを伝えます。実際、それはOPの「線形に見える」ことがしばしば誤解を招く理由を示しています-多くの曲線関数は、転換点の近くではないいくつかの点のみを見た場合、「ほぼ直線」に見える可能性があります。直線的だと思われる場合は、その行を取り出して、残っているものを確認してください。
Glen_b-モニカを2014

1
信じられないほど役立つ情報!ありがとう、私は本当に感謝しています
ブレット・フィニー2014年

1
これは、確率的データと確定的データの違いとはまったく関係ありません。線形回帰は、それが線形である場合、確定的データに適合して外挿します。基礎となるモデルが二次式である場合、確率的データの予測がうまくいかないでしょう。
jwg 2014年

3
n(n1)

彼は完璧なフィット感を探しているとは思いません。彼は、外挿された値がこれほど遠い理由を理解しようとしています。
jwg 2014年

22

トレンドは線形ではなく二次です。試してください:

lm1 <- lm(b~I(a^2), data=data)

更新:これがコードです。

data <- data.frame(a=c(3,4,5,6,7),b=c(18,32,50,72,98))
lm1 <- lm(b~I(a^2), data=data)
new.data <- data.frame(a=c(10,20,30))
predict(lm1, newdata = new.data, interval='prediction')

そして出力:

   fit  lwr  upr
1  200  200  200
2  800  800  800
3 1800 1800 1800

この答えは私には少し循環的なようです:問題の核心は二次の振る舞いを認識することです。二次動作を指定すると、線形回帰で係数を見つけることができることを正しく指摘しました。しかし実際には、この回答の最初の行を書き留めた時点ですでに重要な分析を行っていました
whuber

5
@whuber-問題は、線形モデルが失敗する理由です。関数形が線形ではなく、二次式であるため失敗します。私はその答えを単純かつ要領よく伝えたかったのです。Gungの答えは詳細に入るのに優れており、残差プロットを使用してより良いモデルを作成する方法を示しています。(私はちょうどペンと紙でそれをしました。)私は彼の答えがより詳細で完全であることに同意し、私はそれを支持しました。
アレックスウィリアムズ

13

アレックス・ウィリアムスとガンが与えた優れた答えに追加することをためらっていますが、私が考えなければならない点が他にもあります。この質問では、「線形回帰」と「線形モデル」という語句を使用しており、おそらく同じ意味であることを示唆しています。ただし、「線形回帰」の通常の意味は、「線形」が「パラメータ内の線形」を意味する古典線形回帰モデル(CLRM)を指します。これは、独立変数ではなく、パラメーターの条件です。したがって、次のような二次モデル:

Yi=β1+β2Xi2

β1β2

Yi=β1+β2Xi

Xi


1
私はいつもこれを思い出すのに苦労しています。これは、他の回答への素晴らしい追加です。
naught101
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.