正のデータに大きな偏りがある場合、ログを取得することがよくあります。しかし、ゼロを含む非常に歪んだ非負データではどうすればよいですか?私は2つの変換が使用されているのを見ました:
- 0が0にマッピングされるというきちんとした機能を持つ。
- ここで、cは推定されるか、非常に小さな正の値に設定されます。
他のアプローチはありますか?あるアプローチを他のアプローチよりも好む理由はありますか?
正のデータに大きな偏りがある場合、ログを取得することがよくあります。しかし、ゼロを含む非常に歪んだ非負データではどうすればよいですか?私は2つの変換が使用されているのを見ました:
他のアプローチはありますか?あるアプローチを他のアプローチよりも好む理由はありますか?
回答:
変換の最も適切な選択は、モデルとコンテキストに依存するように思えます。
「0」ポイントは、いくつかの異なる理由から発生する可能性があり、それぞれ異なる方法で処理する必要があります。
あなたがゼロを持っているとき、普遍的な「正しい」変換はないと思うので、私は本当に答えを提供していません。
逆双曲線正弦変換については誰も言及していません。したがって、完全を期すためにここに追加します。
これは、Box-Cox変換の代替であり、 ここで。値の場合、ゼロはゼロにマッピングされます。2パラメータBC変換と同様に、シフトを許可する2パラメータバージョンもあります。Burbidge、Magee and Robb(1988)は、推定を含むIHS変換について議論しています。θ > 0 θ θ
IHS変換は、負の値とゼロを含む実際の行全体で定義されたデータで機能します。値が大きい場合、(0を除く)の値に関係なく、対数変換のように動作します。ような限定的なケースでは、ます。θ θ → 0 F (Y 、θ )→ Y
IHSの変革は、それよりもはるかによく知られているように思えます。
変数が回帰の独立した要因として使用される場合の有用なアプローチは、変数を2つの変数で置き換えることです。1つはゼロかどうかのバイナリインジケーターで、もう1つは元の変数の値または再表現です。その対数など。この手法は、Hosmer&Lemeshowのロジスティック回帰に関する本で議論されています(他の場所でも間違いないでしょう)。元の変数の正の部分の切り捨てられた確率プロットは、適切な再表現を識別するのに役立ちます。(例については、https://stats.stackexchange.com/a/30749/919の分析を参照してください。)
変数が線形モデルの従属変数である場合、打ち切られた回帰(Tobitのような)が有用な場合があり、これも開始対数を生成する必要がありません。この手法は計量経済学者の間では一般的です。
シフト付きのログ変換は、Box-Cox変換の特殊なケースです。
これらは負の値の拡張形式ですが、ゼロを含むデータにも適用できます。Box and Cox(1964)は、最尤法を使用しての適切な値を見つけるアルゴリズムを提示します。これにより、究極の変革が実現します。
Box-Cox変換を好む理由は、線形モデルの仮定を保証するために開発されているからです。データを正規性に変換できない場合でも、推定が対称分布につながることを示すために、いくつかの作業が行われています。
これがあなたのデータにどれだけうまく対応しているかはわかりません、なぜならあなたが言及した単なるログ変換であるかもしれませんが、必要な推定して別の変換が適切です。λ
Rでは、boxcox.fit
パッケージ内の関数がgeoR
パラメーターを計算します。
lambda2=TRUE
が、の引数で指定しますboxcox.fit
。(回答も更新されました。)
boxcoxfit
ます。
それはまったく異なる質問なので、ゼロ!=欠落データがあると仮定しています。
多重線形回帰でゼロを処理する方法を考えるとき、実際にゼロがいくつあるかを考える傾向がありますか?
数個のゼロのみ
かなり大きなデータセットに単一のゼロがある場合、次の傾向があります。
モデルの適合は変化しますか?パラメーター値はどうですか?モデルがポイントの削除に対してかなり堅牢な場合、を追加するための迅速で汚れたアプローチに進みます。
この手順を少し粗雑にせず、arsの回答に記載されているシフトでboxcoxメソッドを使用できます。
多数のゼロ
データセットに多数のゼロが含まれている場合、単純な線形回帰は仕事に最適なツールではないことが示唆されます。代わりに、混合モデリングのようなものを使用します(SrikantとRobinが提案したとおり)。
すばやく汚れたものが必要な場合は、平方根を使用してみませんか?
連続データがあると思います。
データにゼロが含まれている場合、これはゼロのスパイクがあることを意味します。これは、データの特定の側面に起因する可能性があります。たとえば、風力エネルギーでは、2 m / s未満の風がゼロ電力を生成し(カットインと呼ばれます)、25 m / sを超える風(ゼロ付近)がゼロ電力を生成します(セキュリティ上の理由から、カットオフと呼ばれます) 。生成された風力エネルギーの分布は連続しているように見えますが、ゼロのスパイクがあります。
私の解決策: この場合、ゼロのスパイクと、分布の連続部分に使用する予定のモデル(wrbes Lebesgue)の混合で作業することにより、ゼロを個別に扱うことをお勧めします。
@RobHyndmanで提供された回答と、負の値に拡張されたlog-plus-one変換を次の形式で比較します。
r = -1000:1000
l = sign(r)*log1p(abs(r))
l = l/max(l)
plot(r, l, type = "l", xlab = "Original", ylab = "Transformed", col = adjustcolor("red", alpha = 0.5), lwd = 3)
#We scale both to fit (-1,1)
for(i in exp(seq(-10, 100, 10))){
s = asinh(i*r)
s = s / max(s)
lines(r, s, col = adjustcolor("blue", alpha = 0.2), lwd = 3)
}
legend("topleft", c("asinh(x)", "sign(x) log(abs(x)+1)"), col = c("blue", "red"), lty = 1)
ご覧のとおり、が増加すると、変換はステップ関数のようになります。、ログ・プラス・ワンの変換によく似ています。そしてときそれが近づきライン。
編集:対数変換は同様に任意のスケールに変更でき、同様の結果が得られることに注意してください。前の回答に基づいて、が同様の結果をもたらすものを示したかっただけです。両方のアプローチの最大の違いは、に近い領域です。これは、それらの導関数からわかります。
2パラメーターフィットBox-Coxが提案されているため、入力データをフィットし、任意の関数を実行して(時系列予測など)、反転出力を返すRを次に示します。
# Two-parameter Box-Cox function
boxcox.f <- function(x, lambda1, lambda2) {
if (lambda1!=0) {
return(((x + lambda2) ^ lambda1 - 1) / lambda1)
} else {
return(log(x + lambda2))
}
}
# Two-parameter inverse Box-Cox function
boxcox.inv <- function(x, lambda1, lambda2) {
if (lambda1!=0) {
return((lambda1 * x + 1) ^ (1 / lambda1) - lambda2)
} else {
return(exp(x) - lambda2)
}
}
# Function to Box-Cox transform x, apply function g,
# and return inverted Box-Cox output y
boxcox.fit.apply <- function(x, g) {
require(geoR)
require(plyr)
# Fit lambdas
t <- try(lambda.pair <- boxcoxfit(x, lambda2=T)$lambda)
# Estimating both lambdas sometimes fails; if so, estimate lambda1 only
if (inherits(t, "try-error")) {
lambda1 <- boxcoxfit(x)$lambda
lambda2 <- 0
} else {
lambda1 <- lambda.pair[1]
lambda2 <- lambda.pair[2]
}
x.boxcox <- boxcox.f(x, lambda1, lambda2)
# Apply function g to x.boxcox. This should return data similar to x (e.g. ts)
y <- aaply(x.boxcox, 1, g)
return(boxcox.inv(y, lambda1, lambda2))
}
Yが、各アメリカ人が特定の年に新車に費やす金額(合計購入価格)であるとします。Yは0でスパイクします。0から約12,000の間の値はまったくありません。主に10代、20代、30代に他の値を取ります。予測変数は、そのような購入を行う必要性および/または関心のレベルのプロキシになります。購入しなかった個人にとって、必要性や関心はゼロとはほとんど言えません。これらのスケールでは、非購入者はYよりも購入者にはるかに近いか、Yのログでさえも示唆します。このようなケースではありますが、ヘルスケアでは、テストセット/トレーニングセットの相互検証によって判断される最も正確な予測は、昇順で得られることがわかりました。
連続従属変数のこの分類に反発する人もいます。ただし、一部の情報は犠牲になりますが、分類は状況の重要な基礎となる側面を復元することで役立ちます。ここでも、「ゼロ」はYが示すよりもはるかに類似しています。
ここで説明するヨージョンソンのパワー変換には、Box Coxのパワー変換の強みを活用しながらゼロとネガを処理するように設計された優れたプロパティがあります。これは、ゼロまたは負のデータを扱っているときによく行くことです。
Yeo-Johnsonが望ましい理由を説明する、賛否両論の変換の概要を以下に示します。
ログ
長所:肯定的なデータでうまく機能します。
短所:ゼロを処理しません。
> log(0)
[1] -Inf
ログプラス1
長所:プラス1オフセットは、正のデータに加えてゼロを処理する機能を追加します。
短所:負のデータで失敗する
> log1p(-1)
[1] -Inf
> log1p(-2)
[1] NaN
Warning message:
In log1p(-2) : NaNs produced
平方根
長所:ゼロと正のデータを処理できる累乗変換を使用します。
短所:負のデータで失敗する
> sqrt(-1)
[1] NaN
Warning message:
In sqrt(-1) : NaNs produced
ボックスコックス
Rコード:
box_cox <- function(x, lambda) {
eps <- 0.00001
if (abs(lambda) < eps)
log(x)
else
(x ^ lambda - 1) / lambda
}
長所:拡張された電力変換が可能
短所:ゼロとネガの問題に苦しんでいます(つまり、ポジティブデータのみを処理できます)
> box_cox(0, lambda = 0)
[1] -Inf
> box_cox(0, lambda = -0.5)
[1] -Inf
> box_cox(-1, lambda = 0.5)
[1] NaN
ヨ・ジョンソン
Rコード:
yeo_johnson <- function(x, lambda) {
eps <- .000001
not_neg <- which(x >= 0)
is_neg <- which(x < 0)
not_neg_trans <- function(x, lambda) {
if (abs(lambda) < eps) log(x + 1)
else ((x + 1) ^ lambda - 1) / lambda
}
neg_trans <- function(x, lambda) {
if (abs(lambda - 2) < eps) - log(-x + 1)
else - ((-x + 1) ^ (2 - lambda) - 1) / (2 - lambda)
}
x[not_neg] <- not_neg_trans(x[not_neg], lambda)
x[is_neg] <- neg_trans(x[is_neg], lambda)
return(x)
}
長所:正、ゼロ、負のデータを処理できます。
短所:考えられることはありません。プロパティはBox-Coxと非常に似ていますが、ゼロおよび負のデータを処理できます。
> yeo_johnson(0, lambda = 0)
[1] 0
> yeo_johnson(0, lambda = -0.5)
[1] 0
> yeo_johnson(-1, lambda = 0.5)
[1] -1.218951
回帰モデルでゼロのログを処理する方法を明確にするために、最良の解決策と実際に人々が犯すよくある間違いを説明する教育論文を書きました。また、この問題に対処するための新しいソリューションも考案しました。
ここをクリックして、論文を見つけることができます:https : //ssrn.com/abstract=3444996
まず、なぜログ変換を使用するのか不思議に思うはずです。回帰モデルでは、ログとログの関係により、弾力性が識別されます。実際、もし、次にの弾性に対応するの。ログは、理論モデルを線形化することもできます。また、不均一分散を減らすためにも使用できます。ただし、実際には、ログで取得された変数に正でない値が含まれることがよくあります。
しばしば提案される解決策は、なるように、すべての観測値正の定数cを追加することです。ただし、線形回帰とは異なり、対数線形回帰は従属変数の線形変換に対してロバストではありません。これは、対数関数の非線形性によるものです。ログ変換は、低い値を拡張し、高い値を絞り込みます。したがって、定数を追加すると、ゼロとデータ内の他の観測値との(線形)関係が歪められます。定数によって生成されるバイアスの大きさは、実際にはデータ内の観測範囲に依存します。そのため、可能な限り最小の定数を追加することは、必ずしも最良の最悪のソリューションではありません。
この記事では、非常に小さな定数を追加すると実際に最高のバイアスが提供される例を示します。バイアスの表現を導き出します。
実際、ポアソン擬似最尤法(PPML)は、この問題の良い解決策と見なすことができます。次のプロセスを考慮する必要があります。
と
このプロセスは、いくつかの機能が動機となっています。まず、半ログモデルとして同じ解釈を提供します。第二に、このデータ生成プロセスは、従属変数のゼロ値の論理的合理化を提供します。この状況は、乗算誤差項がゼロに等しい場合に発生する可能性があります。第三に、PPMLを使用してこのモデルを推定しても、場合に計算上の困難は発生しません。と仮定すると、ます。この瞬間の二次誤差を最小化して、次の1次条件を導きます。
これらの条件は、場合でも定義され。これらの1次条件は数値的にポアソンモデルの条件と同等であるため、任意の標準的な統計ソフトウェアで推定できます。
最後に、実装も簡単で、不偏推定量を提供する新しいソリューションを提案します。単に推定する必要があります:
この推定量は偏りがなく、標準統計ソフトウェアを使用してGMMで簡単に推定できることを示します。たとえば、Stataで1行のコードを実行するだけで推定できます。
この記事がお役に立てば幸いです。皆様からのフィードバックをお待ちしております。
クリストフ・ベレゴとルイ・ダニエル・パプ・クレスト-エコール・ポリテクニック-ENSAE