library(tidyverse)
Θα χρειαστούμε και θα χρησιμοποιήσουμε:
Είναι πάντα χρήσιμο, πριν χρησιμοποιήσουμε μια συνάρτηση να βλέπουμε το αντίστοιχο λήμμα βοήθειας:
?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(dnorm, xlim = c(-4, 4))
x <- seq(-4, 4, length.out = 1001)
y <- dnorm(x)
plot(x, y, type = "l")
Εδώ έχουμε διάφορες δυνατότητες. Μία είναι παρόμοια όπως με πριν:
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
Η τιμή της πιθανότητας είναι βέβαια η ίδια ακριβώς, και με τους δύο τρόπους υπολογισμού.