Κανονική κατανομή

Υπολογισμοί με την R

Αθανάσιος Σταυρακούδης
astavrak@uoi.gr

Εργαστήριο Εφαρμογών Πληροφορικής και Υπολογιστικών Οικονομικών

12/08/2023

Ομοιόμορφη διακριτή κατανομή

Ζάρι και πιθανότητες

Ας υποθέσουμε πως ρίχνουμε ένα ζάρι. Η πιθανότητα να φέρουμε το όποιο αποτέλεσμα είναι 1/6 (αμερόληπτο ζάρι).

x <- 1:6
y <- rep(1/6, 6)
plot(x, y, type = "h", lwd = 2)
points(x, y, pch = 19, cex = 2)

Μια τέτοια κατανομή ονομάζεται ομοιόμορφη. Επειδή οι τιμές είναι διακριτές (εδώ ακέραιοι αριθμοί) : διακρική κατανομή.

Τυχαία δειγματοληψία

Μπορούμε να κάνουμε προσομοίωση μιας τυχαίας ρίψης ζαριού ως εξής:

sample(x = 1:6, size = 1)
[1] 3
  • x, το διάνυσμα τιμών από όπου θα κάνουμε δειγματοληψία
  • size είναι το πλήθος του δείγματος

Κλήρωση Ας υποθέσουμε πως θέλουμε να κληρώσουμε 2 νικητές σε μια λίστα 6 ατόμων.

Αν η λίστα είναι αριθμημένη:

sample(x = 1:6, size = 2)
[1] 6 3

Αν η λίστα είναι ονομαστική:

x <- c("Γιώργος", "Πέτρος", "Βασίλης", "Νίκος", "Κώστας")
sample(x, size = 2)
[1] "Πέτρος" "Κώστας"

Τυχαία δειγματοληψία με επανατοποθέτηση

Ας υποθέσουμε πως ρίχνουμε το ζάρι 2 φορές, ή πως ρίχνουμε 2 ζάρια ταυτόχρονα. Οι δύο ρίψεις είναι ανεξάρτητες μεταξύ τους, η μία δεν επηρεάζει την άλλη.

Σε αυτή την περίπτωση η δειγματοληψία είναι με επανατοποθέτηση: Υπάρχει πιθανότητα οι δύο ρίψεις να φέρουν το ίδιο αποτέλεσμα (διπλές).

sample(x = 1:6, size = 2, replace = FALSE)
[1] 5 2
sample(x = 1:6, size = 2, replace = TRUE)
[1] 4 4
  • replace = FALSE, δεν υπάρχει δυνατότητα να έρθει 2η φορά το ίδιο αποτέλεσμα
  • replace = TRUE, υπάρχει δυνατότητα να έρθει 2η φορά το ίδιο αποτέλεσμα

100 ζάρια

Προσομοίωση ρίψης 100 ζαριών:

sample(x = 1:6, size = 100, replace = TRUE)
  [1] 2 3 4 2 5 2 5 4 5 5 5 1 1 6 2 1 4 6 4 3 6 2 3 5 3 6 5 6 2 4 1 3 6 4 1 2 5
 [38] 2 1 1 1 1 5 2 6 5 3 2 4 6 1 3 4 4 2 1 4 6 1 5 2 5 2 2 6 6 3 1 2 2 5 3 2 6
 [75] 4 1 5 6 3 4 4 3 5 5 2 4 1 3 2 1 3 3 5 1 2 6 2 1 6 5

Ποιος είναι ο μέσος;

x <- sample(x = 1:6, size = 100, replace = TRUE)
mean(x)
[1] 3.47

ή αλλιώς:

sample(x = 1:6, size = 100, replace = TRUE) %>% mean()
[1] 3.54

Κατανομή του μέσου

Για ένα μεγάλο πλήθος επαναλήψεων η κατανομή του μέσου είναι κανονική:

Code
tibble(i = 1:1e4, 
       k = sample(2:100, size = 1e4, replace = TRUE)) %>%
  rowwise() %>% 
  mutate(m = sample(1:6, size = k, replace = TRUE) %>% mean()) %>% 
  ggplot(aes(x = m)) +
  geom_histogram(binwidth = 0.1, fill = "#336699", alpha = 0.7) +
  geom_vline(xintercept = 3.5, color = "#FF3333") +
  theme_minimal_grid(font_size = 15)

