生または直交多項式回帰?


22

変数をに回帰させたい。生の多項式または直交多項式を使用してこれを行う必要がありますか?私はこれらを扱っているサイトで質問を見ましたが、私はそれらを使用することの違いが何であるかを本当に理解していません。 x x 2x 5yx,x2,,x5

なぜだけ係数を取得するために「正常な」回帰を行うことはできませんの、Yが= Σ 5 iは= 0 β I X Iをβiy=i=05βixi(p値及び全ての他の素敵なものと一緒に)、代わりに生の多項式を使用するか直交多項式を使用するかを心配する必要がありますか?この選択は、私がやりたいことの範囲外にあるように思えます。

私が現在読んでいる統計書(TibshiraniらによるISLR)では、これらのことは言及されていませんでした。実際、彼らはある意味で軽視されていました。
その理由は、lm()R の関数で、y ~ poly(x, 2)直交多項式の使用にy ~ x + I(x^2)量を使用し、生の多項式の使用に量を使用することです。しかし116ページで著者は最初のオプションを使用すると言っています。後者は「面倒」であり、これらのコマンドが実際に完全に異なるものに影響を与える(そして結果として異なる出力を持つ)ことを示しません。
(3番目の質問)ISLRの著者は、なぜ読者をそのように混乱させるのでしょうか?


1
@Sycorax私はそれpolyが直交多項式と関係があり、I(x ^ 2)はそうではないことを知っています(詳細はわかりませんが)-それでも、ISLRの作者はなぜ機能しない方法を推奨するのでしょうか? ?両方のコマンドが同じように見える場合、それは非常に誤解を招くように見えますが、実際には1つだけが大丈夫です。
l7ll7

1
@gung私はpolyこの問題のドキュメントを見て、すでにしばらく過ごしましたが、なぜpoly(x、2)とx + I(x ^ 2)が違いを生むのかわかりませんか?質問がトピック外である場合、コメントで私をここで啓発してもらえますか?
l7ll7

1
@gung質問を完全に再編集しました。この未加工/直交の選択は、私をさらに混乱させます-以前は、これはほんの小さなR技術であり、私は理解していなかったと思っていましたが、今では統計的問題が本格的で、回帰すべきではないコーディングを行うのを妨げているようですコーディングが難しい。
l7ll7

2
@gungそれは実際、助けた以上に私を混乱させました。以前は、正しい方法のように思えたので、直交多項式を使用する必要があると考えましたが、その答えには生の多項式が使用されます。驚くべきことに、ネット上の誰もが「RTFM」と叫んでいますが、実際に何を使うべきかという明確な答えはありません。(あなたのリンクもこれに答えを与えない、単なる例、orth。pol。が間違ったとき)
-l7ll7

2
応答が五次多項式になるという物理領域または工学領域で作業している場合を除き、ほぼ確実に正しいアプローチは、最初に多項式回帰を実行しないことです。スプラインまたは多項式近似よりもはるかに柔軟で安定したものに自由度を投資します。
whuber

回答:


10

答えは数値の安定性に関するものではなく(それが役割を果たします)、相関の低減に関するものだと思います。

本質的に-問題は、高次多項式の束に対して回帰すると、回帰する共変量が高度に相関するという事実に要約されます。以下のコード例:

x = rnorm(1000)
raw.poly = poly(x,6,raw=T)
orthogonal.poly = poly(x,6)
cor(raw.poly)
cor(orthogonal.poly)

これは非常に重要です。共変量がより相関するようになると、どれが重要であるか(およびその効果の大きさ)を判断する能力が急速に低下します。これは通常、多重共線性の問題と呼ばれます。限界で、完全に相関する2つの変数がある場合、それらを何かに対して回帰すると、2つを区別することはできません-これを問題の極端なバージョンと考えることができますが、この問題は相関度も低くなります。したがって、本当の意味で-数値の不安定性が問題でなかったとしても-高次の多項式からの相関は、推論ルーチンに多大な損害を与えます。これは、他の方法では見られないほど大きな標準エラー(したがって小さなt-stats)として現れます(以下の回帰例を参照)。

