library(tidyverse)

Ύψος φοιτητών

Ρωτήσαμε τις φοιτήτριες και τους φοιτητές του μαθήματος να μας πουν το ύψος τους. Μπορούμε να δούμε τις απαντήσεις εδώ Μπορούμε να δούμε τις απαντήσεις εδώ

θα χρειαστεί να διαβάσουμε αυτά τα δεδομένα και να αποθηκεύσουμε σε μια μεταβλητή, για παράδειγμα:

answers <- read.table("http://stavrakoudis.econ.uoi.gr/stavrakoudis/R/gender-height.txt",
                      sep = ",",
                      header = TRUE)

Οι πρώτες εγγραφές του πίνακα είναι:

head(answers)
##    gender height
## 1   Αγόρι    171
## 2   Αγόρι    176
## 3 Κορίτσι    157
## 4 Κορίτσι    159
## 5   Αγόρι    179
## 6 Κορίτσι    168

Το ύψος σε εκατοστά είναι στη στήλη height, μπορούμε να δούμε το ιστόγραμμα του ύψους

hist(answers$height)

είτε:

answers %>% 
  ggplot(aes(x = height)) +
  geom_histogram(binwidth = 5)

Υπάρχουν τρεις υποθέσεις που μπορούμε να κάνουμε:

  1. \(\mu_1 - \mu_2 = 0\), Αγόρια και Κορίτσια έχουν το ίδιο ύψος
  2. \(\mu_1 - \mu_2 \le 0\), Τα Αγόρια είναι πιο κοντά από τα Κορίτσια
  3. \(\mu_1 - \mu_2 \ge 0\), Τα Αγόρια είναι πιο ψηλά από τα Κορίτσια

Μπορούμε (στον πίνακα δεδομένων) να υπολογίσουμε το μέσο ύψος ως εξής:

mean(answers$height)
## [1] 170.9189

Αν θέλουμε το μέσο ύψος ξεχωριστά για τα Αγόρια και τα Κορίτσια θα χρειαστεί να γράψουμε:

answers %>% 
  group_by(gender) %>% 
  summarise(m = mean(height))
## # A tibble: 2 × 2
##   gender      m
##   <chr>   <dbl>
## 1 Αγόρι    179.
## 2 Κορίτσι  166.

Ή περισσότερο αναλυτικά (και κοπιαστικά):

boy_height <- answers %>% 
  filter(gender == 'Αγόρι') %>% 
  pull(height)
girl_height <- answers %>% 
  filter(gender == 'Κορίτσι') %>% 
  pull(height)

Οπότε μπορούμε να υπολογίσουμε είτε τις αντίστοιχες μέσες τιμές:

mean(boy_height)
## [1] 179.1071
mean(girl_height)
## [1] 165.9348

είτε τις αντίστοιχες τυπικές αποκλίσεις:

sd(boy_height)
## [1] 5.820394
sd(girl_height)
## [1] 4.682839

Μια πρώτη εικόνα για να δούμε τη διαφορετική κατανομή τους ύψους Αγοριών και Κοριτσιών είναι το θηκόγραμμα:

boxplot(height ~ gender, data = answers)

Μπορούμε επίσης να εξετάσουμε τη διαφορετική πυκνότητα κατανομής:

answers %>% 
  ggplot(aes(x = height, fill = gender)) +
  geom_density(alpha = 0.5) +
  labs(x = "Ύψος", y = "Πυκνότητα", fill = "Φύλο") +
  scale_fill_manual(breaks = c('Αγόρι', 'Κορίτσι'), values = c('blue', 'red')) +
  theme_minimal()

Σημείωση, η χρωματική σήμανση αγοριών/κοριτσιών δεν είναι αθώα επιλογή. Μπορείτε να προτείνετε κάτι καλύτερο από το μπλε/κόκκινο;

Και τα δύο διαγράμματα υποδεικνύουν πως τα Αγόρια είναι ψηλότερα. Υπάρχει ωστόσο μια σημαντική περιοχή επικάλυψης.

Φαίνεται λοιπόν πως ο οπτικός έλεγχος δείχνει πως τα Αγόρια είναι ψηλότερα από τα Κορίτσια. Ας δούμε όμως τι λέει και ο στατιστικός έλεγχος. Για λόγους πληρότητας θα εξετάσουμε και τα 3 ενδεχόμενα.

Η διαφορά μέσων είναι αρνητική

θα διερευνήσουμε τη μηδενική υπόθεση: \[ H_0 : \mu_1 - \mu_2 \le 0\] σε σχέση με την εναλλακτική υπόθεση: \[ H_0 : \mu_1 - \mu_2 > 0\]

Για να κάνουμε τον έλεγχο στην R γράφουμε:

t.test(boy_height, 
       girl_height, 
       alternative = "greater",
       paired = FALSE)
## 
##  Welch Two Sample t-test
## 
## data:  boy_height and girl_height
## t = 10.143, df = 47.998, p-value = 7.95e-14
## alternative hypothesis: true difference in means is greater than 0
## 95 percent confidence interval:
##  10.99416      Inf
## sample estimates:
## mean of x mean of y 
##  179.1071  165.9348

Σημείωση: η επιλογή paired=FALSE είναι εδώ περιττή, μπορούμε να την παραλείψουμε καθώς εξ ορισμού (default) ισχύει paired=FALSE.

