Έκδοση: 15 / 03 / 2024

Σημαντική σημείωση
Για την παρακολούθηση των διαδικασιών που περιγράφονται στην ενότητα αυτή ο αναγνώστης πρέπει να έχει προχωρήσει στη λήψη και την εγκατάσταση της γλώσσας R (https://www.r-project.org/) αλλά και του λογισμικού R Studio (https://www.rstudio.com/). Τόσο η γλώσσα R όσο και το R Studio εκτελούνται με τον ίδιο τρόπο σε όλα τα λειτουργικά συστήματα (Windows, Apple, Linux).

Προετοιμασία περιβάλλοντος R
Οι παρακάτω εντολές, ελέγχουν αν έχουν εγκατασταθεί τα απαιτούμενα πακέτα για την εκτέλεση του συνόλου του κώδικα της ενότητας.

list.of.packages <- c("dplyr", "tidyverse", "Rcmdr", "tidyr", " haven", "openxlsx")
new.packages <- list.of.packages[!(list.of.packages %in% installed.packages()[,"Package"])]
if(length(new.packages)) install.packages(new.packages)

1 Διαμόρφωση επιφάνειας εργασίας R Studio

Με την πρώτη εκτέλεση του R Studio, ο χρήστης πρέπει να δει στην οθόνη του την παρακάτω εικόνα.

Αρχική διάταξη R Studio
Αρχική διάταξη R Studio

Η οθόνη είναι χωρισμένη σε 3 μέρη εκ των οποίων το αριστερό είναι το ενεργό παράθυρο εντολών της R, το πάνω δεξιά είναι αφιερωμένο στη συνοπτική εμφάνιση των μεταβλητών που χρησιμοποιούμε (ετικέτα Environment) και στην ανασκόπηση των εντολών της γλώσσας R που έχουμε εφαρμόσει (ετικέτα History), ενώ το κάτω δεξιά προσφέρει άμεση πρόσβαση στο σύστημα αρχείων του υπολογιστή (Files), στα διαγράμματα που δημιουργούνται από την R (Plots), στο σύνολο των εγκατεστημένων βιβλιοθηκών της R (Packages), στη βοήθεια που προσφέρεται για κάθε μία βιβλιοθήκη (Help) αλλά και στοιχειώδη επισκόπηση και διαχείριση των δεδομένων που έχει εισάγει στο περιβάλλον της R ο χρήστης (Viewer).

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

Δημιουργία νέου αρχείου
Δημιουργία νέου αρχείου

από την μπάρα εργαλείων και από τις επιλογές που θα εμφανιστούν να συνεχίσει επιλέγοντας R Script.

Δημιουργία αρχείου εντολών R
Δημιουργία αρχείου εντολών R

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

Μεταβολή διάταξης R Studio
Μεταβολή διάταξης R Studio
Τελική διάταξη R Studio
Τελική διάταξη R Studio

2 Εγκατάσταση πακέτων συναρτήσεων R από το R Studio

Με την εγκατάσταση της, η γλώσσα R προσφέρει ένα σύνολο συναρτήσεων που μπορεί να καλύψει τις περισσότερες ανάγκες ενός ερευνητή. Ωστόσο, στην πραγματική έρευνα υπάρχουν πολλές περιπτώσεις όπου πρέπει να εφαρμοστούν διαδικασίες περισσότερο εξειδικευμένες που δεν καλύπτονται από τις διαθέσιμες δυνατότητες της γλώσσας. Στην περίπτωση αυτή, ο ίδιος ο ερευνητής, χρησιμοποιώντας τη γραμματική και το συντακτικό της γλώσσας R, πρέπει να αναπτύξει τις στατιστικές συναρτήσεις που χρειάζεται. Επιπλέον, αν το επιθυμεί, έχει τη δυνατότητα να συγκεντρώσει τις συναρτήσεις αυτές, μαζί με ενδεικτικά σύνολα δεδομένων και αρχεία βοήθειας, σε μία βιβλιοθήκη συναρτήσεων την οποία να τη διαθέσει σε ανοιχτά αποθετήρια λογισμικού, προσβάσιμα σε όλη την επιστημονική κοινότητα. Με τον τρόπο αυτό, δίνει τη δυνατότητα σε όσους αντιμετωπίζουν το ίδιο πρόβλημα να χρησιμοποιήσουν τις ίδιες συναρτήσεις για να δώσουν την ίδια λύση. Κάθε βιβλιοθήκη οφείλει να συνοδεύεται από ένα αρχείο pdf που εξηγεί τη λειτουργικότητα των συναρτήσεων που περιέχει ενώ προτείνει και την ενδεικτική εφαρμογή τους. Έτσι, κάθε χρήστης της R, που αντιμετωπίζει μία ιδιαίτερη ανάγκη στατιστικής διαχείρισης δεδομένων, μπορεί να αναζητήσει με λέξεις κλειδιά την κατάλληλη βιβλιοθήκη συναρτήσεων και αν κρίνει πως αυτή καλύπτει τις ανάγκες του να το κάνει εγκατάσταση στο σύστημά του επεκτείνοντας τις δυνατότητές του.

Καθώς, η κοινότητα της R είναι μεγάλη αλλά και δραστήρια, έχουν δημιουργηθεί πολλά πακέτα (περίπου 19.200 το έτος 2023) ενώ με τη συνεχή αξιολόγηση και εφαρμογή τους έχουν αναδειχθεί και καθιερωθεί μέσα στην κοινότητα των χρηστών πολλά από αυτά ως αποτελεσματικά και αξιόπιστα για συγκεκριμένες διεργασίες ενώ υπάρχουν εκατοντάδες που μπορούν να καλύψουν οποιαδήποτε εξειδικευμένη ανάγκη ενός ερευνητή.

Εγκατάσταση βιβλιοθήκης από το περιβάλλον του R studio
Εγκατάσταση βιβλιοθήκης από το περιβάλλον του R studio
Διάλογος εγκατάστασης βιβλιοθηκών
Διάλογος εγκατάστασης βιβλιοθηκών

Για την εγκατάσταση μίας βιβλιοθήκης συναρτήσεων από το περιβάλλον της R, ο χρήστης αρκεί να χρησιμοποιήσει την εντολή install.packages. Αυτή η λειτουργικότητα είναι επίσης διαθέσιμη στο περιβάλλον του R Studio επιλέγοντας

Tools → Install Packages….

Για την εγκατάσταση μίας βιβλιοθήκης είναι απαραίτητο ο χρήστης να γνωρίζει την ονομασία της. Στην περίπτωση αυτή το R studio βοηθά το χρήστη προτείνοντας κάποιες επιλογές ύστερα από την πληκτρολόγηση κάποιων χαρακτήρων.

Κάποια πακέτα που θα απαιτηθούν στη συνέχεια είναι τα πακέτα
• ggplot2
• BSDA
• car
• ppcor
• psych
• rms
• HH
• agricolae
• moments
• Rcmdr
• Hmisc
• sjPlot
Ως δραστηριότητα εξοικείωσης του χρήστη με το R Studio προτείνεται η εγκατάσταση των πακέτων αυτών, όπως περιγράφεται παραπάνω.

3 Βασικά είδη μεταβλητών στην R

Μία μεταβλητή στην R μπορεί να ανήκει σε έναν από τους παρακάτω τύπους:

α) numeric

