2017-10-12 6 views
3

densityオブジェクトをプロットしようとすると問題が発生します。例えば瞬間のために「密度」オブジェクトをプロットする際の問題

require(grDevices) 

set.seed(43) 
d0 = density(rexp(1e5,rate=1)) 
d1 = density(rexp(1e5,rate=1.8)) 


plot(d1, col="white", xlab = "x", ylab="Density", main = "") 
polygon(d1, col=adjustcolor("blue", alpha.f=0.2)) 
lines(d0, col="white") 
polygon(d0, col=adjustcolor("red", alpha.f=0.2)) 

enter image description here

を考えてみましょう、それは私が予想通りに見えます。この問題は、Y軸の低い値をズームするときに発生します。例えば

不思議
plot(d1, col="white", xlim=c(2.5,3), xlab = "x", ylab="Density", main = "", 
ylim=c(0,0.02)) 
polygon(d1, col=adjustcolor("blue", alpha.f=0.2)) 
lines(d0, col="white", xlim=c(2.5,3), ylim=c(0,0.02)) 
polygon(d0, col=adjustcolor("red", alpha.f=0.2)) 

enter image description here

ための検討、多角形の下部には、1つのポリゴンが他のものよりも下端、また= 0密度に到達しません。 yaxs="i"xaxs="i"を設定すると問題は解決しません。

この問題はどうなっていますか?いくつかの個人データを持つ


、私は

enter image description here

答えて

2

別のオプション密度推定値が実際に両端で実質的にゼロになるようにビットデータの範囲を超えて密度推定値のx範囲を拡張することです。これにより、密度推定の値を人為的に変更する必要がなくなります。例えば:

set.seed(43) 
d0 = density(rexp(1e5,rate=1)) 
d1 = density(rexp(1e5,rate=1.8)) 

d1$y[c(1, length(d1$y))] 

[1] 2.987316e-03 1.235864e-06

set.seed(43) 
d1 = rexp(1e5,rate=1.8) 
d1 = density(d1, from=min(d1) - 0.05*diff(range(d1)), to=max(d1) + 0.05*diff(range(d1))) 

d1$y[c(1, length(d1$y))] 

[1] 6.334144e-17 3.797333e-17

+2

この解決法は、私のものよりも「原因を扱う」ビットをさらに持っています持ってる ;) – AkselA

1

のようなものは、あなただけの両端でゼロにyの値を固定することにより、カンニングすることができ得ますか?

set.seed(43) 
d0 = density(rexp(150,rate=1)) 
d1 = density(rexp(150,rate=1.8)) 

d0$y[c(1, length(d0$y))] <- 0 
d1$y[c(1, length(d1$y))] <- 0 

plot(d1, col="white", xlim=c(2.5,3), xlab = "x", ylab="Density", main = "", 
ylim=c(0,0.02)) 
polygon(d1, col=adjustcolor("blue", alpha.f=0.2)) 
lines(d0, col="white", xlim=c(2.5,3), ylim=c(0,0.02)) 
polygon(d0, col=adjustcolor("red", alpha.f=0.2)) 

enter image description here

わずかな改善は、一端がベースラインに接触し、その後ゼロに次のいずれかを設定するように全体のポリゴンを低下させるであろう。

set.seed(43) 
d0 = density(rexp(150,rate=1)) 
d1 = density(rexp(150,rate=1.8)) 

ends0 <- d0$y[c(1, length(d0$y))] 
ends1 <- d1$y[c(1, length(d1$y))] 

d0$y <- d0$y - min(ends0) 
d1$y <- d1$y - min(ends1) 

d0$y[c(1, length(d0$y))] <- 0 
d1$y[c(1, length(d1$y))] <- 0 


plot(d1, col="white", xlim=c(2.5,3), xlab = "x", ylab="Density", main = "", 
ylim=c(0,0.02)) 
polygon(d1, col=adjustcolor("blue", alpha.f=0.2)) 
lines(d0, col="white", xlim=c(2.5,3), ylim=c(0,0.02)) 
polygon(d0, col=adjustcolor("red", alpha.f=0.2)) 

enter image description here

ここでは比較のために訂正なしのものを示します。

enter image description here

+0

ああ...私は大まかに問題と簡単な修正を理解しています。それはソリューションの周りに悪い仕事のように見えるが、それは問題を解決し、可能な限り単純な解決策かもしれない。 +1 –

+0

@ Remi.b:そうですね、プロットにx値の端点を含めると、ぎこちないギザギザのエッジに終わることがあります – AkselA

関連する問題