Η καμπύλη καμπάνας

Code
ggplot() +
  geom_function(fun = dnorm, size = 1, color = "navyblue") +
  scale_x_continuous(limits = c(-4, 4)) +
  theme_void()

Από τη διωνυμική στην κανονική κατανομή

Από τη διωνυμική στην κανονική κατανομή 2

Αποφυγή παρανοήσεων

Το ύψος της καμπύλης της κανονικής κατανομής περιγράφει την πυκνότητα πιθανότητας, όχι την πιθανότητα.

Η σημειακή πιθανότητα της κανονικής (και κάθε συνεχούς) κατανομής είναι ίση με μηδέν.

Πιθανότητα στη διωνυμική κατανομή:

dbinom(x = 2, size = 6, prob = 1/3)
[1] 0.3292181

Πυκνότητα πιθανότητας στην κανονική κατανομή:

dnorm(x = 2, mean = 1.9, sd = 1.21)
[1] 0.3285803

Συναρτήσεις κανονικής κατανομής

d πυκνότητα πιθανότητας

dnorm(x, mean = 0, sd = 1)

p συνάρτηση πιθανότητας

pnorm(q, mean = 0, sd = 1)

q ποσοστιαία συνάρτηση

qnorm(p, mean = 0, sd = 1)

r ψευδοτυχαίοι αριθμοί

rnorm(n, mean = 0, sd = 1)

Ο μέσος και η τυπική απόκλιση μπορούν να οριστούν σε επιθυμητές τιμές κατά περίπτωση.

Οι προεπιλεγμένες τιμές είναι 0 και 1 αντίστοιχα (τυπική κανονική κατανομή).

Τυχαίοι αριθμοί

Παραδείγματα με mean = 0, sd = 1

Ένας τυχαίος αριθμός της \(\mathcal{N}(0, 1)\)

rnorm(1)
rnorm(1, 0, 1)
rnorm(1, mean = 0, sd = 1)
rnorm(n = 1, mean = 0, sd = 1)
rnorm(n = 1, sd = 1, mean = 0)
rnorm(sd = 1, n = 1, mean = 0)

Όλοι οι τρόποι γραφής είναι ισοδύναμοι. Προτίμηση:

rnorm(n = 1, mean = 0, sd = 1)
[1] -0.9029848

Αποφεύγουμε:

rnorm(n = 1, sd = 1, mean = 0)
rnorm(sd = 1, n = 1, mean = 0)

Τυχαίοι αριθμοί και ιστόγραμμα κατανομής (base plot)

x <- rnorm(n = 1000, mean = 0, sd = 1)
hist(x, freq = TRUE)

Διάγραμμα συχνοτήτων

hist(x, probability = TRUE)

Διάγραμμα πυκνότητας πιθανότητας

Τυχαίοι αριθμοί και ιστόγραμμα κατανομής (ggplot)

df <- tibble(x = rnorm(n = 1000, mean = 0, sd = 1))
ggplot(df, aes(x)) +
  geom_histogram(binwidth = 0.5, fill = "#336699", alpha = 0.7) +
  theme_minimal_grid(font_size = 15)

Διάγραμμα συχνοτήτων

ggplot(df, aes(x)) +
  geom_density(color = "navyblue", size = 1.2) +
  theme_minimal_grid(font_size = 15)

Διάγραμμα πυκνότητας πιθανότητας

Διάγραμμα συνάρτησης πυκνότητας πιθανότητας

curve(dnorm, 
      from = -4, to = 4, 
      lwd = 2,
      col = "navyblue")

ggplot() +
  geom_function(fun = dnorm, size = 1, color = "navyblue") +
  scale_x_continuous(limits = c(-4, 4)) +
  theme_minimal_grid(font_size = 15)

Ο μετασχηματισμός z (standard score)

Διατύπωση

Για ένα οποιοδήποτε διάνυσμα τιμών \(x\) παράγουμε ένα διάνυσμα τιμών \(z\) σύμφωνα με τον τύπο:

Αν γνωρίζουμε τις ιδιότητες του πληθυσμού. \[ z = {x- \mu \over \sigma} \] - \(\mu\) είναι ο μέσος πληθυσμού - \(\sigma\) είναι η τυπική απόκλιση του πληθυσμού