Πως ερμηνεύουμε το αποτέλεσμα; Η τιμή p είναι εξαιρετικά μικρή, πολύ μικρότερη από το 0.05. Έχουμε πολύ ισχυρή ένδειξη να απορρίψουμε τη μηδενική υπόθεση: το ύψος των αγοριών είναι μικρότερο από το ύψος των κοριτσιών.

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

t.test(height ~ gender, 
       data = answers, 
       alternative = "greater",
       paired = FALSE) 
## 
##  Welch Two Sample t-test
## 
## data:  height by gender
## t = 10.143, df = 47.998, p-value = 7.95e-14
## alternative hypothesis: true difference in means is greater than 0
## 95 percent confidence interval:
##  10.99416      Inf
## sample estimates:
##   mean in group Αγόρι mean in group Κορίτσι 
##              179.1071              165.9348

Δηλαδή να χρησιμοποιήσουμε απευθείας τα δεδομένα του πίνακα απαντήσεων με τον τύπο (formula) height ~ gender ο οποίος διαβάζεται ως: ύψος ως προς φύλλο. Έτσι θα πάρουμε απευθείας το αποτέλεσμα χωρίς να χρειαστεί να κατασκευάσουμε ενδιάμεσα διανύσματα τιμών. Και οι δύο τρόποι είναι σωστοί και δίνουν του ίδιο αποτέλεσμα. Είναι στην ευχέρεια του χρήστη να επιλέξει.

Η διαφορά μέσων είναι θετική

θα διερευνήσουμε τη μηδενική υπόθεση: \[ H_0 : \mu_1 - \mu_2 \ge 0\] σε σχέση με την εναλλακτική υπόθεση: \[ H_0 : \mu_1 - \mu_2 < 0\]

Στην R γράφουμε:

t.test(boy_height, 
       girl_height, 
       alternative = "less",
       paired = FALSE)
## 
##  Welch Two Sample t-test
## 
## data:  boy_height and girl_height
## t = 10.143, df = 47.998, p-value = 1
## alternative hypothesis: true difference in means is less than 0
## 95 percent confidence interval:
##      -Inf 15.35057
## sample estimates:
## mean of x mean of y 
##  179.1071  165.9348

Πως ερμηνεύουμε το αποτέλεσμα; Η τιμή p είναι εξαιρετικά μεγάλη, πολύ κοντά στη μονάδα. Έχουμε πολύ ισχυρή ένδειξη να μην απορρίψουμε τη μηδενική υπόθεση: το ύψος των αγοριών είναι μεγαλύτερο από το ύψος των κοριτσιών.

Η διαφορά μέσων είναι μηδενική

θα διερευνήσουμε τη μηδενική υπόθεση: \[ H_0 : \mu_1 - \mu_2 = 0\] σε σχέση με την εναλλακτική υπόθεση: \[ H_0 : \mu_1 - \mu_2 \neq 0\]

Στην R γράφουμε:

t.test(boy_height, 
       girl_height, 
       alternative = "two.sided",
       paired = FALSE)
## 
##  Welch Two Sample t-test
## 
## data:  boy_height and girl_height
## t = 10.143, df = 47.998, p-value = 1.59e-13
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  10.56116 15.78357
## sample estimates:
## mean of x mean of y 
##  179.1071  165.9348

Είτε ισοδύναμα με απευθείας χρήση του πίνακα δεδομένων:

t.test(height ~ gender, 
       data = answers, 
       alternative = "two.sided",
       paired = FALSE) 
## 
##  Welch Two Sample t-test
## 
## data:  height by gender
## t = 10.143, df = 47.998, p-value = 1.59e-13
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  10.56116 15.78357
## sample estimates:
##   mean in group Αγόρι mean in group Κορίτσι 
##              179.1071              165.9348

Πως ερμηνεύουμε το αποτέλεσμα; Η τιμή p είναι εξαιρετικά μικρή, πολύ κοντά στο μηδέν. Έχουμε πολύ ισχυρή ένδειξη να απορρίψουμε τη μηδενική υπόθεση: τα αγόρια και τα κορίτσια έχουν το ίδιο ύψος

Συμπέρασμα

Σύμφωνα με τους ελέγχους που έχουμε πραγματοποιήσει υπάρχει ισχυρή ένδειξη πως τα Αγόρια της τάξης είναι ψηλότερα από τα Κορίτσια.

Επιπλέον θέματα.

t_test_result <- t.test(
  height ~ gender,
  data = answers,
  alternative = "two.sided",
  paired = FALSE) 
names(t_test_result)
##  [1] "statistic"   "parameter"   "p.value"     "conf.int"    "estimate"   
##  [6] "null.value"  "stderr"      "alternative" "method"      "data.name"
t_test_result$statistic
##        t 
## 10.14276
t_test_result$parameter
##       df 
## 47.99764
t_test_result$p.value
## [1] 1.590075e-13
t_test_result$conf.int
## [1] 10.56116 15.78357
## attr(,"conf.level")
## [1] 0.95
t_test_result$estimate
##   mean in group Αγόρι mean in group Κορίτσι 
##              179.1071              165.9348
t_test_result$null.value
## difference in means 
##                   0
t_test_result$stderr
## [1] 1.298695
t_test_result$alternative
## [1] "two.sided"
t_test_result$method
## [1] "Welch Two Sample t-test"
t_test_result$data.name
## [1] "height by gender"