y = x*2 + 5*x**3 - 3*x**2 + rnorm(1000)
raw.mod = lm(y~poly(x,6,raw=T))
orthogonal.mod = lm(y~poly(x,6))
summary(raw.mod)
summary(orthogonal.mod)

このコードを実行すると、係数がすべて変化するため、比較が難しくなるため、解釈は難しくなります。ただし、T-statsを見ると、係数を決定する能力は、直交多項式を使用すると非常に大きくなることがわかります。関連する3つの係数について、直交モデルでは(560,21,449)のt統計量が得られ、生の多項式モデルでは(28、-38,121)だけが得られました。これは、重要な少数の比較的低次の多項式項のみを含む単純なモデルの大きな違いです。

これは、費用がかからないということではありません。心に留めておくべき2つの主要なコストがあります。1)直交多項式ではある程度の解釈可能性が失われます。上の係数のx**3意味を理解するかもしれませんが、x**3-3x(3番目のエルミートポリ-必ずしも使用するものではない)の係数を解釈するのははるかに困難です。第二に、これらが直交であると言うとき、それらは距離の測度に関して直交することを意味します。状況に関連する距離の尺度を選択するのは難しい場合があります。しかし、そうは言っても、poly関数は共分散に関して直交するように選択するように設計されていると思います-これは線形回帰に役立ちます。


3
-1。低次の係数で見られる大きな標準誤差は、ニシンです。2つのモデルの低次の係数はまったく異なるものを推定しているため、それらの標準誤差を比較しても意味がありません。両方のモデルで同じものを推定するのは最高次の係数のみであり、多項式が直交しているかどうかに関係なく、t統計量は同じであることがわかります。あなたの2つのモデルが彼らは係数の解釈に主に異なる、等R ^ 2、近似値の点で統計的に同等である
ジェイクWestfallの

@JakeWestfall、私はあなたに同意するとは思わない。まず、コードを実行すると、すべてではなくすべての多項式の次数で異なる値が生成されます。つまり、本質的には多項式を取得し、PCAを実行します。第二に、そしてより重要なことは、t-statsが実質的に異なることです-私の答えでコードを実行すると、それを確認します-機能的に多重共線性の問題を解決しています。当てはまる値、R ^ 2、F検定などは変わらないことは正しいです。それが実際に直交化する理由です- 多項式項を検出する能力以外は何も変わりません。
user5957401

1
再:最初のポイント、申し訳ありませんが、私はその係数ではなく、最高次項のt統計を参照するつもりでした。その予測変数はモデル間でスケーリングされ、シフトされます。そのため、coefは変わりますが、t
Jake Westfall

再:2番目のポイント、低次項の「t統計量が実質的に異なる」理由は、2つのモデルでまったく異なるものを推定しているためです。線形効果を考慮してくださいraw.mod。x= 0での曲線の勾配をorthogonal.mod推定し、限界勾配を推定します(つまり、lm(y ~ poly(x,1))高次の項が省略されている場合と同じです)。これらの完全に異なる推定量の推定値に標準誤差が匹敵する理由はありません。一つは、簡単に反例構築することができるraw.mod非常に高いT-統計有する
ジェイクWestfallの

@JakeWestfall。私はまだ多重共線性が欠けていると思います。しかし、私たちはお互いに過去を話し合っているようで、おそらく解決策があります。あなたは簡単に反例を構築できると言っています、してください。あなたが念頭に置いているdgpを見ると、私にとって多くのことが明らかになると思います。今のところ、あなたが説明するように振る舞うかもしれないものは、モデルの仕様の重大な誤りを含むものです。
user5957401

8

係数を取得するために「通常の」回帰を実行できないのはなぜですか?

数値的に安定していないためです。コンピューターは固定数のビットを使用して浮動小数点数を表していることに注意してください。チェックIEEE754の詳細については、あなたも、単純な数に驚いて、コンピュータの必要性としてそれを格納する。ここで他の番号を試すことができます0.40000000596046447753906250.40.4000000059604644775390625

