階段関数、経験分布関数

(グラフィックス参考実例集に戻る。Rのグラフィックスパラメータを参照する。)

R の標準ライブラリの一つである stepfun は階段関数を扱うライブラリで、特に経験分布関数の作図ができる。関数 stepfun, ecdf は関数を返す関数である。plot 関数はクラス stepfun (階段状関数) とクラス ecdf (経験分布関数) のオブジェクトからそのグラフを描く(実際は関数 plot.stepfun が呼び出される)。


データから経験分布関数を計算する関数 ecdf()

R の標準ライブラリの一つである stepfun は階段関数を扱うライブラリで、特に経験分布関数の作図ができる。

  • 用法
    • ecdf(x) 数値データをクラス "ecdf" のオブジェクトに変換する
    • plot(x, ..., ylab="Fn(x)", verticals = FALSE, col.01line = "gray70")
    • print(x, digits= getOption("digits") - 2, ...)
  • 引数
    • x クラス ecdf の観測値数値ベクトル
    • ... 'plot.stepfun' に引き渡される追加引数
    • ylab y-軸ラベル
    • verticals 'plot.stepfun' を見よ
    • ol.01line 線 y=0, y=1 に引かれる水平線の色を与える数値もしくは文字
    • digits 用いられる有効数字桁数
  • 詳細
    • e.c.d.f. (累積経験分布関数, empirical cumulative distribution function) Fn は観測値で 1/n づつジャンプする階段状関数で、タイ(同じ値の観測値)があれば、その分重複してジャンプする。観測値 'x'= (x1,x2, ... xn) に対して Fn は t 以下の値をもつ関数の割合である、つまり
Fn(t) = #{x_i <= t} / n  =  1/n sum(i=1,n) Indicator(xi <= t).
  • 関数 'plot.ecdf' は "ecdf" オブジェクトに対する 'plot' メソッドで 'plot.stepfun' を呼び出す。

返り値 クラス "ecdf" の関数で、"stepfun" クラスを継承する。

例1

> sf <- ecdf(sort(runif(15))) # ecdf そして stepfun は実際は関数である
> sf(0.23)
[1] 0.2666667

例2

library(stepfun) # ライブラリ stepfun を読み込み   
y <- round(rnorm(12),1); y[3] <- y[1] # 参考データ(わざとタイを作る)
Fn12 <- ecdf(y) # クラス ecdf のオブジェクトに変換
par(mfrow=c(3,1), mgp=c(1.5, 0.8,0), mar= .1+c(3,3,2,1)) # 画面三分割
F10 <- ecdf(rnorm(10)) # もう一つの参考データ
plot(F10)
plot(F10, verticals= TRUE, do.p = FALSE)
plot(Fn12)# , lwd=2) dis-regarded
 left

例3

library(stepfun) # ライブラリ stepfun を読み込み   
xx <- unique(sort(c(seq(-3,2, length=201), knots(Fn12))))
lines(xx, Fn12(xx), col='blue')
abline(v=knots(Fn12),lty=2,col='gray70')
plot(xx, Fn12(xx), type='b', cex=.1) #- plot.default
plot(Fn12, col.h='red', add= TRUE)  # データ位置に縦線を加える
abline(v=knots(Fn12),lty=2,col='gray70')
plot(Fn12, verticals=TRUE, col.p='blue', col.h='red',col.v='bisque')
 left

例4

library(stepfun) # ライブラリ stepfun を読み込み   
plot.ecdf(rnorm(24)) # 自動的に ecdf(.) を呼び出す
 left

与えられた結び目を通る階段関数を計算する stepfun() 関数

  • 説明 ベクトル (x[1],..., x[n]) と (y[0],y[1],..., y[n]) (y の方が一つ長さが長い) を与えた時、stepfun(x,y,...) は x,y を「補間する階段関数」fn を計算する。つまり
    fn(t) = c[i] (定数) for t in (x[i], x[i+1])
    fn(x[i]) = y[i]  'right = FALSE' (既定)のとき、
    fn(x[i]) = y[i-1] 'right = TRUE' の時

定数 c[i] の値は「連続性パラメータ」f に依存する。既定である 'right = FALSE, f = 0' では関数は cadlag (左連続) となる。一般には c[i] は c[i] = (1-f)*y[i] + f*y[i+1] と補間される。零以外の f 値では、関数は区切り点の左右から不連続となり、本来の意味での階段関数には、ならない、例外は 'right = TRUE, f = 1' の場合で右連続となる。

  • 使用法
    • stepfun(x, y, f = as.numeric(right), ties = "ordered", right = FALSE)
    • is.stepfun(x)
    • knots(Fn, ...)
    • as.stepfun(x, ...)
    • print(x, digits = getOption("digits") - 2, ...)
    • summary(object, ...)
  • 引数
    • x ジャンプ点を表す数値ベクトル。
    • y x より一つ長い数値ベクトル。x の値の間の関数の値を与える。
    • f 0 と 1 の間の値。境界での y 値の補間方法を与える。
    • ties x のタイ値の扱い。処理方法を与える関数名か、文字列 '"ordered"'
    • right 論理値。各区間が右に閉(そして左に開)か、またはその逆か。
    • Fn '"stepfun"' を継承する R オブジェクト
    • digits 有効数字桁数
    • ... 潜在的に可能な追加引数(構文的に必要)
  • 返り値 クラス stepfun の関数。メソッド summary(.), print(.), plot(.) を持つ。 plot.stepfun を参照)。関数の環境は次のような必要なすべての情報を持つ:
    • "x", "y" 元データ
    • "n" ノット(x の長さ)数
    • "f": 連続性パラメータ
    • "yleft", "yright" ノットの外部の関数値
    • "method" 常に '== "constant"'
    • normal-bracket109bracket-normal ノットはまた 'knots(fn)' で得られる

library(stepfun)
par(mfrow=c(2,2))
x <- sort(runif(10)); y <- runif(11)
plot(stepfun(x, y, f=0))
plot(stepfun(x, y, f=0.3))
plot(stepfun(x, y, f=0.7))
plot(stepfun(x, y, f=1.0))
 left

添付ファイル: filestepfun3.jpg 2298件 [詳細] filestepfun4.jpg 2038件 [詳細] filestepfun1.jpg 2390件 [詳細] filestepfun2.jpg 2224件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Google
WWW を検索 OKADAJP.ORG を検索
Last-modified: 2015-03-01 (日) 01:15:59 (1723d)