4

次数2(直交)の多項式を使用して線形回帰モデルを近似し、応答を予測するとします。これが最初のモデル(m1)のコードです

x=1:100
y=-2+3*x-5*x^2+rnorm(100)
m1=lm(y~poly(x,2))
prd.1=predict(m1,newdata=data.frame(x=105:110))

同じモデルを試してみましょうが、$ poly(x、2)$を使用する代わりに、次のような列を使用します。

m2=lm(y~poly(x,2)[,1]+poly(x,2)[,2])
prd.2=predict(m2,newdata=data.frame(x=105:110))

m1とm2の要約を見てみましょう。

> summary(m1)

Call:
lm(formula = y ~ poly(x, 2))

Residuals:
     Min       1Q   Median       3Q      Max 
-2.50347 -0.48752 -0.07085  0.53624  2.96516 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept) -1.677e+04  9.912e-02 -169168   <2e-16 ***
poly(x, 2)1 -1.449e+05  9.912e-01 -146195   <2e-16 ***
poly(x, 2)2 -3.726e+04  9.912e-01  -37588   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Residual standard error: 0.9912 on 97 degrees of freedom
Multiple R-squared:     1,      Adjusted R-squared:     1 
F-statistic: 1.139e+10 on 2 and 97 DF,  p-value: < 2.2e-16 

> summary(m2)

Call:
lm(formula = y ~ poly(x, 2)[, 1] + poly(x, 2)[, 2])

Residuals:
     Min       1Q   Median       3Q      Max 
-2.50347 -0.48752 -0.07085  0.53624  2.96516 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)    
(Intercept)     -1.677e+04  9.912e-02 -169168   <2e-16 ***
poly(x, 2)[, 1] -1.449e+05  9.912e-01 -146195   <2e-16 ***
poly(x, 2)[, 2] -3.726e+04  9.912e-01  -37588   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Residual standard error: 0.9912 on 97 degrees of freedom
Multiple R-squared:     1,      Adjusted R-squared:     1 
F-statistic: 1.139e+10 on 2 and 97 DF,  p-value: < 2.2e-16 

したがって、m1とm2は基本的に同じです。次に、予測prd.1とprd.2を見てみましょう。

> prd.1
        1         2         3         4         5         6 
-54811.60 -55863.58 -56925.56 -57997.54 -59079.52 -60171.50 

> prd.2
         1          2          3          4          5          6 
  49505.92   39256.72   16812.28  -17827.42  -64662.35 -123692.53 

Q1:prd.2がprd.1と大きく異なるのはなぜですか?

Q2:モデルm2を使用してprd.1を取得するにはどうすればよいですか?

4

1 に答える 1

8

m1これを行う正しい方法です。m2痛みの全世界に入っています...

から予測を行うm2には、モデルが基底関数の直交セットに適合していることを知る必要があります。これにより、外挿された新しいデータ値に同じ基底関数が使用されます。比較:with-poly(1:10,2)[,2]最初poly(1:12,2)[,2]の10個の値は同じではありません。モデルを明示的に適合させると、poly(x,2)それpredictをすべて理解し、正しいことを行います。

あなたがしなければならないことは、最初にモデルを作成するために使用されたのと同じ基底関数のセットを使用して、予測された位置が変換されることを確認することです。これに使用できますpredict.poly(説明変数x1と呼んx2でいるので、名前を簡単に一致させることができます)。

px = poly(x,2)
x1 = px[,1]
x2 = px[,2]

m3 = lm(y~x1+x2)

newx = 90:110
pnew = predict(px,newx) # px is the previous poly object, so this calls predict.poly

prd.3 = predict(m3, newdata=data.frame(x1=pnew[,1],x2=pnew[,2]))
于 2012-12-15T23:08:49.770 に答える