top of page

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)")

© 2023 por EDSON Z. MARTINEZ. Orgulhosamente criado com Wix.com

  • Instagram
  • White Google+ Icon

.

bottom of page