生の多項式を使用すると、膨大な数になるため問題が発生します。ここに小さな証拠があります。マトリックス条件数を生の多項式と直交多項式と比較しています。

> kappa(model.matrix(mpg~poly(wt,10),mtcars))
[1] 5.575962
> kappa(model.matrix(mpg~poly(wt,10, raw = T),mtcars))
[1] 2.119183e+13

例については、こちらの回答もご覧ください。

高次多項式に大きな係数があるのはなぜですか


6
単精度の浮動小数点数を使用し、それらを4倍精度で引用しているようです!どうしてこうなりました?GPUを除き、ほとんどすべての統計計算で少なくとも倍精度が使用されます。たとえば、Rの出力はprint(0.4, digits=20)です0.40000000000000002
whuber

6

これらの答えのいくつかは、ポイントを完全に見逃しているように感じます。Haitaoの答えは、生の多項式を当てはめることによる計算上の問題に対処していますが、OPが2つのアプローチの統計的な違いについて尋ねていることは明らかです。つまり、すべての値を正確に表すことができる完璧なコンピューターがあれば、なぜあるアプローチを他のアプローチよりも好むのでしょうか?

user5957401は、直交多項式が多項式関数間の共線性を低下させ、推定をより安定させると主張しています。私はジェイク・ウェストフォールの批判に同意します。直交多項式の係数は、生の多項式の係数とはまったく異なる量を表します。モデルで暗示された用量反応関数、、MSE、予測値、および予測値の標準誤差は、直交多項式を使用するか生の多項式を使用するかに関係なく、すべて同一になります。2次の生の多項式回帰におけるの係数は、「ときのの瞬間的な変化」の解釈を持ち。直交多項式で限界効果手順を実行した場合R2XYX=0X=0、直交多項式回帰の1次項の係数と標準誤差は生の多項式回帰の値とは完全に異なりますが、まったく同じ勾配と標準誤差が得られます。つまり、両方の回帰から同じ量(つまり、同じように解釈できる量)を取得しようとすると、推定値と標準誤差は同じになります。直交多項式を使用しても、任意のポイントでの勾配を魔法のように確実にできるわけではありません。モデルの安定性は同じです。下記参照:X

data("iris")

#Raw:
fit.raw <- lm(Petal.Length ~ Petal.Width + I(Petal.Width^2) +
                  I(Petal.Width^3), data = iris)
summary(fit.raw)

#> Coefficients:
#>                  Estimate Std. Error t value Pr(>|t|)    
#> (Intercept)        1.1034     0.1304   8.464 2.50e-14 ***
#> Petal.Width        1.1527     0.5836   1.975  0.05013 .  
#> I(Petal.Width^2)   1.7100     0.5487   3.116  0.00221 ** 
#> I(Petal.Width^3)  -0.5788     0.1408  -4.110 6.57e-05 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 0.3898 on 146 degrees of freedom
#> Multiple R-squared:  0.9522, Adjusted R-squared:  0.9512 
#> F-statistic: 969.9 on 3 and 146 DF,  p-value: < 2.2e-16

#Orthogonal
fit.orth <- lm(Petal.Length ~ stats::poly(Petal.Width, 3), data = iris)

#Marginal effect of X at X=0 from orthogonal model
library(margins)
summary(margins(fit.orth, variables = "Petal.Width", 
                at = data.frame(Petal.Width = 0)))
#> Warning in check_values(data, at): A 'at' value for 'Petal.Width' is
#> outside observed data range (0.1,2.5)!
#>       factor Petal.Width    AME     SE      z      p  lower  upper
#>  Petal.Width      0.0000 1.1527 0.5836 1.9752 0.0482 0.0089 2.2965

reprexパッケージ(v0.3.0)によって2019-10-25に作成

Petal.Width直交近似とその標準誤差による0 の限界効果は、生の多項式近似による効果と正確に等しくなります。直交多項式を使用しても、2つのモデル間で同じ量の推定の精度は向上しません。