Αν γνωρίζουμε τις ιδιότητες του δείγματος. \[ z = {x - \bar{x} \over S} \] - \(\bar{x}\) είναι ο μέσος του δείγματος - \(S\) είναι η τυπική απόκλιση του δείγματος

Για παράδειγμα, αν

x <- c(5, 7, 2, 6, 10)

Τότε:

( z <- (x - mean(x)) / sd(x) )
[1] -0.3429972  0.3429972 -1.3719887  0.0000000  1.3719887

Ιδιότητες

Μέσος και διακύμανση του διανύσματος τιμών x:

c(mean(x), var(x))
[1] 6.0 8.5

Μέσος και διακύμανση του διανύσματος τιμών z:

c(mean(z), var(z))
[1] 0 1

Δηλαδή έχουμε μετασχηματισμό μιας κατανομής \(\mathcal{N}(6, 8.5)\) σε κατανομή \(\mathcal{N}(0, 1)\)

Ισχύει και σε άλλες κατανομές

Ο μετασχηματισμός μπορεί να εφαρμοστεί ανεξάρτητα από την κανονική κατανομή. Για παράδειγμα έστω \(x\) ένα διάνυσμα τιμών από την ομοιόμορφη κατανομή \((0, 10)\):

x <- runif(n = 100, min = 0, max = 10)
c(mean(x), var(x))
[1] 4.844090 8.503054

Αν εφαρμόσουμε το μετασχηματισμό \(z\)

z <- (x - mean(x)) / sd(x)

Θα πάρουμε:

c(mean(z), var(z))
[1] 1.150313e-16 1.000000e+00

Ισοεμβαδικές επιφάνειες

Αν \(Χ\simΝ(\mu, \sigma^2)\) τότε \(Z~N(0, 1)\), όπου \(Ζ = \frac{X-\mu}{\sigma}\). Για παράδειγμα αν \(\mu=2\) και \(\sigma=3\):

Code
ggplot(NULL) +
  geom_area(aes(x = c(-Inf, Inf)), stat = "function", fun = dnorm, args = list(mean = 0, sd = 1), fill = "#A52A02", alpha = 0.7) +
  geom_area(aes(x = c(-Inf, Inf)), stat = "function", fun = dnorm, args = list(mean = 4, sd = sqrt(3)), fill = "#556B02", alpha = 0.7) +
  scale_x_continuous(limits = c(-4, 12), breaks = pretty_breaks(10)) +
  labs(x = "", y = "") +
  theme_minimal_hgrid(font_size = 18)
pnorm(Inf, mean = 0, sd = 1)
[1] 1
pnorm(Inf, mean = 4, sd = 3)
[1] 1

Συμμετρία της κατανομής

Συμμετρία του μέσου

Η πιθανότητα (εμβαδόν) δεξιά και αριστερά του μέσου είναι ίση με 1/2

Code
ggplot(NULL) +
  #geom_area(stat = "function", fun = dnorm, fill = "#00998a", xlim = c(-4, 0)) +
  geom_function(fun = dnorm, size = 1, color = "black") +
  geom_area(aes(x = c(-4, 4)), stat = "function", fun = dnorm, fill = "#A52A02", alpha = 0.7, xlim = c(-4, 0)) +
  geom_area(aes(x = c(-4, 4)), stat = "function", fun = dnorm, fill = "#556B02", alpha = 0.7, xlim = c(0, 4)) +
  annotate(geom = "text", label = "pnorm(q = 0, mean = 0, sd = 1, lower.tail = TRUE)", size = 7, color = "#A52A02", x = -2.4, y = 0.42) +
  annotate(geom = "text", label = "pnorm(q = 0, mean = 0, sd = 1, lower.tail = FALSE)", size = 7, color = "#556B02", x = 2.4, y = 0.42) +
  scale_x_continuous(limits = c(-4, 4), breaks = pretty_breaks(10)) +
  labs(x = "", y = "") +
  theme_minimal_hgrid(font_size = 18)

Συμμετρία ανεξάρτητα από παραμέτρους

Η πιθανότητα (εμβαδόν) δεξιά και αριστερά του μέσου είναι ίση με 1/2 ανεξάρτητα από το μέσο και τη διακύμανση.

