独立変数のBox-Coxのような変換はありますか?つまり、変数を最適化して、線形モデルにより適したものにするための変換ですか?y~f(x)
もしそうなら、これを実行する機能はありR
ますか?
独立変数のBox-Coxのような変換はありますか?つまり、変数を最適化して、線形モデルにより適したものにするための変換ですか?y~f(x)
もしそうなら、これを実行する機能はありR
ますか?
回答:
ジョン・テューキーは、関係の線形化のために変数の再表現を見つけるための「3点法」を提唱しました。
彼の本であるExploratory Data Analysisの演習で説明します。これらは、温度を変化させて蒸気圧を測定した実験の水銀蒸気圧データです。
pressure <- c(0.0004, 0.0013, 0.006, 0.03, 0.09, 0.28, 0.8, 1.85, 4.4,
9.2, 18.3, 33.7, 59, 98, 156, 246, 371, 548, 790) # mm Hg
temperature <- seq(0, 360, 20) # Degrees C
関係は強く非線形です。図の左パネルを参照してください。
これは探索的な演習であるため、インタラクティブであることが期待されます。アナリストは、プロット内の3つの「典型的な」ポイントを特定することから始めるように求められます。1つは各端に近く、もう1つは中央にあります。ここでそれを行い、赤でマークしました。(私がずっと前にこの練習をしたとき、私は異なるポイントのセットを使用しましたが、同じ結果に到達しました。)
3点法では、ブルートフォースまたは別の方法で、座標の1つ(yまたはxのいずれか)に適用されると(a)典型的な点をほぼ(b)アナリストが解釈できる可能性のある「梯子」の力から通常選択される「素敵な」力を使用します。
後で明らかになる理由から、変換が次の形式になるように「オフセット」を許可することにより、Box-Coxファミリーを拡張しました。
R
box.cox <- function(x, parms=c(1,0)) {
lambda <- parms[1]
offset <- parms[2]
if (lambda==0) log(x+offset) else ((x+offset)^lambda - 1)/lambda
}
threepoint <- function(x, y, ladder=c(1, 1/2, 1/3, 0, -1/2, -1)) {
# x and y are length-three samples from a dataset.
dx <- diff(x)
f <- function(parms) (diff(diff(box.cox(y, parms)) / dx))^2
fit <- nlm(f, c(1,0))
parms <- fit$estimate #$
lambda <- ladder[which.min(abs(parms[1] - ladder))]
if (lambda==0) offset = 0 else {
do <- diff(range(y))
offset <- optimize(function(x) f(c(lambda, x)),
c(max(-min(x), parms[2]-do), parms[2]+do))$minimum
}
c(lambda, offset)
}
水銀蒸気データセットの圧力(y)値に3点法を適用すると、プロットの中央のパネルが得られます。
data <- cbind(temperature, pressure)
n <- dim(data)[1]
i3 <- c(2, floor((n+1)/2), n-1)
parms <- threepoint(temperature[i3], pressure[i3])
y <- box.cox(pressure, parms)
parms
質問のコンテキストに類似したポイントに到達しました:何らかの理由で(通常は残差分散を安定させるために)、従属変数を再表現しましたが、独立変数との関係は非線形であることがわかりました。そこで、関係を線形化するために、独立変数を再表現することにします。これは同じ方法で行われ、単にxとyの役割を逆にします。
parms <- threepoint(y[i3], temperature[i3])
x <- box.cox(temperature, parms)
parms
John Foxによる「回帰診断」に関するこれらのスライドを見てください(ここから参照できます)。非線形性の変換の問題について簡単に説明しています。累乗変換を選択するためのTukeyの「バルジングルール」(受け入れられた答えで対処)をカバーしますが、変換のBox-CoxおよびYeo-Johnsonファミリーにも言及しています。スライドのセクション3.6を参照してください。同じ著者によるより正式な解釈については、J。Fox、Applied Regression Analysis、およびGeneralized Linear Models、Second Edition(Sage、2008)を参照してください。
これに役立つ実際のRパッケージについては、J。FoxとS. Weisbergによって作成された車のパッケージを絶対に見てください。このパッケージにはJ. FoxとS. Weisberg、An R Companion to Applied Regression、Second Edition、(Sage、2011)が必読です。そのパッケージを使用すると、basicPower()
(単純な累乗変換)、bcPower()
(ボックス-コックス変換)、およびyjPower()
(ヨージョンソン変換)から開始できます。powerTransform()もあります:
関数powerTransformは、単変量または多変量確率変数の正規化変換を推定するために使用されます。
これらの変換の背後にある理論と計算アプローチの詳細については、両方の本を確認してください。
R
そして、それについてちょっと考えて、これをどのように行うか正確にはわかりません。「最も線形」の変換を保証するために最適化する基準は何ですか?は魅力的ですが、ここでの私の答えに見られるように、R 2だけを使用してモデルの線形性の仮定が満たされているかどうかを確認することはできません。いくつかの基準を念頭に置いていましたか?