正規分布の色塗り (polygon関数 )

polygon関数
例)y = 2*x
(x,y)=(0,0), (2,0), (2,4)の△を塗りつぶす場合

x <- 0:5
y <- 2*x
plot(x, y)

# c(x軸, y軸, 色)
polygon(
    c(0, 1, 2, 2, 1, 0),
    c(0, 0, 0, 4, 2, 0),
    col = "gray"
)  

#三角形なので、のように書いても同じです
polygon(
    c(0, 2, 2, 0),
    c(0, 0, 4, 0),
    col="gray"
)

正規分布 N(2, 0.5^2)のグラフに色を塗ります(0<x<1.5)

x1seq <- seq(0, 5, length=100)

plot(
    x1seq,
    dnorm(x1seq,2, 0.5),
    type="l"
)

x2seq <- seq(0, 1.5, length=100)
y <- dnorm(x2seq, 2, 0.5)

polygon(
    c(x2seq, rev(x2seq)),
    c(rep(0, length(x2seq)),
    rev(y)),
    col="gray"
)

x軸のメモリを書き替える操作方法

plot(
    dnorm, 
    -4, 4, 
    xaxt="n"
)

# -4以上-1.96以下 領域をx軸方向に10個の多角形(台形)に等分割
xvals <- seq(-4, -1.96, length=10) 
# y軸       
dvals <- dnorm(xvals)    

# x軸 c(c(xvals), rep(0,10)) を指定、次に曲線c(rev(xvals), rev(dvals))を指定
# polygon関数の上記の点で囲まれた内側を塗ってくれます

polygon(
    c(xvals,rev(xvals)),
    c(rep(0,10),rev(dvals)),
    col=5
)       

xvals2 <- seq(1.96, 4, length=10)        
dvals2 <- dnorm(xvals2)  
 
polygon(
    c(xvals2, rev(xvals2)),
    c(rep(0, 10),
    rev(dvals2)),
    col=5
) 

name<-c("-1.96", "0", "1.96")
axis(
    side=1, 
    at=c(-1.96,0,1.96),
    labels=name
)  

x軸のメモリを書き替える操作方法2(平均が0でない場合)
N(45, 10^2)におけるz<40の確率を塗りつぶします

pn <- pnorm(40, mean=45, sd=10)

par(ps=15)
plot(
    dnorm, 
    -4, 4, 
    xaxt="n", 
    xlab="N(45,10^2)"
)

# -4以上40以下 領域をx軸方向に10個の多角形(台形)に等分割
xvals <- seq( -4, qnorm(pn), length=100) 
# y軸
dvals <- dnorm(xvals) 

polygon(
    c(xvals,rev(xvals)),
    c(rep(0,100),
    rev(dvals)),
    col=7) 

name <- c("40")
axis(
    side=1,
    at=c(qnorm(pn)),
    labels=name
)  

ダメ出し 間違い、分かりにくい部分などのご意見をお待ちします

タイトルとURLをコピーしました