重要な点は次のとおりです。直交多項式を使用すると、結果の分散の説明に対する各項の寄与を分離できます。ここでは、二乗された半部分相関について話しています。3次の直交多項式を近似する場合、各項の半部分相関の二乗は、モデル内のその項によって説明される結果の分散を表します。したがって、「の分散のどれだけが線形成分として説明されるか」と答えたい場合は、YX直交多項式回帰を当てはめることができ、線形項の二乗半部分相関はこの量を表します。これは生の多項式ではそうではありません。同じ次数の生の多項式モデルを当てはめると、線形項は、の線形成分によって説明されるの分散の割合を表しません。以下を参照してください。YX

library(jtools)
data("iris")

fit.raw3 <- lm(Petal.Length ~ Petal.Width + I(Petal.Width^2) +
                  I(Petal.Width^3), data = iris)
fit.raw1 <- lm(Petal.Length ~ Petal.Width, data = iris)

round(summ(fit.raw3, part.corr = T)$coef, 3)
#>                    Est.  S.E. t val.     p partial.r part.r
#> (Intercept)       1.103 0.130  8.464 0.000        NA     NA
#> Petal.Width       1.153 0.584  1.975 0.050     0.161  0.036
#> I(Petal.Width^2)  1.710 0.549  3.116 0.002     0.250  0.056
#> I(Petal.Width^3) -0.579 0.141 -4.110 0.000    -0.322 -0.074

round(summ(fit.raw1, part.corr = T)$coef, 3)
#>              Est.  S.E. t val. p partial.r part.r
#> (Intercept) 1.084 0.073 14.850 0        NA     NA
#> Petal.Width 2.230 0.051 43.387 0     0.963  0.963

fit.orth3 <- lm(Petal.Length ~ stats::poly(Petal.Width, 3), 
               data = iris)
fit.orth1 <- lm(Petal.Length ~ stats::poly(Petal.Width, 3)[,1], 
               data = iris)

round(summ(fit.orth3, part.corr = T)$coef, 3)
#>                                Est.  S.E.  t val. p partial.r part.r
#> (Intercept)                   3.758 0.032 118.071 0        NA     NA
#> stats::poly(Petal.Width, 3)1 20.748 0.390  53.225 0     0.975  0.963
#> stats::poly(Petal.Width, 3)2 -3.015 0.390  -7.735 0    -0.539 -0.140
#> stats::poly(Petal.Width, 3)3 -1.602 0.390  -4.110 0    -0.322 -0.074

round(summ(fit.orth1, part.corr = T)$coef, 3)
#>                                    Est.  S.E. t val. p partial.r part.r
#> (Intercept)                       3.758 0.039 96.247 0        NA     NA
#> stats::poly(Petal.Width, 3)[, 1] 20.748 0.478 43.387 0     0.963  0.963

reprexパッケージ(v0.3.0)によって2019-10-25に作成

オーダー3の多項式が適合している生の多項式のための二乗semipartial相関関係がある、、および。線形項のみが当てはまる場合、二乗された半部分相関はです。オーダー3の多項式が適合している直交多項式のための二乗semipartial相関関係がある、、および。線形項のみが当てはまる場合、二乗された半部分相関はまだ0.0010.0030.0050.9270.9270.0200.0050.927。生の多項式モデルではなく、直交多項式モデルから、結果で説明される分散のほとんどは線形項によるものであり、平方項からはほとんど発生せず、3次項からはさらに少ないことがわかります。生の多項式値はその話をしません。

ここで、実際にモデルの係数を理解できるという相互利益よりもこの解釈上の利益が必要かどうかにかかわらず、直交多項式を使用する必要があります。係数を見て、それらが何を意味するのかを正確に知りたい場合は(通常はそうではないでしょうが)、生の多項式を使用する必要があります。気にしない場合(つまり、交絡の制御または予測値の生成のみが必要な場合)、それは本当に重要ではありません。両方のフォームは、それらの目標に関して同じ情報を伝えます。高次項を削除しても低次項の係数には影響しないため、正則化(たとえば、投げ縄)では直交多項式を優先する必要があると主張しますが、これは生の多項式では当てはまりません。