x = 10.5
class(x)
## [1] "numeric"

β) integer

x = 100L
class(x)
## [1] "integer"

γ) complex

x = 1 + 3i
class(x)
## [1] "complex"

δ) character

x = 'ΔΠΘ'
class(x)
## [1] "character"

ε) boolean

x = TRUE
class(x)
## [1] "logical"

4 Βασικά είδη δομών δεδομένων στην R

Τα δεδομένα μπορούν να ομαδοποιούνται σε διάφορες δομές στην R, μεταξύ των οποίων οι πιο σημαντικές είναι οι εξής:

4.1 Διάνυσμα (vector)

Οι εντολές

children = c(0, 0, 1, 2, 0, 0, 1, 2, 1, 1, 1, 1, 2, 2, 0, 4, 2, 3, 1, 0)
colors = c("Κόκκινο", "Μπλε", "Πράσινο", "Κόκκινο", "Μπλε", "Κόκκινο")

δημιουργούν το αριθμητικό διάνυσμα children και το μη αριθμητικό διάνυσμα colors.

Ένα διάνυσμα μπορεί να περιέχει είτε αριθμούς (όπως το children) για να φιλοξενεί τις τιμές μίας αριθμητικής μεταβλητής είτε κείμενο (όπως το colors) για να περιέχει τις τιμές μίας ποιοτικής μεταβλητής. Ωστόσο, στην πράξη είναι επιθυμητή η χρήση μίας κωδικοποίησης για τη σύντομη καταγραφή των δεδομένων. Έτσι, η καταχώρηση του φύλου για 10 φοιτητές θα μπορούσε να γίνει με χρήση των κωδικών 0 και 1 όπου θα πρέπει να δηλωθεί πως το 0 αντιστοιχεί στη «Γυναίκα» και το 1 στον «Άνδρα». Στην R, είναι δυνατή η παραπάνω αντιστοίχιση. Τα διανύσματα που χρησιμοποιούνται με αυτόν τον τρόπο ονομάζονται παράγοντες (factor) ενώ οι διάφορες τιμές που παίρνει αυτό το διάνυσμα ονομάζονται επίπεδα (levels) του παράγοντα και οι αντίστοιχες λεκτικές περιγραφές τους ονομάζονται ετικέτες (labels). Ο παρακάτω κώδικας παρουσιάζει μία ενδεικτική καταχώρηση ενός παράγοντα.

