6

範囲が次の変数の密度をプロットしたい:

 Min.   :-1214813.0  
 1st Qu.:       1.0  
 Median :      40.0  
 Mean   :     303.2  
 3rd Qu.:     166.0  
 Max.   : 1623990.0

密度の線形プロットは、範囲 [0,1000] の高い列になり、正の無限大と負の無限大に向かって 2 つの非常に長い裾があります。したがって、変数を対数スケールに変換して、平均の周りで何が起こっているかを確認したいと思います。たとえば、次のようなことを考えています。

log_values = c( -log10(-values[values<0]), log10(values[values>0]))

その結果:

Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
-6.085   0.699   1.708   1.286   2.272   6.211 

これに関する主な問題は、値が含まれていないという事実0です。もちろん、すべての値を からシフトすることはできます0values[values>=0]+1、これはデータにいくらかの歪みをもたらします。

この変数を対数目盛に変換する科学的に確実な方法として、どのような方法が認められているでしょうか?

4

3 に答える 3

4

あなたが持っているのは、本質的に@Jamesが提案するものです。これは、(-1,1) の値、特に原点に近い値では問題になります。

x <- seq(-2, 2, by=.01)
plot(x, sign(x)*log10(abs(x)), pch='.')

ここに画像の説明を入力

このようなものが役立つかもしれません:

y <- c(-log10(-x[x<(-1)])-1, x[x >= -1 & x <= 1], log10(x[x>1])+1)

plot(x, y, pch='.')

ここに画像の説明を入力

これは継続的です。間隔 (-1/log(10), 1/log(10)) を使用して C^1 を強制することができます。これは、d/dx log10(x) = 1 を解くことによって見つかります。

z <- c( -log10(-x[x<(-1/log(10))]) - 1/log(10)+log10(1/log(10)),
         x[x >= -1/log(10) & x <= 1/log(10)],
         log10(x[x>1/log(10)]) + 1/log(10)-log10(1/log(10))
       )
plot(x, z, pch='.')

ここに画像の説明を入力

于 2012-12-23T17:17:10.117 に答える
1

これを別の答えとして追加します。考え方は似ていますが、マッピングは根本的に異なるためです。

log(1 + .)小さい値(<1)が対数スケールのプロットに含まれている場合、それは。ではなく一般的なプロットですlog(.)

原点全体を振り返ると、何か便利なものが得られます。

x <- seq(-2, 2, by=.01)   
w <- c( -log10(1-x[x<0]), x[x==0], log10(1+x[x>0]))

plot(x, w, pch='.')

0付近の方向微分も反映されるため、関数が滑らかであることは明らかです。 ここに画像の説明を入力してください

xの値がはるかに大きい場合:

x <- seq(-10000, 10000, by=.01)
w <- c( -log10(1-x[x<0]), x[x==0], log10(1+x[x>0]))
plot(x, w, pch='.')

ここに画像の説明を入力してください

于 2012-12-25T02:12:46.917 に答える