Aula - Modelo Normal

Author

V.P.I

Aula sobre a distribuição normal

A distribuição normal modela uma infinidade de fenômenos contínuos, ou seja, que resultem em um número.

\[ X \sim N \left ( \mu, \; \sigma \right ), \]

sendo \(\mu\) o parâmetro de média e \(\sigma\) o parâmetro de desvio padrão.

A função de densidade é dada por

\[ f(x) = \frac{1}{\sqrt{2 \pi \sigma^2}} \exp \left ( - (\mu - x )^2 / 2 \sigma^2 \right ). \]

mu = 20
dp = 5

f <- function(x){
  (1/sqrt(2*pi*dp^2))*exp(-(mu-x)^2/(2*dp^2))
}

x = seq(0, 40, by=0.01)
plot(x, f(x), type='l', lwd=2, col=2)

plot(x, dnorm(x, mu, dp), type='l', lwd=2, col=2)

Vamos calcular

(a) \(P(X > 30) = 1 - P(X \leq 30)\)

1-pnorm(30, mu, dp)
[1] 0.02275013

(b) \(P(X > 38) = 1 - P(X \leq 38)\)

1-pnorm(38, mu, dp)
[1] 0.0001591086

(c) Qual a taxa de abstenção de 50% das cidades?

qnorm(0.5, mu, dp)
[1] 20
plot(x, dnorm(x, mu, dp), type='l', lwd=2, col=2)
abline(v = qnorm(0.5, mu, dp), lty=2)

(c) E a taxa de abstenção de 95% das cidades?

qnorm(0.95, mu, dp)
[1] 28.22427
plot(x, dnorm(x, mu, dp), type='l', lwd=2, col=2)
abline(v = qnorm(0.95, mu, dp), lty=2)

Funções no R sobre a distribuição normal

  • dnorm(x, mu, dp), função de densidade da normal

  • pnorm(x, mu, dp), função de distribuição acumulada \(P(X \leq x)\)

  • qnorm(x, mu, dp), percentis da distribuição normal

  • rnorm(n, mu, dp), sorteia n valores da distribuição normal

Vamos brincar de gerar valores da distribuição normal. Vamos tomar \(n = 100\).

n = 100
amostra = rnorm(n, mu, dp)
amostra
  [1] 21.88661 16.12924 11.56442 14.46830 22.82428 17.88730 22.98698 21.63674
  [9] 23.70173 26.02688 23.41527 28.57136 28.16890 15.82892 17.65672 21.41935
 [17] 14.62068 20.36562 26.50576 25.11961 18.73045 14.19042 22.82333 24.59849
 [25] 23.34013 18.12601 20.05019 22.39740 18.87472 22.16051 24.31109 19.83109
 [33] 14.96162 21.50564 22.48173 16.30661 23.34456 19.40728 17.93754 17.67995
 [41] 16.93183 23.51702 18.59956 20.25330 20.05265 22.33467 20.58829 25.29613
 [49] 16.24477 17.57794 26.87554 25.01364 19.83938 20.03653 25.59373 26.97814
 [57] 20.74070 29.05319 14.51926 28.56271 24.60288 22.84002 15.46568 13.25568
 [65] 27.00518 15.49875 23.87154 29.91664 18.87484 10.63291 22.86894 16.36668
 [73] 20.35628 18.50111 25.26929 11.54707 21.81387 15.27139 18.39724 10.26602
 [81] 13.76173 20.61249 28.71006 20.26829 28.54709 18.39273 25.93299 31.57733
 [89] 20.42824 24.25522 30.42004 19.70028 13.06402 23.65881 20.51399 12.98473
 [97] 19.01697 17.74039 22.36895 22.40105
hist(amostra)

Outra distribuição contínua importante: t-Student

\(T \sim tStudent_{\nu}\), possui o parâmetro \(\nu\) graus de liberdade.

nu = 10

x = seq(-4, 4, by=0.01)

plot(x, dt(x, nu), type='l', lwd=2, ylim=c(0,0.5))
par(new=T)
plot(x, dnorm(x, 0, 1), type='l', lwd=2, col=2, ylim=c(0,0.5))

pt(-2, nu)
[1] 0.03669402
pnorm(-2)
[1] 0.02275013

Entramos no final da aula na onde de ver os retorno das ações da Petrobrás. E ficou lindo…

library(quantmod)
Warning: pacote 'quantmod' foi compilado no R versão 4.4.3
Carregando pacotes exigidos: xts
Warning: pacote 'xts' foi compilado no R versão 4.4.3
Carregando pacotes exigidos: zoo
Warning: pacote 'zoo' foi compilado no R versão 4.4.3

Anexando pacote: 'zoo'
Os seguintes objetos são mascarados por 'package:base':

    as.Date, as.Date.numeric
Carregando pacotes exigidos: TTR
Warning: pacote 'TTR' foi compilado no R versão 4.4.3
Registered S3 method overwritten by 'quantmod':
  method            from
  as.zoo.data.frame zoo 
ticker <- "PETR4.SA"
from_date <- "2023-01-01"
to_date <- Sys.Date()

# Usando getSymbols — os dados serão atribuídos automaticamente a um objeto chamado PETR4.SA
getSymbols(ticker,
           src   = "yahoo",
           from  = from_date,
           to    = to_date,
           auto.assign = TRUE)
[1] "PETR4.SA"
# Depois de executar, você pode checar:
head(PETR4.SA)
           PETR4.SA.Open PETR4.SA.High PETR4.SA.Low PETR4.SA.Close
2023-01-02         23.54         23.81        22.80          22.92
2023-01-03         22.94         23.10        22.13          22.34
2023-01-04         21.96         23.59        21.83          23.05
2023-01-05         23.34         24.04        23.15          23.88
2023-01-06         23.94         24.32        23.55          23.74
2023-01-09         23.50         24.00        23.25          23.87
           PETR4.SA.Volume PETR4.SA.Adjusted
2023-01-02        78424700          13.38075
2023-01-03        96750300          13.04214
2023-01-04       129504000          13.45665
2023-01-05        73886000          13.94120
2023-01-06        51851500          13.85947
2023-01-09        46385200          13.93536
tail(PETR4.SA)
           PETR4.SA.Open PETR4.SA.High PETR4.SA.Low PETR4.SA.Close
2025-10-14         29.95         30.46        29.88          30.02
2025-10-15         30.05         30.17        29.67          29.75
2025-10-16         29.74         29.81        29.41          29.45
2025-10-17         29.50         29.95        29.31          29.73
2025-10-20         29.70         29.90        29.48          29.75
2025-10-21         29.96         29.99        29.47          29.51
           PETR4.SA.Volume PETR4.SA.Adjusted
2025-10-14        28138200             30.02
2025-10-15        40261000             29.75
2025-10-16        28660900             29.45
2025-10-17        36238600             29.73
2025-10-20        31442800             29.75
2025-10-21        25509900             29.51
dados = as.numeric(PETR4.SA$PETR4.SA.Open)
boxplot(dados)

plot(1:length(dados), dados)

r = array(length(dados)-1)

for (i in 1:(length(dados)-1)){
  r[i] = log(dados[i+1]/dados[i])
}

plot(1:(length(dados)-1), r)

hist(r, nclass=20)

mean(r)
[1] 0.0003440257
sd(r)
[1] 0.01927413