gender = c(0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0)
gender = factor(gender, levels = c(0, 1), labels = c("Γυναίκα", "Άνδρας"))

Ο παραπάνω κώδικας ορίζει το αριθμητικό διάνυσμα gender και μετά ενημερώνει την R πως πρόκειται για παράγοντα με τιμές 0 και 1 στις οποίες αντιστοιχούν οι ετικέτες «Γυναίκα» και «Άνδρας» αντίστοιχα. Ένας παράγοντας μπορεί να έχει διάταξη μεταξύ των διαφορετικών επιπέδων (levels) του. Ο ορισμός της διάταξης σε έναν παράγοντα μπορεί να γίνει με την εντολή ordered, όπως παρακάτω

educ.level = c(1, 2, 2, 3, 1, 2)
educ.level = ordered(educ.level)
educ.level = factor(educ.level, levels = c(1, 2, 3), labels = c("Δευτεροβάθμια", "ΑΕΙ / ΤΕΙ", "Μεταπτυχιακό"))

Ο χαρακτηρισμός ενός διανύσματος ως παράγοντα, επιβάλλει διαφορετική διαχείριση από την R. Για παράδειγμα, η συνάρτηση summary που περιγράφει τα βασικά στοιχεία ενός διανύσματος, αρχικά, για το αριθμητικό διάνυσμα gender θα είχε το εξής output:

gender = c(0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0)
summary(gender)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.0000  0.0000  0.0000  0.4167  1.0000  1.0000

ενώ, μετά τον ορισμό του διανύσματος gender ως παράγοντα, αποδίδει το εξής:

gender = factor(c(0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0), levels = c(0, 1), labels = c("Γυναίκα", "Άνδρας"))
summary(gender)
## Γυναίκα  Άνδρας 
##       7       5

Από τη στιγμή που έχει προσδιοριστεί το διάνυσμα ως παράγοντας, μπορεί να συμμετέχει σε στατιστικές διαδικασίες όπως για παράδειγμα να καταμετρηθεί ή να αναπαρασταθεί γραφικά.

summary(gender)
## Γυναίκα  Άνδρας 
##       7       5
plot(gender, main = "Κατανομή Φύλου", ylab = "Συχνότητα")

Είναι εύκολο να επαληθευτεί πως η γραφική αναπαράσταση του διανύσματος gender δεν θα μπορούσε να υλοποιηθεί πριν από την αντικατάσταση των τιμών.

Σημείωση
Ο ορισμός ενός παράγοντα ως ordered επηρεάζει τη συμπεριφορά του στα μοντέλα παλινδρόμησης. Ενδεικτικά παραδείγματα μπορούν να βρεθούν εδώ: https://library.virginia.edu/data/articles/understanding-ordered-factors-in-a-linear-model

Σύνοψη

Συνοπτικά, στον παρακάτω πίνακα παρουσιάζονται οι τρεις περιπτώσεις καταχώρησης ποιοτικών, διατακτικών και συνεχών ποσοτικών μεταβλητών στη γλώσσα R.

Μεταβλητή Εισαγωγή στην R
Ποσοτική (π.χ. ύψος) Διάνυσμα
height = c(175, 180, 163, 170)
Διατακτική (π.χ.εκπαιδευτικό επίπεδο) Ταξινομημένος παράγοντας
size = c(1, 2, 2, 3)
size = ordered(size)
size = factor(size, levels = c(1, 2, 3)
labels = c(“Μικρό”, “Μεσαίο”, “Μεγάλο”))
Ποιοτική (π.χ. φύλο) Παράγοντας
gender = c(0, 0, 1, 0, 1, 0, 1)
gender = factor(gender, levels = c(0, 1), labels = c(“Γ”, “Α”))

4.2 Μήτρα (matrix)

Στην ειδική περίπτωση όπου το σύνολο των δεδομένων είναι αριθμητικά, αντί του πλαισίου δεδομένων είναι δυνατή η χρήση ενός πίνακα δύο διαστάσεων (matrix) ή και περισσότερων (array). Η χρήση ενός πίνακα προτείνεται όταν τα δεδομένα είναι πολύ μεγάλου μεγέθους, καθώς το αποτύπωμα ενός πίνακα στην μνήμη είναι πολύ μικρότερο από αυτό του πλαισίου δεδομένων.

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

