library(tidyverse)

Συναρτήσεις

Θα χρειαστούμε και θα χρησιμοποιήσουμε:

  1. rnorm, τυχαίος αριθμός της κανονικής κατανομής
  2. dnorm, πυκνότητα πιθανότητας
  3. pnorm, επιφάνεια κάτω από την καμπύλη κανονικής κατανομής
  4. qnorm, υπολογισμός του σημείου όπου η επιφάνεια έχει συγκεκριμένη τιμή

Είναι πάντα χρήσιμο, πριν χρησιμοποιήσουμε μια συνάρτηση να βλέπουμε το αντίστοιχο λήμμα βοήθειας:

?rnorm

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

Ένας τυχαίος αριθμός της τυπικής κανονικής κατανομής:

rnorm(1)
## [1] 0.2638907

10 τυχαίοι αριθμοί της τυπικής κανονικής κατανομής:

rnorm(10)
##  [1]  0.4984389 -1.0613762  0.1703141  0.1967121 -0.0724455 -0.4474487
##  [7] -0.8398660  0.6943832 -0.4235899  0.2595499

Οι αριθμοί αυτοί προέρχονται από την κανονική κατανομή με μέσο το 0 και τυπική απόκλιση το 1. Αν θέλουμε τυχαίους αριθμούς κανονική κατανομή με άλλες παραμέτρους θα πρέπει να δώσουμε κατάλληλους ορισμούς. Πχ 10 τυχαίοι αριθμοί με μέσο το 100 και τυπική απόκλιση το 20:

rnorm(10, mean = 100, sd = 10)
##  [1] 107.73054  98.84393  96.15985 110.71024  84.56882  78.64854  74.93102
##  [8] 130.49707  90.89448  97.54736

Ακόμα και στην τυπική κανονική κατανομή μπορούμε να ορίσουμε το μέσο (0) και την τυπική απόκλιση (1):

rnorm(10, mean = 0, sd = 1) 
##  [1]  0.90966872 -0.60117884  0.32820015 -0.88221897  1.35399890 -1.48159538
##  [7]  0.06360825  0.79243656  0.19660107 -0.04961200

Κάτι τέτοιο είναι περιττό, αλλά δεν είναι λάθος.

Με το τρόπο αυτό μπορούμε να λάβουμε μεγάλο πλήθος τυχαίων αριθμών και να εξετάσουμε τις ιδιότητες τους. Για παράδειγμα 1 εκατομμύριο τυχαίοι αριθμοί που προέρχονται από την κανονική κατανομή:

x <- rnorm(1e6)

Το διάνυσμα x έχει μέσο:

mean(x)
## [1] -0.0005479713

Διάμεσο:

median(x)
## [1] 0.0009811861

διακύμανση:

var(x)
## [1] 1.000507

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

sd(x)
## [1] 1.000253

Τεταρτημόρια:

quantile(x)
##            0%           25%           50%           75%          100% 
## -5.0573282948 -0.6752936294  0.0009811861  0.6738246329  4.9065436188

Ενώ το ιστόγραμμα μπορεί να κατασκευαστεί ως εξής:

hist(x)

Ενώ αν θέλουμε την πυκνότητα πιθανότητας:

plot(density(x))

Εναλλακτικά, το ιστόγραμμα μπορεί να κατασκευαστεί και ως εξής:

tibble(x) %>% 
  ggplot(aes(x)) +
  geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

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

Η συνάρτηση πυκνότητας της κανονικής κατανομής είναι: \[ f(x) = \frac{1}{\sigma \sqrt{2\pi} } e^{-\frac{1}{2}\left(\frac{x-\mu}{\sigma}\right)^2} \] Όταν \(\mu = 0\) και \(\sigma = 1\) τότε: \[ \varphi(x) = \frac{1}{\sqrt{2\pi}} e^{-\frac{x^2}{2}} \] Αν θέλουμε να υπολογίσουμε την τιμή αυτής της συνάρτησης στο σημείο, πχ, x=1 μπορούμε να γράψουμε:

x <- 1
1/sqrt(2*pi) * exp(-(x**2)/2)
## [1] 0.2419707

Η R έχει μια ενσωματωμένη συνάρτηση για αυτό τον υπολογισμό: τη dnorm. Έτσι η πυκνότητα πιθανότητας της τυπικής κανονικής κατανομής στο x=1 μπορεί να υπολογιστεί ως εξής:

dnorm(1)
## [1] 0.2419707

Όπως και με τους τυχαίους αριθμούς μπορούμε και εδώ να δώσουμε άλλες παραμέτρους. Για παράδειγμα, η πυκνότητα πιθανότητας στο σημείο χ=110 της κανονικής κατανομής με μέσο το 105 και τυπική απόκλιση το 10 είναι:

dnorm(x = 110, mean = 100, sd = 10)
## [1] 0.02419707

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

Με τη συνάρτηση curve

curve(dnorm, xlim = c(-4, 4))

Με τη συνάρτηση plot

x <- seq(-4, 4, length.out = 1001)
y <- dnorm(x)
plot(x, y, type = "l")

Με τη συνάρτηση ggplot

Εδώ έχουμε διάφορες δυνατότητες. Μία είναι παρόμοια όπως με πριν:

x <- seq(-4, 4, length.out = 1001)
y <- dnorm(x)
df <- tibble(x, y)
df %>% 
  ggplot(aes(x, y)) +
  geom_line() +
  labs(x = "", y = "density")

ή με τη χρήση geom_function:

ggplot() +
  geom_function(fun = dnorm) +
  scale_x_continuous(limits = c(-4, 4))

Επιφάνεια κάτω από την καμπύλη

df %>% 
  ggplot(aes(x = x, y = y)) +
  geom_area(data = filter(df, x <= 1), 
            fill = "skyblue",
            alpha = 0.5) +
  geom_line(color = "navyblue", size = 1) +
  scale_x_continuous(breaks = -4:4) +
  labs(x = "", y = "Πυκνότητα") +
  theme_minimal()

Η συνολική επιφάνεια κάτω από την καμπύλη της κανονικής κατανομής ισούται με μονάδα (πάντα) και εκφράζει πιθανότητα. Πολλές φορές χρειαζόμαστε τον υπολογισμό μέρος από την επιφάνεια. Αυτό μπορούμε να το πετύχουμε με τη συνάρτηση pnorm. Για παράδειγμα, η σκιασμένη περιοχή στο παραπάνω γράφημα είναι:

pnorm(1)
## [1] 0.8413447

Ενώ η μη σκιασμένη είναι:

1 - pnorm(1)
## [1] 0.1586553

Ισοδύναμα:

pnorm(1, lower.tail = FALSE)
## [1] 0.1586553

Αν η κατανομή περιγράφεται από άλλες παραμέτρους, πχ μέσο το 100 και τυπική απόκλιση το 10 και θέλουμε να υπολογίζουμε την πιθανότητα έως το σημείο q=105, τότε:

pnorm(105, mean = 100, sd = 10, lower.tail = TRUE)
## [1] 0.6914625
pnorm(105, mean = 100, sd = 10)
## [1] 0.6914625

Οι δύο παραπάνω τρόποι είναι παντελώς ισοδύναμοι.

Μερικές φορές είναι επιθυμητό να υπολογιστεί η πιθανότητα που αντιστοιχεί σε ένα εύρος τιμών. Για παράδειγμα η σκιασμένη περιοχή στο παρακάτω γράφημα απεικονίζει το εύρος μιας μονάδας τυπικής απόκλισης της τυπικής κανονικής κατανομής:

Η πιθανότητα (επιφάνεια) μπορεί να υπολογιστεί ως:

pnorm(1) - pnorm(-1)
## [1] 0.6826895

ή

q <- c(-1, 1)
diff(pnorm(q))
## [1] 0.6826895