pnorm(q=60, mean=60, sd=4,
      lower.tail=TRUE)
[1] 0.5
pnorm(q=60, mean=60, sd=4, 
      lower.tail=FALSE)
[1] 0.5

Τυπική απόκλιση

Τυπική απόκλιση ως μονάδα μέτρησης

pnorm(q=0.5, mean=0, sd=1)
[1] 0.6914625

pnorm(q=62, mean=60, sd=4)
[1] 0.6914625

Το ίδιο αποτέλεσμα. Γιατί;

Επειδή και στις δύο περιπτώσεις μετράμε στο ίδιο σημείο: μισή μονάδα τυπικής απόκλισης δεξιά από τον μέσο.

Τυπική απόκλιση ως μονάδα μέτρησης 2

diff(pnorm(q=c(-1, 1)))
[1] 0.6826895
diff(pnorm(q=c(-2, 2)))
[1] 0.9544997
diff(pnorm(q=c(-3, 3)))
[1] 0.9973002

diff(pnorm(q=c(56, 64), mean=60, sd=4))
[1] 0.6826895
diff(pnorm(q=c(52, 68), mean=60, sd=4))
[1] 0.9544997
diff(pnorm(q=c(48, 72), mean=60, sd=4))
[1] 0.9973002

Παράδειγμα επιβεβαίωσης

\[\mathcal{N}(0, 1^2)\]

N <- 1e6
x <- rnorm(n=N, mean=0, sd=1) 
sum(x>-1 & x<1) / N
[1] 0.682238
sum(x>-2 & x<2) / N
[1] 0.954219
sum(x>-3 & x<3) / N
[1] 0.997307

\[\mathcal{N}(60, 4^2)\]

N <- 1e6
y <- rnorm(n=N, mean=60, sd=4) 
sum(y>56 & y<64) / N
[1] 0.682441
sum(y>52 & y<68) / N
[1] 0.954602
sum(y>48 & y<72) / N
[1] 0.99729

Ανεξάρτητα από τις παραμέτρους της κανονικής κατανομής, η πιθανότητα να συναντήσουμε αριθμούς εντός περιοχών που ισαπέχουν σε μονάδες τυπικής απόκλισης είναι σταθερή.

Ισοεμβαδικές επιφάνειες και μετασχηματισμός Z

Αν \(Χ~Ν(4, 3)\) ποια είναι η πιθανότητα \(\Pr(X>6)\);

Απάντηση:

pnorm(q=6, mean=4, sd=sqrt(3),
      lower.tail = FALSE)
[1] 0.1241065

Σύμφωνα με το μετασχηματισμό z:

z <- (6 - 4) / sqrt(3)
pnorm(q=z, mean=0, sd=1,
      lower.tail = FALSE)
[1] 0.1241065

Χρειάζεται ο μετασχηματισμός;

Αν έχουμε πρόσβαση σε Η/Υ και σε στατιστικό περιβάλλον (πχ R) όχι δεν χρειάζεται. Αν είμαστε με μολύβι, χαρτί και στατιστικούς πίνακες στο παράρτημα ναι χρειάζεται.

Αθροιστική πυκνότητα πιθανότητας

Αθροιστική πυκνότητα πιθανότητας

Διάγραμμα πυκνότητας πιθανότητας (PDF) \[f(x) = \frac{1}{\sigma\sqrt{2\pi}}e^{-\frac{1}{2}\left(\frac{x-\mu}{\sigma}\right)^2}\]

dnorm(x, mean, sd)

Διάγραμμα αθροιστικής πυκνότητας πιθανότητας (CDF) \[F(x;\mu,\sigma) = \frac{1}{\sigma\sqrt{2\pi}} \int_{-\infty}^x e^{ \left( -\frac{(t - \mu)^2}{2\sigma^2} \right)}\, dt\]

pnorm(q, mean, sd)

Αθροιστική πυκνότητα πιθανότητας και τυπική απόκλιση

Διάγραμμα αθροιστικής πιθανότητας

base plot
curve(pnorm, xlim = c(-4, 4), lwd = 2)

ggplot
ggplot(NULL) +
  geom_function(fun = pnorm, size = 1) +
  xlim(x = c(-4, 4)) 