examdata = c(65, 65, 60, 70, 55, 80, 40, 90, 50, 100, 30, 95)
agedata = c(29, 28, 22, 19, 18, 28, 16, 25, 17, 35, 15, 32)
n = length(examdata)
rnames = c(1:n)
cnames = c("Επίδοση", "Ηλικία")
mymatrix = matrix(c(examdata, agedata), nrow= n, ncol=2, byrow=TRUE,
                   dimnames = list(rnames, cnames))

Μπορούμε να δούμε τον πίνακα δίνοντας την εντολη

print(mymatrix)
##    Επίδοση Ηλικία
## 1       65     65
## 2       60     70
## 3       55     80
## 4       40     90
## 5       50    100
## 6       30     95
## 7       29     28
## 8       22     19
## 9       18     28
## 10      16     25
## 11      17     35
## 12      15     32

Στα πλαίσια του σεμιναρίου στα περισσότερα παραδείγματα υπάρχουν παράγοντες (factors) και δεν είναι δυνατή η καταχώρησή τους σε έναν πίνακα.

4.3 Πίνακας (array)

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

my.first.array <- array(c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12), dim = c(2, 3, 2))
print(my.first.array)
## , , 1
## 
##      [,1] [,2] [,3]
## [1,]    1    3    5
## [2,]    2    4    6
## 
## , , 2
## 
##      [,1] [,2] [,3]
## [1,]    7    9   11
## [2,]    8   10   12

4.4 Πλαίσιο δεδομένων (dataframe)

Στην πράξη, κάθε ερευνητής, συλλέγει πολλές μεταβλητές, άρα απαιτείται η χρήση μίας γενικότερης δομής από το διάνυσμα για να φιλοξενήσει τα δεδομένα. Στην R, αυτή είναι το πλαίσιο δεδομένων (data frame) το οποίο απλά είναι μια δισδιάστατη δομή σαν πίνακας στην οποία κάθε στήλη περιέχει τιμές μιας μεταβλητής και κάθε σειρά περιέχει ένα σύνολο τιμών από κάθε στήλη.

Οι περιορισμοί ενός πλαισίου δεδομένων είναι τα εξής:
1. Τα ονόματα στηλών δεν πρέπει να είναι κενά.
2. Τα ονόματα των σειρών πρέπει να είναι μοναδικά.
3. Τα δεδομένα που είναι αποθηκευμένα σε ένα πλαίσιο δεδομένων μπορεί να είναι αριθμητικά, διατακτικά ή χαρακτήρες.
4. Κάθε στήλη πρέπει να περιέχει τον ίδιο αριθμό στοιχείων δεδομένων.

Ο ορισμός ενός data frame γίνεται πολύ απλά με την εντολή data.frame. Για παράδειγμα, οι παρακάτω εντολές δημιουργούν το πλαίσιο δεδομένων my.data.frame που περιέχει τα διανύσματα exam, gender και age από τα οποία τα exam και age είναι αριθμητικά, ενώ το gender είναι παράγοντας.

examdata = c(65, 65, 60, 70, 55, 80, 40, 90, 50, 100, 30, 95)
genderdata = c(0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0)
genderdata = factor(genderdata, levels = c(0, 1), labels = c("Γ", "Α"))
agedata = c(29, 28, 22, 19, 18, 28, 16, 25, 17, 35, 15, 32)
my.data.frame = data.frame(examdata, genderdata, agedata)
print(my.data.frame)
##    examdata genderdata agedata
## 1        65          Γ      29
## 2        65          Γ      28
## 3        60          Α      22
## 4        70          Γ      19
## 5        55          Α      18
## 6        80          Γ      28
## 7        40          Α      16
## 8        90          Γ      25
## 9        50          Α      17
## 10      100          Γ      35
## 11       30          Α      15
## 12       95          Γ      32

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

library(tibble)
my.first.tibble <- tibble(name = c('α', 'β', 'γ'), x = c(1, 5, 3), y = c(90, 60, 80))
print(my.first.tibble)
## # A tibble: 3 × 3
##   name      x     y
##   <chr> <dbl> <dbl>
## 1 α         1    90
## 2 β         5    60
## 3 γ         3    80

4.5 Ορισμός ονόματος για στήλη dataframe ή tibble και σε τιμές μίας μεταβλητής

Η baseR δεν υποστηρίζει περιγραφικά ονόματα για τις στήλες ενός dataframe. Η λειτουργικότητα αυτή είναι διαθέσιμη από δύο (τουλάχιστον) βιβλιοθήκες, την Hmisc και την expss. Στη συνέχεια θα παρουσιαστεί ενδεικτικά η χρήση της Hmisc. Οι ετικέτες που ορίζονται με την εντολή label της Hmisc δεν λαμβάνονται υπόψη από τις εντολές σχεδίασης της baseR αλλά χρησιμοποιούνται από συναρτήσεις σχεδίασης σε άλλες βιβλιοθήκες όπως είναι η sjPlot.