Αντίστοιχα, αν θέλουμε την πιθανότητα ανάμεσα στο q=1 και στο q=2 θα γράψουμε:

pnorm(2) - pnorm(1)
## [1] 0.1359051

ή

q <- c(1, 2)
diff(pnorm(q))
## [1] 0.1359051

Μπορούμε να το δούμε στο παρακάτω γράφημα:

Κεντράρισμα

Έστω ένα τυχαίο διάνυσμα τιμών. Για παράδειγμα:

x <- c(110.4, 115.5, 89.7, 83.4, 92.2)

με μέσο:

mean(x)
## [1] 98.24

και τυπική απόκλιση :

sd(x)
## [1] 13.92311

Μπορούμε να κάνουμε τον εξής μετασχηματισμό: \[ Z = \frac{x - \bar{x}}{\sigma_x} \]

(z <- (x - mean(x)) / sd(x))
## [1]  0.8733681  1.2396655 -0.6133687 -1.0658538 -0.4338111

Τώρα ο μέσος είναι:

mean(z)
## [1] -4.21901e-16

και η τυπική απόκλιση:

sd(z)
## [1] 1

Δηλαδή μπορούμε να μετασχηματίσουμε μια μεταβλητή έτσι ώστε να έχει μέσο το 0 τυπική απόκλιση το 1.

Μερικές ασκήσεις και προβλήματα

Ύψος

Περιγραφή Ας υποθέσουμε πως το ύψος των φοιτητών μας περιγράφεται από την κανονική κατανομή με μέσο το 172 cm και τυπική απόκλιση το 4 cm.

Ερώτημα Ποια είναι η πιθανότητα να έχει κάποιος ύψος μικρότερο από 170 cm;

Το ζητούμενο είναι ο υπολογισμός της σκιασμένης περιοχής:

Απάντηση Η πιθανότητα είναι:

pnorm(170, mean = 172, sd = 4)
## [1] 0.3085375

Ποιο αναλυτικά, σύμφωνα με τον μετασχηματισμό Z η απάντηση μπορεί να βρεθεί ως:

z <- (170-172) / 4
pnorm(z)
## [1] 0.3085375

Η τιμή της πιθανότητας είναι βέβαια η ίδια ακριβώς.

Ερώτημα Ποια είναι η πιθανότητα να έχει κάποιος ύψος μεγαλύτερο από 180 cm;

Το ζητούμενο είναι ο υπολογισμός της σκιασμένης περιοχής:

Απάντηση Η πιθανότητα είναι:

pnorm(180, mean = 172, sd = 4, lower.tail = FALSE)
## [1] 0.02275013

Ποιο αναλυτικά, σύμφωνα με τον μετασχηματισμό Z η απάντηση μπορεί να βρεθεί ως:

z <- (180-172) / 4
pnorm(z, lower.tail = FALSE)
## [1] 0.02275013

Η τιμή της πιθανότητας είναι βέβαια η ίδια ακριβώς.

Ερώτημα Ποια είναι η πιθανότητα να έχει κάποιος ύψος μεταξύ από 170 και 175 cm;

Το ζητούμενο είναι ο υπολογισμός της σκιασμένης περιοχής:

Απάντηση Η πιθανότητα είναι:

pnorm(175, mean = 172, sd = 4) - pnorm(170, mean = 172, sd = 4)
## [1] 0.4648351

ή ισοδύναμα:

q <- c(170, 175)
diff(pnorm(q, mean = 172, sd = 4))
## [1] 0.4648351

Ποιο αναλυτικά, σύμφωνα με τον μετασχηματισμό Z η απάντηση μπορεί να βρεθεί ως:

z1 <- (170-172) / 4
z2 <- (175-172) / 4
pnorm(z2) -pnorm(z1)
## [1] 0.4648351

Η τιμή της πιθανότητας είναι βέβαια η ίδια ακριβώς, και με τους δύο τρόπους υπολογισμού.