1
素晴らしい貢献。限界結果を複製することはできません(最初のコードブロックを実行しようとすると、マージン関数がpolyについてエラーを表示します-マージンパッケージに精通していません)-それらはまさに私が期待するものです。小さな提案として、マージンモデルの出力も未加工のモデルに含める必要があります。あなたの議論は、要約からマージン関数へのp値の変化(結論を変えます!)によって(わずかに)損なわれます-これは分布ではなく正規を使用することによって引き起こされるようです。正則化ポイントは素晴らしいです。
user5957401

1
優しい言葉をありがとう。私はあなたがそれを認識するためにin へstats::の呼び出しに含める必要があると思います(これは愚かなことです)。私は論点をポイントの推定値と標準誤差に集中させたいと思っていました。また、多くの無関係で注意をそらす情報が提示されていることを知っていますが、テキストが私のポイントを示していることを願っています。poly()lm()margins
ノア

それではない。私はあなたのコードを正確にコピーし、あなたはを使用していますstats::poly()。エラーは言う'degree' must be less than number of unique points-それは私をあまり助けません。それにもかかわらず、margin()証明可能なステートメントをバックアップしているので、重要ではありません。
user5957401

4

@ user5957401からの優れた応答を確認し、補間、外挿、およびレポートに関するコメントを追加します。

安定したパラメーター値の領域でも、直交多項式でモデル化された係数/パラメーターは、生のパラメーターでモデル化された係数/パラメーターよりも大幅に小さい標準誤差を持ちます。基本的に、直交多項式はゼロ共分散記述子の無料セットです。それは無料のPCAです!

唯一の潜在的な欠点は、ゼロ共分散記述子の長所を理解していない人にこれを説明しなければならないことです。係数は、1次(速度のような)または2次(加速のような)効果のコンテキストですぐには解釈できません。これは、ビジネス環境では非常に厄介な場合があります。

次数5の多項式、N = 1000点、(によって縮小ランダムパラメータ値を迅速シミュレーション、及び非相関雑音の大きさの2桁以内応答変数を維持する)半分全体の変化応答変数では、2つのモデルのは同一でした。もです。予測力は同じです。しかし、直交モデルのパラメーター値の標準誤差は、生モデルと同等か、それよりも桁違いに低かった。10dR2adj R2

ですから、直交モデルの報告は、生のモデルよりも「桁違いに」自信があります。実際には、どちらのモデルでも補間しますが、直交モデルでのみ外挿します。


1

これに言及するためにコメントしたのですが、十分な担当者がいないので、答えに拡大しようとします。「統計学習の概要」(James et al。、2017、修正された8回目の印刷)のラボセクション7.8.1で、直交多項式を使用するかどうかの違いについて議論していることに興味があるかもしれません。raw=TRUEまたはraw=FALSEpoly()機能。たとえば、係数の推定値は変わりますが、近似値は変わりません。

# using the Wage dataset in the ISLR library
fit1 <- lm(wage ~ poly(age, 4, raw=FALSE), data=Wage)
fit2 <- lm(wage ~ poly(age, 4, raw=TRUE), data=Wage)
print(coef(fit1)) # coefficient estimates differ
print(coef(fit2))
all.equal(predict(fit1), predict(fit2)) #returns TRUE    

また、直交多項式が使用される場合、anova()ネストされたF検定を使用して取得されるp値(どの程度の多項式が保証される可能性があるかを調べる)は、標準のt検定を使用して取得されるものと同じである方法についても説明していますsummary(fit)。これは、特定の状況でF統計量がt統計量の二乗に等しいことを示しています。


評判の数字に関係なく、コメントを回答として使用しないでください。
マイケルR.チャーニック

最後の点に関して、これは非直交多項式にも当てはまります。係数t検定は、回帰のすべての係数(一度に1つずつ取得)のないモデルとその中の係数を持つモデルを比較するF検定に等しくなります。
ノア
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.