library(Hmisc)
label(my.data.frame$examdata) = "Βαθμός Εξετάσεων"
label(my.data.frame$genderdata) = "Φύλο"
label(my.data.frame$agedata) = "Ηλικία"

plot(my.data.frame$agedata, my.data.frame$examdata)

library(sjPlot)
library(ggplot2)
set_theme(base = theme_light())
plot_scatter(my.data.frame, agedata, examdata)

4.6 Βασική διαχείριση πλαισίου δεδομένων στην R

Μπορούμε να δούμε το my.data.frame δίνοντας την εντολη

print(my.data.frame)
##    examdata genderdata agedata
## 1        65          Γ      29
## 2        65          Γ      28
## 3        60          Α      22
## 4        70          Γ      19
## 5        55          Α      18
## 6        80          Γ      28
## 7        40          Α      16
## 8        90          Γ      25
## 9        50          Α      17
## 10      100          Γ      35
## 11       30          Α      15
## 12       95          Γ      32

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

head(my.data.frame)
##   examdata genderdata agedata
## 1       65          Γ      29
## 2       65          Γ      28
## 3       60          Α      22
## 4       70          Γ      19
## 5       55          Α      18
## 6       80          Γ      28

Μπορούμε να συνοψίσουμε τα χαρακτηριστικά των τιμών του my.data.frame δίνοντας την εντολη

summary(my.data.frame)
##     examdata      genderdata    agedata     
##  Min.   : 30.00   Γ:7        Min.   :15.00  
##  1st Qu.: 53.75   Α:5        1st Qu.:17.75  
##  Median : 65.00              Median :23.50  
##  Mean   : 66.67              Mean   :23.67  
##  3rd Qu.: 82.50              3rd Qu.:28.25  
##  Max.   :100.00              Max.   :35.00

Μπορούμε να αποκτήσουμε διαγραμματική εικόνα των τιμών του my.data.frame δίνοντας την εντολη

plot(my.data.frame)

Αν θέλουμε να αξιοποιήσουμε και την περιγραφή κάθε μίας μεταβλητής, τότε μπορούμε εναλλακτικά:

library(sjPlot)
library(ggplot2)
set_theme(base = theme_light())

plot1 = plot_frq(my.data.frame$genderdata, ylim = c(0,10))
plot2 = plot_frq(my.data.frame$examdata, type = "boxplot")

require(gridExtra)
grid.arrange(plot1, plot2, ncol=2)

4.7 Διαχείριση πλαίσιου δεδομένων με τη βιβλιοθήκη dplyr

Η βιβλιοθήκη dplyr προσφέρει ένα σύνολο συναρτήσεων με τις οποίες γίνονται με πιο σύντομο τρόπο πολλές βασικές διαδικασίες διαχείρισης ενός data frame. Πρώτα την ενεργοποιούμε εκτελώντας την εντολή:

library(dplyr)

Ενδεικτικά, παρουσιάζονται ορισμένες συναρτήσεις της dplyr στον παρακάτω πίνακα και η αντίστοιχη βασική εντολή της R:

Διαδικασία Βιβλιοθήκη dplyr Base R
Ταξινόμηση ως προς το βαθμό arrange(my.data.frame, examdata) my.data.frame[order(my.data.frame$examdata), , drop = FALSE]
Απομάκρυνση διπλοτύπων distinct(my.data.frame, examdata, .keep_all= TRUE) my.data.frame[!duplicated(my.data.frame$examdata), , drop = FALSE]
Επιλογή βάσει συνθήκης filter(my.data.frame, genderdata == "Α")
subset(my.data.frame, genderdata == "Γ" & agedata > 20)
my.data.frame[which(my.data.frame$genderdata == 'Α'), , drop = FALSE]
my.data.frame[which(my.data.frame$genderdata == 'Γ' & my.data.frame$agedata > 20), , drop = FALSE]
Δημιουργία νέας μεταβλητής mutate(my.data.frame, finalscore = 2*examdata) my.data.frame$finalscore = 2*my.data.frame$examdata
Εξαγωγή στήλης ως διάνυσμα pull(my.data.frame, 3)
pull(my.data.frame, "agedata")
my.data.frame[[3]]
my.data.frame$agedata
Αλλαγή ονόματος στήλης rename(my.data.frame, "Age1" = "agedata") names(my.data.frame)[names(my.data.frame) == "agedata"] <- "Age1"
Αλλαγή θέσης στήλης relocate(my.data.frame, "genderdata") my.data.frame[union("genderdata", names(my.data.frame))]
Επιλογή συγκεκριμένων στηλών select(my.data.frame, "genderdata", "agedata")
select(my.data.frame, -"examdata")
my.data.frame[c("genderdata", "agedata")]
Επιλογή συγκεκριμένων γραμμών slice(my.data.frame, c(1, 2, 5)) my.data.frame[c(1, 2, 5), , drop = FALSE]

