web-dev-qa-db-ja.com

累積頻度分布をggplotでプロットする簡単な方法は?

私はggplotで累積分布線を描く簡単な方法を探しています。

ヒストグラムをすぐに表示できるデータがある

qplot (mydata, binwidth=1);

私は http://www.r-tutor.com/elementary-statistics/quantitative-data/cumulative-frequency-graph でそれを行う方法を見つけましたが、それはいくつかのステップを含み、データを探索するときそれは時間がかかる。

オプションを指定してトレンドラインと信頼区間を追加する方法と同様に、ggplotでより簡単な方法でそれを行う方法はありますか?

30

Rには組み込みのecdf()関数があり、これにより物事が簡単になります。 plyrを利用したサンプルコードを次に示します

library(plyr)
data(iris)

## Ecdf over all species
iris.all <- summarize(iris, Sepal.Length = unique(Sepal.Length), 
                            ecdf = ecdf(Sepal.Length)(unique(Sepal.Length)))

ggplot(iris.all, aes(Sepal.Length, ecdf)) + geom_step()

#Ecdf within species
iris.species <- ddply(iris, .(Species), summarize,
                            Sepal.Length = unique(Sepal.Length),
                            ecdf = ecdf(Sepal.Length)(unique(Sepal.Length)))

ggplot(iris.species, aes(Sepal.Length, ecdf, color = Species)) + geom_step()

編集累積頻度が必要なことに気づきました。これは、ecdf値に観測の総数を掛けることで得られます。

iris.all <- summarize(iris, Sepal.Length = unique(Sepal.Length), 
                            ecdf = ecdf(Sepal.Length)(unique(Sepal.Length)) * length(Sepal.Length))

iris.species <- ddply(iris, .(Species), summarize,
                            Sepal.Length = unique(Sepal.Length),
                            ecdf = ecdf(Sepal.Length)(unique(Sepal.Length))*length(Sepal.Length))
24
JoFrhwld

新しいバージョンのggplot2(0.9.2.1)には組み込みの stat_ecdf() 関数があり、累積分布を非常に簡単にプロットできます。

qplot(rnorm(1000), stat = "ecdf", geom = "step")

または

df <- data.frame(x = c(rnorm(100, 0, 3), rnorm(100, 0, 10)),
             g = gl(2, 100))
ggplot(df, aes(x, colour = g)) + stat_ecdf()

Ggplot2ドキュメントからのコードサンプル。

55
Chris

さらに簡単:

qplot(unique(mydata), ecdf(mydata)(unique(mydata))*length(mydata), geom='step')
21
Yang