Bioestatística
Prof. Dr. Edson Zangiacomi Martinez
Faculdade de Medicina de Ribeirão Preto
Universidade de São Paulo (USP)
Esta página está em construção!
Todo seu conteúdo não é definitivo...
Distribuição normal
Verificando pressupostos de normalidade
Outras distribuições
Distribuição normal
Seja X uma variável aleatória que segue uma distribuição normal com média m e desvio padrão s.
Seja, por exemplo, m = 0 e s = 1. Neste caso, definimos a distribuição normal padrão Z ~ N(0;1).
# Se Z ~ N(0;1), retorna P(Z<2)
pnorm(2)
[1] 0.9772499
# Se Z ~ N(0;1), retorna P(Z<0)
pnorm(0)
[1] 0.5
# Se Z ~ N(0;1), retorna P(Z>1.8)
1-pnorm(1.8)
[1] 0.03593032
# Se Z ~ N(0;1), retorna k tal que P(Z>k) = 0.8
qnorm(0.8)
[1] 0.8416212
# Se X ~ N(45;4), retorna P(X<40)
pnorm(40,45,4)
[1] 0.1056498
# Retorna 100 valores de uma variável aleatória que segue uma distribuição normal com média 56 e desvio padrão 2
x <- rnorm(100,56,2)
# Se for necessário gerar mais de uma vez uma mesma sequência de números aleatórios, usar set.seed(k), sendo k um número arbitrário
set.seed(876)
Se X é uma variável aleatória que segue uma distribuição normal com média m e desvio padrão s > 0, seja f(x) a função densidade de probabilidade de X, dada por
para valores reais de x.
# Se X ~ N(45;4), retorna f(40)
dnorm(40,45,4)
[1] 0.04566227
# Gráfico da função densidade de probabilidade
x <- seq(30,60,0.1)
plot(dnorm(x,45,4),ylim=c(0,.1))
# Um gráfico mais adequado:
plot(dnorm(x,45,4),ylim=c(0,.1),type="l",bty="l",lwd=2,col="red",ylab="Densidade",xlab="")
# Calculando áreas sob a curva normal:
graficonormal<-function(mu=0,sd=1,a=-2,b=2) {
if (a>=b) {stop("Insira valores a<b")}
x<-seq(mu-4*sd,mu+4*sd,0.1)
xs<-seq(a,b,0.1)
xy<-dnorm(xs,mu,sd)
plot(x,dnorm(x,mu,sd),type="n",ylab="Densidade",xlab="",axes=F,
ylim=c(0,dnorm(mu,mu,sd)),xlim=c(mu-5*sd,mu+5*sd))
axis(2)
axis(1,pos=0)
polygon(x=c(xs,rev(xs)),y=c(xy,rep(0,length(xs))),col="gray", border=NA)
points(x,dnorm(x,mu,sd),type="l",lwd=2,col="red")
lines(c(a,a),c(dnorm(a,mu,sd),-1),lty=3,col="blue")
lines(c(b,b),c(dnorm(b,mu,sd),-1),lty=3,col="blue")
mtext(side=1,line=1,at=a,a,col="blue")
mtext(side=1,line=1,at=b,b,col="blue")
prob<-pnorm(b,mu,sd)-pnorm(a,mu,sd)
mtext(side=1,line=3,paste("Área sob a curva =",round(prob,4)))
}
graficonormal(80,2,78,83)
Verificando pressupostos de normalidade
Como exemplo, clicar aqui para acessar o banco de dados em Excel
Podemos abrir o banco de dados no programa R usando, por exemplo, a função read_excel() do pacote readxl
# Usando o pacote readxl
install.packages("readxl") # Esta linha é desnecessária, caso o pacote readxl já esteja instalado
library(readxl)
dados <- read_excel("E:\\Aulas\\R\\Dados aula 3 ex 2.xlsx")
dados
# A tibble: 40 x 9
Numero Idade ecivil Tabagismo idade1filho Partos Peso Altura esaude
<dbl> <dbl> <chr> <chr> <chr> <dbl> <dbl> <dbl> <chr>
1 1 51 casada nao 26 3 74.6 1.59 bom
2 2 48 casada nao 20 2 53.3 1.51 bom
3 3 57 casada nao 20 3 64.0 1.63 bom
4 4 48 casada sim 21 3 68.6 1.58 regular
5 5 49 casada nao 28 1 77.9 1.52 bom
6 6 47 casada nao 15 3 59.9 1.52 bom
7 7 49 casada nao 19 3 64.0 1.64 regular
8 8 52 casada nao 30 1 70.5 1.66 regular
9 9 45 casada nao 27 1 72.6 1.53 bom
10 10 64 casada nao 20 2 66.0 1.50 bom
# ... with 30 more rows
attach(dados)
IMC<-Peso/(Altura^2)
# Histograma para o IMC
hist(IMC,col="gray",main="Histograma do IMC")
# Gráfico de probabilidade normal
qqnorm(IMC,pch=19)
qqline(IMC, lty = 2, col = "red") # Traça uma linha "de referência"
# Teste de Kolmogorov-Smirnov
ks.test(IMC, "pnorm", mean(IMC), sd(IMC))
One-sample Kolmogorov-Smirnov test
data: IMC
D = 0.12961, p-value = 0.4733
alternative hypothesis: two-sided
# Teste de Shapiro-Wilk
shapiro.test(IMC)
Shapiro-Wilk normality test
data: IMC
W = 0.85667, p-value = 0.0001312
# Gráfico de probabilidade normal com envelope
qqnormenvelope <- function(x,nsim=1000,conf=0.95,lab="Dados observados", cor="red") {
n <- length(x)
dadossim <- matrix(rnorm(n * nsim, mean = mean(x), sd = sd(x)), nrow = n)
dadossim <- apply(dadossim, 2, sort)
infsup <- apply(dadossim, 1, quantile, probs = c((1 - conf)/2, (1 + conf)/2))
xbsim <- rowMeans(dadossim)
faixay <- range(x, dadossim)
qq0 <- qqnorm(x, main = "", xlab = "Quantis teóricos N(0,1)", pch = 20, ylab = lab, ylim = faixay)
eixox <- sort(qq0$x)
lines(eixox, xbsim,col=cor)
lines(eixox, infsup[1,],col=cor)
lines(eixox, infsup[2,],col=cor)
}
qqnormenvelope(IMC)
Outras distribuições de probabilidade
Nas funções da tabela anterior, preencher a lacuna __ com p, q, r ou d.
p: retorna P(X < x) , ou P(X ≤ x) no caso das distribuições discretas
q: retorna k tal que a probabilidade P(X ≤ k) é informada
r: gera valores aleatórios de uma variável que segue a distribuição especificada
d: retorna a função densidade de probabilidade f(x), se a distribuição é contínua, ou a função de probabilidade f(x) = P(x=x), se a distribuição é discreta
# Exemplo, distribuição Beta(2,8)
x<-seq(0,1,0.01)
plot(x,dbeta(x,2,8),type="l",bty="l",lwd=2,col="red",ylab="Densidade",xlab="",main="Distribuição Beta(2,8)")
# Exemplo, gerando n = 200 observações de uma distribuição exponencial com parâmetro igual a 3
x <- rexp(200,3)
hist(x,col="gray",main="200 observações de uma variável X ~ Exp(3)")