4.8 Λίστα (list)

Μία λίστα (list) στην R είναι μία γενική μορφή δεδομένων που μπορεί να περιλαμβάνει διανύσματα, πίνακες και πλαίσια δεδομένων. Είναι η γενικότερη μορφή δεδομένων που υποστηρίζει η γλώσσα R. Σε αυτήν τη μορφή αποδίδεται το εξαγόμενο των περισσότερων σύνθετων συναρτήσεων της R που αφορούν διαδικασίες με πολλά επιμέρους στοιχεία όπως η ανάλυση διακύμανσης και η γραμμική παλινδρόμηση.

x = c(2L, 4L, 6L)
y = c(2, 4, 6)
z = c("A", "B", "C")
b = c(TRUE, TRUE, FALSE)
c = 3+1i
my.list = list('number.int' = x, 'number.double' = y, 'names' = z, 'bool' = b, 'complex' = c)
print(my.list)
## $number.int
## [1] 2 4 6
## 
## $number.double
## [1] 2 4 6
## 
## $names
## [1] "A" "B" "C"
## 
## $bool
## [1]  TRUE  TRUE FALSE
## 
## $complex
## [1] 3+1i

4.9 Αντικατάσταση τιμών

Πολλές φορές, η εισαγωγή ενός συνόλου δεδομένων από εξωτερική πηγή δημιουργεί μεταβλητές που έχουν αλφαριθμητικές τιμές και δεν μπορούν να συμμετέχουν σε στατιστικές διαδικασίες της R. Στην περίπτωση αυτή πρέπει να γίνει αντικατάσταση τιμών και ορισμός της αντίστοιχης μεταβλητής ως παράγοντα. Αυτό επιτυγχάνεται με τις παρακάτω εντολές:

strdata = c('Γ', 'Γ', 'Α', 'Γ', 'Α', 'Γ', 'Α', 'Γ', 'Α', 'Γ', 'Α', 'Γ')
strdata[strdata == 'Α'] <- 1
strdata[strdata == 'Γ'] <- 0
strdata = as.numeric(strdata)
print(strdata)
##  [1] 0 0 1 0 1 0 1 0 1 0 1 0

Στην περίπτωση όπου απλά απαιτείται η μετατροπή ενός string διανύσματος σε παράγοντα, τότε αρκεί η εκτέλεση της εντολής as.factor.

strdata = c('Γ', 'Γ', 'Α', 'Γ', 'Α', 'Γ', 'Α', 'Γ', 'Α', 'Γ', 'Α', 'Γ')
strdata = as.factor(strdata)
print(strdata)
##  [1] Γ Γ Α Γ Α Γ Α Γ Α Γ Α Γ
## Levels: Α Γ

5 Εισαγωγή δεδομένων από άλλες πηγές

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

Εισαγωγή δεδομένων
Εισαγωγή δεδομένων

η οποία προσφέρει την δυνατότητα εισαγωγής δεδομένων από αρχείο CSV (Comma Separated Values), Excel, SPSS, SAS και STATA.

Διάλογος εισαγωγής δεδομένων
Διάλογος εισαγωγής δεδομένων

Καθώς ενδέχεται να απαιτηθεί η επιπλέον εγκατάσταση κάποιων πακέτων (διαδικασία αυτόματη που τη διαχειρίζεται το R Studio) είναι καλό να υπάρχει ενεργή σύνδεση διαδικτύου. Ενδεικτικά, στην επόμενη εικόνα παρουσιάζεται ο διάλογος που εμφανίζεται κατά την εισαγωγή ενός αρχείου από το SPSS.

Εισαγωγή αρχείου από το SPSS στο RStudio
Εισαγωγή αρχείου από το SPSS στο RStudio

Μετά την ολοκλήρωση της διαδικασίας τα δεδομένα εμφανίζονται τόσο στο αριστερό όσο και στο δεξί μέρος της οθόνης και είναι διαθέσιμα για επεξεργασία από την R.

Ολοκλήρωση της εισαγωγής των δεδομένων στην R
Ολοκλήρωση της εισαγωγής των δεδομένων στην R

Δραστηριότητα
Στα πλαίσια διπλωματικής εργασίας με τίτλο “Ψυχολογικά Χαρακτηριστικά Γονέων με Παιδιά με Αναπηρία” καταγράφηκαν ορισμένα δημογραφικά και ψυχομετρικά χαρακτηριστικά γονεων από 100 οικογένειες δύο νομων της χώρας. Τα δεδομένα είναι σε ένα αρχείο Excel διαθέσιμα για λήψη εδώ.
1) Να κάνετε λήψη τα δεδομένα.
2) Να εισάγετε τα δεδομένα στο R Studio ως data.frame με όνομα parents.

