階段関数、経験分布関数
(グラフィックス参考実例集に戻る。Rのグラフィックスパラメータを参照する。)
R の標準ライブラリの一つである stepfun は階段関数を扱うライブラリで、特に経験分布関数の作図ができる。関数 stepfun, ecdf は関数を返す関数である。plot 関数はクラス stepfun (階段状関数) とクラス ecdf (経験分布関数) のオブジェクトからそのグラフを描く(実際は関数 plot.stepfun が呼び出される)。
R の標準ライブラリの一つである stepfun は階段関数を扱うライブラリで、特に経験分布関数の作図ができる。
Fn(t) = #{x_i <= t} / n = 1/n sum(i=1,n) Indicator(xi <= t).
返り値 クラス "ecdf" の関数で、"stepfun" クラスを継承する。
> sf <- ecdf(sort(runif(15))) # ecdf そして stepfun は実際は関数である > sf(0.23) [1] 0.2666667
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
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')
library(stepfun) # ライブラリ stepfun を読み込み plot.ecdf(rnorm(24)) # 自動的に ecdf(.) を呼び出す
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' の場合で右連続となる。
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))