x 軸に 0% から 100%、y 軸に単位を表すグラフ形式を作成し、y=0 から y=max まで累積することはできますか? . ggplot2 には、それを可能にする事前定義された統計がありますか?
ここにいくつかのデータがあります: http://sprunge.us/XYJK
x 軸に 0% から 100%、y 軸に単位を表すグラフ形式を作成し、y=0 から y=max まで累積することはできますか? . ggplot2 には、それを可能にする事前定義された統計がありますか?
ここにいくつかのデータがあります: http://sprunge.us/XYJK
ggplot で処理する前、または次のときに適用できます。
例えば:
library(ggplot2)
library(scales)
library(XML)
x <- eval(parse(file("http://sprunge.us/XYJK"))) # Your data
d <- data.frame(x=x,y=1:length(x))
d$z <- cumsum(d$x) / sum(d$x) # As percent
ggplot(d, aes(z,y)) + geom_line() + scale_x_continuous(label=percent)
また
library(ggplot2)
library(scales)
d <- data.frame(x=x,y=1:100)
ggplot(d, aes(cumsum(x)/sum(x),y) + geom_line() + scale_x_continuous(label=percent)
これは販売データか何かだと思います。つまり、収益の 50% は最初の 5000 件のトランザクションから発生します。
経験的 CDF を探しているように思えます。データには多くの場所で値が複製されているため、並べ替えられた値の度数分布表に基づいて経験的 CDF を作成しました。データをベクトル x にコピーしてから、次のことを行いました。
tf <- as.data.frame(table(x), stringsAsFactors = FALSE)
tf <- within(tf, {
Var1 <- as.numeric(Var1)
pct <- 100 * cumsum(Freq)/sum(Freq)
} )
ggplot(tf, aes(x = Var1, y = pct)) +
geom_step(size = 1) +
labs(x = "Value", y = "Cumulative percentage")
問題は、データが極端に右に歪んでおり、ヒストグラムが双曲線をエミュレートしているため、データの大部分が 1000 をはるかに下回り、いくつかの重大な外れ値があることです。あなたにアイデアを与えるために、
quantile(x, c(0.005, 0.01, 0.05, 0.10, 0.25, 0.5, 0.75, 0.9, 0.95, 0.99, 0.995))
0.5% 1% 5% 10% 25% 50%
1.64425 2.79850 7.54500 11.77500 21.76000 39.35000
75% 90% 95% 99% 99.5%
73.28000 398.05000 1695.78750 10499.99000 11638.55600
と
summary(tst$y)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.00 21.76 39.35 434.90 73.28 18520.00
平均は、分布の 90 パーセンタイルよりも大きいです! その文脈では、ecdf プロットが非常に有益になるとは思いません。ベクトル内の値が特定の値以下である割合を調べるには、次の小さな関数を試してください。
cumprop <- function(x, val) mean(x <= val)
cumprop(x, 1000)
cumprop(x, mean(x)) # proportion of values <= mean(x)