R言語

【R言語】経験密度関数・経験分布関数のプロット 関数densityとecdfの使い方

  1. HOME >
  2. R言語 >

【R言語】経験密度関数・経験分布関数のプロット 関数densityとecdfの使い方

スポンサーリンク

R言語で経験密度関数と経験分布関数を求める方法及びグラフを描画する方法を解説していきます。

この記事では経験密度関数と分布関数を計算する関数とその使用例について見ていきます。

記事で扱うスクリプトは以下からダウントードできます。

経験密度関数と経験分布関数

経験分布を計算する関数を紹介します。

経験密度関数と経験分布関数のための関数をいかにまとめました。

経験密度関数

経験密度関数を計算するには次の関数densityを用います。

デフォルトでガウスカーネルの下での経験密度を計算することができ、引数 によってカーネルを変更することもできます。

density(x, …)

# S3 method for default
density(x, bw = "nrd0", adjust = 1, kernel = c("gaussian", "epanechnikov", "rectangular", "triangular", "biweight", "cosine", "optcosine"), weights = NULL, window = kernel, width, give.Rkern = FALSE, n = 512, from, to, cut = 3, na.rm = FALSE, …)

関数densityの引数
引数説明
x経験密度を計算するデータ。
bwカーネル平滑化のパラメーター。
adjustカーネル平滑化のパラメーターを補正する値。パラメータは正確には、adjust × bwで計算される。
kernel, windowcharacter型。平滑化に用いるカーネルを決定する。"gaussian", "rectangular", "triangular", "epanechnikov", "biweight", "cosine", "optcosine"を選択できる。
weight非負のnumeric型のベクトル。観測値の重みを表す。
widthwidthが与えられていてbwが与えられていない場合、bwがwidthの値で与えられる。
give.Rkernlogical型。TRUEの場合、密度は推定されない。代わりに選択したkernelのcanonical bandwidthが返される。
n経験密度を推定する等間隔点の数。
from,to経験密度を計算する範囲。デフォルトだとcut × bw。
cutfrom,toの範囲に関係するパラメーター。経験密度の裾が0になるようにする。
na.rmlogical型。TRUEのとき欠測値はxから除外される。
...他のメソッドに渡す引数。

経験分布関数

経験分布関数を計算するには関数ecdfを用います。

ecdf(x)

# S3 method for ecdf
plot(x, …, ylab="Fn(x)", verticals = FALSE, col.01line = "gray70", pch = 19)

# S3 method for ecdf
print(x, digits= getOption("digits") - 2, …)

# S3 method for ecdf
summary(object, …) # S3 method for ecdf quantile(x, …)

関数ecdfや関連する関数の引数は以下の通り。

関数densityの引数
引数説明
x, objectxはnumeric型の観測値から成るベクトル。objectはecdfから継承されるオブジェクト。
...plotに渡す引数。
ylaby軸のラベル。
verticalslogical型。経験分布関数の縦線を描くかどうか。
col.01liney=0とy=1の横線の色を表すnumericまたはcharacter型。
pch点の形を指定する。
digits有効数字を表す値。

実行例

実際にRで経験密度関数と経験分布関数を計算していきます。

計算した経験分布のグラフを描画するためにパッケージggplot2を用います。事前にインストールしておいてください。

経験分布の計算とプロット

次のquakes(地震)のデータについて経験分布を求めたいと思います。

quakesmagについてヒストグラムを描くと次のようになります。

 

magの経験分布を計算していきたいと思います。

経験密度関数を計算するには関数density、経験分布関数を計算するには関数ecdfを用います。

次のように関数の引数に経験分布を求めたいデータを渡すことで、そのデータの経験分布を得ることができます。

density_quakesは次のようにxやyなどの経験密度関数の引数とそれに対応する経験密度などが格納されています。

経験密度を得るには次のようにdensity_quakesの後ろにxとyをつけます。

_quakes$x #経験密度関数の引数 > epdf_y_quakes <- density_quakes$y #xに対応する経験密度 > > head(epdf_x_quakes) [1] 3.726836 3.732601 3.738367 3.744133 3.749899 3.755665 > > head(epdf_y_quake) [1] 0.002341667 0.002829994 0.003400496 0.004063127 0.004858902 0.005791372

ecdf_quakesは関数として与えられており、次のようにecdf_quakes(x)の形で経験分布関数を計算することができます。

続いて、経験分布のプロット方法について見ていきます。

plotを用いることで簡単に経験密度関数と経験分布関数を描画することができます。

magの経験密度関数

階段形式の経験分布関数を描きたいときは、引数verticalsをTRUE、do.pをFALSEにします。

magの経験分布関数

magの経験分布関数(階段)

計算した経験密度をggplotでプロットするには、次のように関数geom_lineやgeom_ribbonを使います。

magの経験密度関数(ggplot2)

また、ggplot2で用意されているgeom_densityでも経験密度をプロットすることができます。

実際のデータの最小値から最大値までの密度が描かれます。

magの経験密度関数(geom_density)

経験分布関数をggplotでプロットするには、関数geom_stepを使います。

eom_stepは最小のxと対応するyの座標からプロットし始めるため、 xの最小値から0.1差し引いたところからプロットするようにデータを調整しています。

magの経験分布関数(ggplot2)

また、ggplot2にはstat_ecdfという経験分布関数を描画する関数があり、こちらでも同様のグラフを描くことができます。

magの経験分布関数(geom_ecdf)

多群の場合

次に多群(複数の因子をもつ)のデータの経験分布の計算とプロットの仕方について紹介します。

データセットとして次のirisを使います。

SpeciesSepal.Lengthのヒストグラムは次のようになります。

下図のヒストグラムを持つSepal.Lengthについて、経験密度関数と分布関数を計算していきたいと思います。

Sepal.Lengthのヒストグラム

Speciesの値ごとにSepal.Lengthの経験分布を計算するには、次のようにtapplyを用いると便利です。

factorのレベルごとに関数を適用することで、各Speciesごとの経験密度関数と経験分布関数を計算しています。

計算した経験密度関数はそれぞれ次の通りです。

例としてsetosaのSepal.Lengthの経験分布の計算結果のみ載せています。他のSpeciesについても同様に計算できます。

経験分布関数は次の通りです。

最後に多群の場合の経験分布のプロット方法について見ていきます。

ggplotで経験密度関数と経験分布関数をプロットするには、上で紹介したように、それぞれ関数geom_densitystat_ecdfを使います。

Sepal.Lengthの経験密度関数(geom_density)

Sepal.Lengthの経験分布関数(stat_ecdf)

また、上で計算した経験密度と経験分布を基にggplotでプロットしたい場合は、次のようにデータを加工するプロセスが必要になります。

Sepal.Lengthの経験密度関数(ggplot2)

Sepal.Lengthの経験分布関数(ggplot2)

まとめ

R言語で経験分布を計算する関数とその使用例について紹介しました。

経験密度関数を計算するには関数density、経験分布関数を計算するには関数ecdfを用います。

スポンサーリンク

  • この記事を書いた人
  • 最新記事

usagi-san

統計学とゲームとかをメインに解説していくよ。 数式とかプログラミングコードにミスがあったり質問があったりする場合はコメントで受け付けます。すぐに対応します。

-R言語
-, , ,