9.2 Distribuições aleatórias
O R disponibiliza um conjunto um conjunto de funções para gerar densidade, distribuição cumulativa, quantis e geração aleatória de variáveis com diferentes distribuições de probabilidade (veja a seção Para saber mais para mais informações).
Aqui vamos conhecer as funções que geram variáveis aleatórias para duas distribuições probabilísticas:
# veja no R o help para as funções para as diferentes distribuições disponíveis no R.
?Distributions
9.2.1 Distribuição Normal
Segundo as companhias aéreas dos EUA, a largura dos quadris dos homens norte-americanos segue uma curva normal, com média de 14.4 polegadas, e desvio-padrão de 1 polegada.
9.2.1.1 rnorm()
Esta função permite gerar essa distribuição de valores aleatórios que seguem uma distribuição normal se soubermos a média e o desvio padrão.
# veja o help da função ?rnorm
<- 14.4
amedia <- 1
osd # vamos gerar 1000 valores aleatórios com essa distribuição
<- rnorm(n = 1000, mean = amedia, sd = osd)
quadris # visualizando essa distribuição de valores
hist(quadris)
# ou visualizando a densidade probabilística dessa distribuição
hist(quadris, probability = T)
# a linha da densidade
lines(stats::density(quadris), col = "red", lwd = 2)
9.2.1.2 pnorm()
Esta função permite responder à pergunta:
Qual percentual de pessoas não cabe em um assento de 15 polegadas?
# veja o help dessa função
?pnorm
# qual o percentil/quantil da distribuição que é maior que 15 polegadas
# quem não cabe no assento?
<- pnorm(q = 15, mean = 14.4, sd = 1, lower.tail = F)
qMaior15in # note o argumento lower.tail=F (você quer apenas o percentil que está acima desse valor)
# ca. de 27%
qMaior15in
## [1] 0.2742531
print(paste(round(qMaior15in * 100, 0), "% dos americanos não cabem em um assento de 15 polegadas", sep = ""))
## [1] "27% dos americanos não cabem em um assento de 15 polegadas"
# vamos visualizar isso
<- sort(quadris) # ordenamos os quadris
x <- dnorm(x, mean = amedia, sd = 1) # calculamos a densidade probabilística desses valores
y plot(x, y, type = "l", lwd = 2, col = "black", ylab = "Densidade Probabilística", xlab = "Quadris de americanos (inches)") # plotamos isso e temos nossa curva normal
# agora fazemos o mesmo para os quadris que satisfazem a condicao
abline(v = 15, lwd = 2, col = "blue") # o quadril da pergunta
<- sort(quadris[quadris >= 15])
xx <- dnorm(xx, mean = amedia, sd = 1)
yy # adicionamos isso na forma de um polígono
# coordenadas X do polígono (note que adicionei valores para poder fechar o polígono)
<- c(15, xx, max(xx), 15)
xxp # e adiciono também no eixo y
<- c(0, yy, 0, 0)
yyp # desenho o polígono correspondente
polygon(xxp, yyp, col = "red")
## a area desse polígono representa esse quantil
# (i.e. a porcentagem da população que tem quadril >= 15)
9.2.1.3 qnorm()
Esta função permite responder à pergunta:
Qual largura de assento garante que 95% da população caberá?
# agora fazemos o inverso da função pnorm, ao inves de informar o quantil,
# informamos o percentil
qnorm(p = 0.95, mean = 14.4, sd = 1)
## [1] 16.04485
# este é o tamanho do assento que inclui 95% dos valores
# numa distribuição normal com essa média e esse desvio padrão
<- qnorm(p = 0.95, mean = 14.4, sd = 1)
tamanho95 # graficando isso?
hist(quadris, prob = T)
# limite de tamanho
abline(v = tamanho95, col = "blue", lwd = 2, lty = "dashed")
# plota valores que estao dentro dessa distribuicao
hist(quadris[quadris < tamanho95], prob = T, add = T, col = "red")
9.2.1.4 dnorm()
A função dnorm()
gera a densidade probabilística para um conjunto de valores, tendo em vista uma distribuição normal de mesma média e mesmo desvio padrão.
Podemos responder à pergunta:
Qual a densidade probabilística para um valor de quadril de 12 polegadas? Ou seja, qual a probabilidade de amostrar na população uma pessoa com quadril de 12 polegadas?
<- dnorm(x = 12, mean = 14.4, sd = 1)
dq12 dq12
## [1] 0.02239453
# mostra na figura
# plota a densidade probabilística
hist(quadris, prob = T)
# coloca a linha
lines(stats::density(quadris), col = "red", lwd = 2)
# adicona um ponto que mostra a probabilidade do valor
points(x = 12, y = dq12, pch = 21, bg = "blue")
segments(0, dq12, 12, dq12, lty = "dotted", col = "blue", lwd = 2)
axis(side = 2, at = dq12, labels = paste(round(dq12 * 100, 0), "%", sep = ""), line = NULL, las = 2, col = "blue")