<< 目次へ
最終更新日 : 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")