R- Отображение области под кривой между двумя значениями z в стандартном нормальном распределении - PullRequest
0 голосов
/ 29 сентября 2019

Я пытаюсь нарисовать эскиз примерно так: где я могу обозначить область под кривой слева / справа от значения z-балла в стандартное нормальное распределение Я пытаюсь создать аналогичный график, но этотвремя хотите отобразить все области в -2.25<Z<1.77 двумя строками?Я искал так много мест, но не могу найти ответ, и mosaic::xpnorm(), кажется, самый близкий, но я не думаю, что у него есть возможность для этого.

library(mosaic)
xpnorm(1.77, mean=0, sd=1)

pic

1 Ответ

0 голосов
/ 29 сентября 2019

Мы можем использовать polygon() для окрашивания областей под кривой.polygon() нужна двумерная матрица координат точек многоугольника, где она рисует прямые линии между этими точками.На самом деле их число равно бесконечности, но функция будет достаточно сглаживаться выше определенного числа, то есть нам нужна последовательность длины, скажем, 200.Для матрицы координат нам нужны значения x и соответствующие им значения y=dnorm(x).

# given z values
z.rg <- c(-2.25, 1.77)

# define cuts and canonical z-scores
cuts <- sort(sort(c(z.rg, -3.5, 3.5)))  # c(-3.5, 3.5) will be the xlim of the plot
x.sq <- seq(cuts[1], cuts[4], len=200)
alpha <- c(.001, .01, .05)
z <- c(qnorm(alpha/2), 0, abs(qnorm(alpha/2)))

# plot
plot(x.sq, dnorm(x.sq), type="l", xlab="z-score", ylab="density", 
     main="Standard Normal Distribution", xaxt="n")
z <- c(qnorm(alpha/2), 0, abs(qnorm(alpha/2)))
axis(1, z, round(z, 2))
abline(h=0)
# random middle part (optional)
polygon(c(cuts[2], cuts[2], x.sq[x.sq > cuts[2] & x.sq < cuts[3]], cuts[3], cuts[3]),
        c(0, dnorm(cuts[2]), dnorm(x.sq[x.sq > cuts[2] & x.sq < cuts[3]]), dnorm(cuts[3]), 0),
        col="lightgrey", border=1)
# left tail
polygon(c(cuts[3], cuts[3], x.sq[x.sq > cuts[3]], cuts[4], cuts[4]),
        c(0, dnorm(cuts[3]), dnorm(x.sq[x.sq > cuts[3]]), dnorm(cuts[4]), 0),
        col="#4da6ff", border=1)
# right tail
polygon(c(cuts[1], cuts[1], x.sq[x.sq < cuts[2]], cuts[2], cuts[2]),
        c(0, dnorm(cuts[1]), dnorm(x.sq[x.sq < cuts[2]]), dnorm(cuts[2]), 0),
        col="#4da6ff", border=4)
# labels
arrows(z.rg, rep(dnorm(z.rg), length(z.rg)), z.rg, rep(dnorm(0)*.666, length(z.rg)),
       length=0, lty=2, col=4)
sapply(z.rg, function(x) text(x, dnorm(0)*.666 + .02, bquote(italic("z=")~.(x)), col=4))

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...