<< 目次へ
最終更新日 : 2008.10.24
分布のプロット(正規分布、t分布、F分布、χ2分布)
引数に"norm", "t", "chisq", "F"のいずれかを指定するだけで簡単に分布曲線が描かれます。描こうとする分布によっては、x軸の値が適当でないこともあるので、その場合は引数myself = TRUEとすることによって分布を描くための関数自体が返されます。
my.dist <- function(dist, myself="FALSE"){ if(dist=="norm"){ cat("正規分布には平均と標準偏差が必要です。", "\n") MEAN <- as.numeric(readline("Mean : ")) SD <- as.numeric(readline("S.D. : ")) my.norm <- function(x) dnorm(x, mean=MEAN, sd=SD) lower <- MEAN-4*SD upper <- MEAN+4*SD if(myself=="TRUE"){ #TRUEの場合は関数自体が返される。 my.norm }else{ #それ以外の場合は自動的にプロットされる。 plot(my.norm, xlim=c(lower, upper)) abline(h=0) } }else if(dist=="t"){ cat("t分布には1つの自由度が必要です。", "\n") DF <- as.numeric(readline("DF : ")) my.t <- function(x) dt(x, df=DF) lower <- qt(0.000001, DF) upper <- qt(0.999999, DF) if(myself=="TRUE"){ my.t }else{ plot(my.t, xlim=c(lower, upper)) abline(h=0) } }else if(dist=="F"){ cat("F分布には2つの自由度が必要です。", "\n") DF1 <- as.numeric(readline("DF1 : ")) DF2 <- as.numeric(readline("DF2 : ")) my.F <- function(x) df(x, df1=DF1, df2=DF2) lower = qf(0.000001, DF1, DF2) upper = qf(0.9, DF1, DF2) if(myself=="TRUE"){ my.F }else{ plot(my.F, lower, upper) abline(h=0) } }else if(dist=="chisq"){ cat("カイ自乗分布には1つの自由度が必要です。", "\n") DF <- as.numeric(readline("DF : ")) my.chisq <- function(x) dchisq(x, df=DF) lower <- qchisq(0.000001, DF) upper <- qchisq(0.9, DF) if(myself=="TRUE"){ my.chisq }else{ plot(my.chisq, lower, upper) abline(h=0) } }else{ cat("引数distに指定できるのはnorm, t, F, chisqのみです。", "\n") } }
Example 1 正規分布を描く
# 平均20、標準偏差5の正規分布を描く > my.dist("norm") 正規分布には平均と標準偏差が必要です。 Mean : 20 # 平均値を入力してEnterを押します S.D. : 5 # 標準偏差を入力してEnterを押します # myself=TRUEとする場合(自分で描く場合): > d <- my.dist("norm", myself=TRUE) 正規分布には平均と標準偏差が必要です。 Mean : 20 S.D. : 5 > plot(d, 0, 40)
Example 2 t分布を描く
# 全てmy.dist()に任せる場合: > my.dist("t") t分布には1つの自由度が必要です。 DF : 19 # 自分で描く場合: > d <- my.dist("t", myself=TRUE) t分布には1つの自由度が必要です。 DF : 19 > plot(d, -4, 4)
Example 3 F分布を描く
# 全てmy.dist()に任せる場合: > my.dist("F") F分布には2つの自由度が必要です。 DF1 : 3 DF2 : 12 # 自分で描く場合: > d <- my.dist("F", myself=TRUE) F分布には2つの自由度が必要です。 DF1 : 3 DF2 : 12 > plot(d, 0, 5)
Example 4 χ2分布を描く
# 全てmy.dist()に任せる場合: > my.dist("chisq") カイ自乗分布には1つの自由度が必要です。 DF : 19 # 自分で描く場合: > d <- my.dist("chisq", myself=TRUE) カイ自乗分布には1つの自由度が必要です。 DF : 19 > plot(d, 4, 50)
■ どんな分布でも簡単に色塗りできる関数
my.paint <- function(f.name, x1, x2, color){ xvals <- seq(x1, x2, length=50) dvals <- c(f.name(xvals), 0, 0) xvals <- c(xvals, x2, x1) polygon(xvals, dvals, col=color) }
〜使い方〜
例えば、自由度19のχ2分布において、20から30までの範囲を塗りつぶしてみる。
# 分布曲線を描くための関数をdに代入しておく > d <- my.dist("chisq", myself=TRUE) カイ自乗分布には1つの自由度が必要です。 DF : 19 # 自由度19のカイ自乗分布を描く > plot(d, 4, 50) # 引数f.nameには関数が格納されている変数を指定する # x1, x2にはそれぞれ塗りつぶしの始点と終点を指定する # colには任意の色を指定できる > my.paint(d, 10, 30, col="snow3")