6 Εξαγωγή δεδομένων σε άλλη μορφή

Η εξαγωγή δεδομένων δεν υπάρχει ως επιλογή στο μενού του R Studio. Ωστόσο, υπάρχουν αρκετοί τρόποι για να εξάγεις τα δεδομένα σε μορφή txt,csv, Excel, SPSS κ.α. Ενδεικτικά, η εξαγωγή σε αρχείο csv μπορεί να υλοποιηθεί με τον παρακάτω κώδικα:

filename.csv = '/home/epdiamantopoulos/mydata.csv'
write.csv(my.data.frame, filename.csv, row.names=TRUE)

Η εξαγωγή σε αρχείο Excel μπορεί να γίνει με τον παρακάτω κώδικα:

library(openxlsx)
filename.excel = '/home/epdiamantopoulos/mydata.xlsx'
write.xlsx(my.data.frame, filename.excel, rowNames=TRUE)

Εναλλακτικά, η εξαγωγή σε αρχείο SPSS μπορεί να γίνει με τον κώδικα που ακολουθεί:

library(haven)
filename.spss = '/home/epdiamantopoulos/mydata.sav'
write_sav(my.data.frame, filename.spss)     

7 Διαχείριση απουσών τιμών (missing values)

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

7.1 Εισαγωγή απουσών τιμών

Στην R, οι απούσες τιμές συμβολίζονται με NA (λατινικά γράμματα και κεφαλαία). Η παρουσία απουσών τιμών λαμβάνεται υπόψη από τις περισσότερες συναρτήσεις και για το λόγο αυτό ο χρήστης πρέπει να ελέγχει για την ύπαρξη τους, ιδιαίτερα στην περίπτωση όπου το output μίας διαδικασίας φαίνεται μη αναμενόμενο.
Για παράδειγμα, υποθέτουμε πως το αριθμητικό διάνυσμα age περιέχει τις ηλικίες 7 φοιτητών από τους οποίους όμως μόνο οι 5 δέχτηκαν να τη δηλώσουν.

age = c(23, 34, 19, 20, NA, 25, NA)

Το διάνυσμα age περιέχει 5 αριθμούς και 2 απούσες τιμές. Η εφαρμογή της συνάρτησης mean που αποδίδει τη μέση τιμή ενός αριθμητικού διανύσματος δεν παρουσιάζει κάποιο αποτέλεσμα και ο λόγος είναι πως δεν έχει νόημα το άθροισμα των τιμών για το διάνυσμα αυτό.

mean(age)
## [1] NA

Ο χρήστης οφείλει να εκτελέσει την εντολή με τρόπο ώστε να μη ληφθούν υπόψη οι απούσες τιμές και ο τρόπος με τον οποίο δηλώνεται αυτό στο σύνολο των συναρτήσεων της R είναι η αναφορά της παραμέτρου na.rm = TRUE στην κλήση της συνάρτησης. Η σωστή εκτέλεση της συνάρτησης mean που οδηγεί στο σωστό αποτέλεσμα είναι η

mean(age, na.rm = TRUE)
## [1] 24.2

7.2 Καταμέτρηση απουσών τιμών

Το πλήθος των απούσων τιμών σε ένα διάνυσμα μπορεί να βρεθεί με την εντολή

sum(is.na(age))
## [1] 2

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

summary(age)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##    19.0    20.0    23.0    24.2    25.0    34.0       2

Στην περίπτωση όπου θέλουμε να καταμετρήσουμε τις γραμμές ενός πλαισίου δεδομένων οι οποίες περιέχουν NA, δίνουμε την εντολή sum(!complete.cases(df)):

examdata = c(65, 65, 60, 70, NA, 80, 40, 90, NA, 100, 30, 95)
genderdata = c(NA, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, NA)
genderdata = factor(genderdata, levels = c(0, 1), labels = c("Γ", "Α"))
agedata = c(29, 28, 22, 19, 18, 28, 16, 25, 17, 35, 15, NA)
my.data.frame = data.frame(Βαθμός = examdata, Φύλο = genderdata, Ηλικία = agedata)

sum(!complete.cases(my.data.frame))
## [1] 4

7.3 Αφαίρεση απουσών τιμών

Η αφαίρεση των απουσών τιμών από ένα διάνυσμα μπορεί να γίνει ως εξής:

age = c(23, 34, 19, 20, NA, 25, NA)
age =  age[!is.na(age)]
print(age)
## [1] 23 34 19 20 25

Στην περίπτωση όπου θέλουμε να αφαιρέσουμε τις γραμμές ενός πλαισίου δεδομένων οι οποίες περιέχουν NA, δίνουμε την εντολή df[complete.cases(df), ]:

