独立変数のBox-Coxのような変換?


53

独立変数のBox-Coxのような変換はありますか?つまり、変数を最適化して、線形モデルにより適したものにするための変換ですか?バツy~f(x)

もしそうなら、これを実行する機能はありRますか?


1
私はこれを行うための設備を知りません、Rそして、それについてちょっと考えて、これをどのように行うか正確にはわかりません。「最も線形」の変換を保証するために最適化する基準は何ですか?は魅力的ですが、ここでの私の答えに見られるように、R 2だけを使用してモデルの線形性の仮定が満たされているかどうかを確認することはできません。いくつかの基準を念頭に置いていましたか?R2R2
マクロ

1
私はすでにそれについて話している論文を見たという印象を受けています。「独立変数」ではなく「共変量」でグーグルする方が賢明かもしれません。
ステファンローラン

私は(メモリから)カーパッケージ(R)にこれのいくつかの実装があると思います。しかし、youdはパッケージgmcvのgamのようなものも調査します。
kjetil bハルボルセン

(従属変数とともにすべての独立変数を同時に変換することにより)Box-Coxパラメーターの自動推論を議論するスレッドがstats.stackexchange.com/questions/60431/…に登場しました
whuber

回答:


72

ジョン・テューキーは、関係の線形化のために変数の再表現を見つけるための「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ファミリーを拡張しました。

バツバツ+αλ1λ

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)

parms00

質問のコンテキストに類似したポイントに到達しました:何らかの理由で(通常は残差分散を安定させるために)、従属変数を再表現しましたが、独立変数との関係は非線形であることがわかりました。そこで、関係を線形化するために、独立変数を再表現することにします。これは同じ方法で行われ、単にxとyの役割を逆にします。

parms <- threepoint(y[i3], temperature[i3])
x <- box.cox(temperature, parms)

parms1253.7525411


2732542732541/1バツ

2540


2
こんにちは、フーバー。なんて面白い返事だろう、喜んで読んだよ、ありがとう!(そして、私が取り組んでいる問題にどのように適合するかを見るために少し
試し

3
n2data <- cbind(temperature, pressure)R

2
@landroni物理的、化学的、生物学的理論において、また幾何学的な考察を通じて、積分および小さな分数の力がしばしば発生します。(たとえば、変数がボリュームである場合、その立方根は長さです-これは解釈可能です-一方、たとえば、7番目の根には単純な幾何学的解釈はありません。)
whuber

3
@フランクそうです。それは、明白かつand然とすることなく探索的手法です。予測的であるとさえ主張していないことに注意してください。探査では、先に進む方法しか提案できません。ただし、モデリング予算の4 dfをこれらの変換の推定に割り当てることを想像することはできますが、Tukeyのアプローチなどを使用して推定アルゴリズムをフィッティングアルゴリズムに自動的に組み込むことができます(MLは明らかな可能性です)。
whuber

5
YYλ

11

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は、単変量または多変量確率変数の正規化変換を推定するために使用されます。

これらの変換の背後にある理論と計算アプローチの詳細については、両方の本を確認してください。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.