Πιθανότητες

dnorm vs pnorm

Έστω η μεταβλητή \(X~\sim N(0,1)\). Έστω το σημείο \(x=-\dfrac{1}{2}\).

ggplot
ggplot(NULL) +
  geom_function(fun = dnorm, args = list(mean = 0, sd = 1), size = 1, color = "#A52A02") +
  geom_point(aes(x=c(-0.5, -0.5), y=c(0, dnorm(x = -0.5, mean = 0, sd = 1))), size = 4) +
  geom_segment(aes(x = c(-0.5, -0.5), 
                   y = c(0, dnorm(x = -0.5, mean = 0, sd = 1)), 
                   xend = c(-0.5, -4), 
                   yend = c(dnorm(x = -0.5, mean = 0, sd = 1),  dnorm(x = -0.5, mean = 0, sd = 1))
                   ), 
               linetype = "dashed") +
  scale_x_continuous(limits = c(-4, 4), expand = expansion(add=c(0, 0.00)),  breaks = pretty_breaks(10)) +
  scale_y_continuous(expand = expansion(add=c(0, 0.01))) +
  labs(x = "", y = "") +
  theme_cowplot(font_size = 28)

dnorm(x=-0.5, mean=0, sd=1)
[1] 0.3520653

Το ύψος της καμπύλης (πυκνότητα πιθανότητα) στο σημείο \(χ=-\dfrac{1}{2}\)

ggplot
ggplot(NULL) +
  geom_function(fun = dnorm, args = list(mean = 0, sd = 1), size = 1, color = "#A52A02") +
  geom_area(aes(x = c(-5, 5)), stat = "function", fun = dnorm, args = list(mean = 0, sd = 1), fill = "#A52A02", alpha = 0.7, xlim = c(-5, -0.5)) +
  scale_x_continuous(limits = c(-4, 4), expand = expansion(add=c(0, 0.00)),  breaks = pretty_breaks(10)) +
  scale_y_continuous(expand = expansion(add=c(0, 0.01))) +
  labs(x = "", y = "") +
  theme_cowplot(font_size = 28)

pnorm(q=-0.5, mean=0, sd=1)
[1] 0.3085375

Το εμβαδόν κάτω από την καμπύλη (η πιθανότητα) της περιοχής \((-\infty, \dfrac{1}{2})\)

Ασκήσεις

Άσκηση 1

Η αναμονή (λεπτά της ώρας) σε ένα τηλεφωνικό κέντρο εξυπηρέτησης ακολουθεί την κατανομή \(\mathcal{N}(25, 33)\).

α) Ποια είναι η πιθανότητα αναμονής λιγότερο από 20 λεπτά;

pnorm(q = 20, mean = 25, sd = sqrt(33))
[1] 0.1920441

β) Ποια είναι η πιθανότητα αναμονής περισσότερο από 35 λεπτά;

pnorm(q = 35, mean = 25, sd = sqrt(33), lower.tail = FALSE)
[1] 0.04086138

γ) Ποια είναι η πιθανότητα αναμονής μεταξύ 10 και 24 λεπτών;

pnorm(q = 24, mean = 25, sd = sqrt(33)) -
  pnorm(q = 10, mean = 25, sd = sqrt(33))
[1] 0.4263905

Άσκηση 2

Η ποσοστιαία μεταβολή στην τιμή μιας μετοχής ακολουθεί (πχ, για τους τελευταίους 3 μήνες) την κατανομή \(\mathcal{N}(0.2, 7)\).

α) Πόση είναι η πιθανότητα αυριανή μεταβολή της να είναι μεταξύ 1% και 2%;

diff(pnorm(q = c(1, 2), mean = 0.2, sd = sqrt(33)))
[1] 0.06761024

β) Πόση είναι πιθανότητα η αυριανή μεταβολή της να είναι ακριβώς 1%;

diff(pnorm(q = c(1, 1), mean = 0.2, sd = sqrt(33)))
[1] 0

γ) Πόση είναι πιθανότητα η αυριανή μεταβολή της να είναι 1% με ακρίβεια ενός δεκαδικού (1.0%);

diff(pnorm(q = c(0.951, 1.05), mean = 0.2, sd = sqrt(33)))
[1] 0.006808735