ecdfプロットに値が表示されないのはなぜですか?

debugging r statistics
ecdfプロットに値が表示されないのはなぜですか?

以下に示すデータのccdfをプロットしようとしていますが、何らかの理由で正しく見えません。 一部のデータポイント(2523、313、224)とクロスチェックしていましたが、それらは表示されません。 私は何か悪いことをしていますか?

  • Rスクリプト:*

# Y defined below
Y.ecdf = ecdf(Y)
curve((length((Y))*(1-Y.ecdf(x))), n = 10000,
       from = 0, to = 100, xlab = "# of items",
       ylab = "# instances", col=colors[1], lty=1, lwd=4)

画像:https://i.stack.imgur.com/qmJXI.png [ecdf plot]

Y = c( 3, 1, 4, 11, 2, 2, 9, 7, 22, 3, 1, 1, 7, 2, 2, 2, 4, 2, 1, 1, 6, 3, 20,
15, 4, 1, 1, 5, 3, 10, 16, 224, 74, 2, 1, 2, 2, 3, 3, 7, 2, 2, 1, 4, 2, 9,
3, 3, 2, 1, 1, 3, 2, 4, 4, 1, 7, 2, 1, 2, 1, 1, 2, 4, 3, 1, 1, 1, 3, 4, 2,
2, 1, 1, 5, 6, 13, 15, 3, 1, 2, 5, 1, 1, 1, 1, 2, 6, 1, 4, 1, 3, 1, 1, 4,
2, 2, 3, 3, 1, 4, 2, 1, 4, 6, 1, 1, 1, 1, 2, 5, 2, 1, 1, 1, 1, 1, 3, 1, 3,
2, 1, 1, 1, 2, 1, 8, 2, 3, 1, 1, 1, 1, 1, 3, 1, 3, 2, 1, 2, 1, 1, 5, 1, 1,
4, 3, 3, 1, 1, 1, 3, 4, 4, 3, 2, 2, 4, 3, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 3,
2, 3, 9, 3, 4, 2, 1, 1, 1, 3, 22, 5, 13, 1, 1, 1, 1, 1, 4, 1, 1, 31, 1, 1,
2, 1, 1, 1, 3, 4, 4, 8, 6, 6, 7, 2, 1, 2, 2, 5, 1, 2, 6, 6, 1, 3, 1, 5, 2,
1, 5, 3, 1, 2, 2, 1, 2, 1, 2, 2, 1, 2, 1, 1, 4, 1, 3, 2, 1, 4, 1, 212, 2,
7, 7, 10, 2, 4, 2, 1, 1, 1, 2, 3, 2, 1, 16, 6, 2, 10, 2, 1, 1, 15, 1, 3, 8,
1, 1, 3, 1, 1, 2, 1, 1, 4, 2, 3, 1, 1, 1, 1, 5, 9, 4, 1, 1, 2, 5, 1, 4, 9,
6, 19, 1, 1, 1, 2, 10, 6, 9, 5, 11, 6, 8, 1, 1, 1, 1, 1, 313, 3, 1, 3, 1,
2, 2, 2, 3, 4, 5, 1, 1, 3, 1, 1, 5, 4, 2, 5, 1, 20, 4, 1, 2, 1, 1, 1, 2, 5,
4, 2, 3, 1, 3, 1, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 2, 1, 1, 3, 3, 1, 1, 1, 8, 1, 1, 1, 1,
1, 1, 2, 2, 2, 2, 4, 13, 1, 2, 1, 2, 3, 3, 1, 2, 2, 1, 3, 4, 1, 1, 1, 1, 2,
2, 4, 5, 3, 2, 2, 2, 1, 1, 3, 2523, 7, 4, 2, 4, 11, 8, 1, 4, 4, 2, 5, 3, 3,
1, 3, 1, 3, 4, 1, 1, 1, 1, 6, 6, 2, 2, 1, 8, 8, 3, 3, 4, 5, 2, 2, 2, 3, 2,
6, 2, 2, 2, 1, 5, 5, 4, 3, 1, 2, 2, 6, 3, 2, 2, 2, 10, 9, 1, 2, 1, 1, 1, 2,
2, 3, 1, 3, 1, 9, 1, 1, 1, 2, 1, 96, 2, 2, 5, 1, 1, 1, 2, 2, 1, 1, 1, 5, 2,
1, 1, 1, 2, 1, 1, 4, 2, 10, 3, 2, 2, 8, 8, 2, 1, 2, 4, 1, 1, 13, 20, 3, 2,
5, 9, 1, 22, 25, 4, 1, 1, 3, 2, 1, 1, 7, 9, 5, 9, 1, 3, 1, 8, 2, 2, 1, 3,
1, 2, 6, 2, 1, 2, 2, 1, 2, 2, 2, 1, 1, 1, 16, 3, 5, 2)

  2  0


ベストアンサー

コメントでの議論を拡大しています…​

経験的累積分布関数は、X(x軸)vs. Pr(X <x)(y軸)。 したがって、あなたの例では次のようになります。

plot(Y.ecdf,do.points = FALSE,
     verticals = TRUE,col = "blue",
     xlab = "x", ylab = "Pr(X < x)")

image:https://i.stack.imgur.com/4WM5o.png [ここに画像の説明を入力]

非常によく見ると、非常に大きな値に達したときにラインがどこに上がるかを見ることができますが、多くの値が10未満であるため、わかりにくいです。

あなたがやったことは、この関数を逆にして、分布の反対側の尾、つまり Pr(X> x)。 また、y軸の確率をスケーリングしました。 理由はわかりませんが、何でも。 特定のタスクを考えると意味があるかもしれません。 だから、あなたはこのようなことをしている(しかし、y軸のスケーリングで):

curve((1-Y.ecdf(x)), n = 10000,
       from = 0, to = 2600, ylab = "Pr(X > x)",
       xlab = "x", col="blue", lty=1, lwd=2)

image:https://i.stack.imgur.com/Y7rFb.png [ここに画像の説明を入力]

ただし、元々は関数を0から100までだけプロットするように設定された from`および to`引数がありました。 外れ値を「ズームイン」したい場合は、「from」と「to」の値をより関連性の高いものに変更するだけで済みます。

curve((1-Y.ecdf(x)), n = 10000,
       from = 250, to = 2600, ylab = "Pr(X > x)",
       xlab = "x", col="blue", lty=1, lwd=2)

image:https://i.stack.imgur.com/Chm7w.png [ここに画像の説明を入力]

2


タイトルとURLをコピーしました