examdata = c(65, 65, 60, 70, NA, 80, 40, 90, NA, 100, 30, 95)
genderdata = c(NA, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, NA)
genderdata = factor(genderdata, levels = c(0, 1), labels = c("Γ", "Α"))
agedata = c(29, 28, 22, 19, 18, 28, 16, 25, 17, 35, 15, NA)
my.data.frame = data.frame(Βαθμός = examdata, Φύλο = genderdata, Ηλικία = agedata)

my.data.frame.no.NA = my.data.frame[complete.cases(my.data.frame), ]
print(my.data.frame.no.NA)
##    Βαθμός Φύλο Ηλικία
## 2      65    Γ     28
## 3      60    Α     22
## 4      70    Γ     19
## 6      80    Γ     28
## 7      40    Α     16
## 8      90    Γ     25
## 10    100    Γ     35
## 11     30    Α     15

8 Αποθήκευση περιβάλλοντος εργασίας

Όταν ο χρήστης τερματίζει τη λειτουργία του R Studio, μπορεί να επιλέξει την αποθήκευση ή μη του περιβάλλοντος εργασίας που περιλαμβάνει τόσο τον κώδικα που έχει γραφτεί στον κειμενογράφο όσο και τις δομές δεδομένων που έχει αυτός δημιουργήσει κατά την εργασία του.

Αποθήκευση δεδομένων εργασίας
Αποθήκευση δεδομένων εργασίας

Επιλέγοντας

Επιλογή αποθήκευσης
Επιλογή αποθήκευσης

Ο χρήστης μπορεί να είναι βέβαιος πως την επόμενη φορά που θα εκτελέσει το R Studio θα εμφανιστεί ξανά ο κώδικας που είχε γράψει και οι μεταβλητές εργασίας. Παρόλα αυτά, μία καλή πρακτική είναι η αποθήκευση σε ξεχωριστό αρχείο κειμένου (με κατάληξη .R) κάθε σημαντικού μέρους κώδικα που γράφεται στον κειμενογράφο. Αυτό μπορεί να το πετύχει επιλέγοντας την αποθήκευση από την εργαλειοθήκη του κειμενογράφου. Με τον τρόπο αυτό, μπορεί να μεταφέρει τον κώδικα ή και να το ανακτήσει σε περίπτωση όπου κάποιο σημαντικό σφάλμα συμβεί στον υπολογιστή του.

Για την ανάκτηση ενός αρχείου κώδικα από το περιβάλλον του R Studio αρκεί η επιλογή

File -> Open File

και η επιλογή του αρχείου που επιθυμεί ο χρήστης.

Ανάκτηση αρχείου με κώδικα R
Ανάκτηση αρχείου με κώδικα R

9 Το περιβάλλον εργασίας του R Commander

Το R Commander είναι ένα περιβάλλον εργασίας που προσφέρει στον νέο χρήστη μία εναλλακτική διαχείριση της γλώσσας R στη γνώριμη παραθυρική μορφή με καταλόγους που περιέχουν τις περισσότερο συνηθισμένες στατιστικές διαδικασίες.

Για την εμφάνιση του περιβάλλοντος αρκεί
α) Να εγκατασταθεί η βιβλιοθήκη με την εντολή:

install.packages("Rcmdr")

β) είτε σε ένα παράθυρο εντολών είτε από το R Studio να δοθεί η εντολή

library(Rcmdr)

Στη συνέχεια παρουσιάζεται το παράθυρο του R Commander.

Παράθυρο R Commander
Παράθυρο R Commander

Επιλέγοντας,

μπορούμε να ορίσουμε το σύνολο δεδομένων που θα επεξεργαστούμε με τις μεθόδους που υποστηρίζονται από το R Commander. Επιπλέον, επιλέγοντας

Δεδομένα → Εισαγωγή δεδομένων

μπορούμε να εισάγουμε προς επεξεργασία οποιοδήποτε σύνολο δεδομένων επιθυμούμε.

Από τη στιγμή που θα εισάγουμε ένα σύνολο δεδομένων ενεργοποιούνται οι στατιστικές δοκιμασίες και μπορούμε να τις εφαρμόσουμε επιλέγοντας την κατάλληλη επιλογή από το μενού που προσφέρει το R Commander.

10 Αποθήκευση ενός γραφήματος σε αρχείο

Η εξαγωγή του διαγράμματος σε ξεχωριστό αρχείο περιγράφεται στην παρατήρηση Αποθήκευση ενός γραφήματος σε αρχείο.


  1. Επικοινωνία: Επαμεινώνδας Διαμαντοπουλος, Τμήμα ΗΜ/ΜΥ, Δ.Π.Θ. Email: . Τηλ: 25410 79757, 6944683327↩︎