Δεδομένα από 16 ενήλικες εθελοντές οι οποίοι την ακολούθησαν πιστά για 12 μήνες.
Το βάρος μετρήθηκε στην αρχή, στους 6 και στους 12 μήνες
και τα αποτελέσματα καταχωρήθηκαν στις μεταβλητές weight1, weight2 και weight3.
 

# 16 adults followed a diet for 12 months. 
# 3 weight measurements at time 0, 6 and 12 months (weight1, weight2 and weight3 resp.)
gender = c(0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1)
gender = factor(gender, levels = c(0, 1), labels = c("Woman", "Man"))
contrasts(gender) = contr.helmert
weight1 = c(81.2, 76.7, 75.7, 81.2, 71.7, 71.2, 68.5, 89.8, 107.5, 105.7, 99.3, 100.7, 90.3, 105.7, 98.0, 116.6)
weight2 = c(78.0, 73.0, 73.0, 78.5, 69.9, 64.9, 63.5, 87.1, 102.1, 102.5, 97.1, 95.3, 87.5, 102.5, 93.4, 112.9)
weight3 = c(78.4, 72.1, 73.7, 78.5, 69.7, 65.4, 63.3, 85.5, 101.3, 102.2, 95.7, 93.9, 86.5, 102.5, 93.9, 113.9)
dataF = data.frame(gender, weight1, weight2, weight3)


1. Συνοπτική περιγραφή δεδομένων

my.summary = function(avar){
  return (paste(round(mean(avar), 1), " (", round(sd(avar), 1), ")"))
}

for(column in 2:4){
  print(my.summary(dataF[,column]))
  print(my.summary(dataF[,column][dataF$gender == "Woman"]))
  print(my.summary(dataF[,column][dataF$gender == "Man"])) 
}


2. Ορισμός του χρονικού παράγοντα

time = factor(rep("weight_measurement", 3), levels=c("weight1", "weight2", "weight3"))
time[1] = "weight1"; time[2] = "weight2"; time[3] = "weight3"
idata = data.frame(time)


3. Υπολογισμός του γραμμικού μοντέλου επαναλαμβανόμενων μετρήσεων

mod.ok = lm(cbind(weight1, weight2, weight3) ~ gender, data=dataF)
library(car)
av.ok = Anova(mod.ok, idata=idata, idesign=~time, type = "III") 
summary(av.ok, multivariate=FALSE)


4. Υπόλοιπα του γραμμικού μοντέλου

allresiduals = as.data.frame(residuals(mod.ok))


5. Κανονικότητα της κατανομής των υπολοίπων 

library(moments)
lapply(allresiduals, skewness)
lapply(allresiduals, kurtosis)
lapply(allresiduals, shapiro.test)


6. Αναδιάταξη των δεδομένων, από πολλές στήλες σε μία.

library(afex)
dataF$id = rep(1:16)
data.long = data.frame(dataF[5], dataF[1], stack(dataF[2:4]))


6.1 Μετονομασία των στηλών (όχι απαραίτητο βήμα)

library(plyr)
data.long = rename(data.long, c("values"="weight", "ind"="time"))


7. Υπολογισμός των στατιστικών σημαντικοτήτων σύμφωνα με τη διόρθωση κατά Huynh - Feldt
(necessary when sphericity is not assumed. The user should be aware from step 3)

rmd2 = aov_ez("id", "weight", data.long, between = c("gender"), within = c("time"), anova_table=list(correction = "HF", es = "none"))
nice(rmd2)


8. Αλλαγή των labels από weight1, weight2, weight3 σε 1η, 2η, 3η

data.long$time=revalue(data.long$time, c("weight1"="1st", "weight2"="2nd", "weight3"="3rd"))


9. Δημιουργία του διαγράμματος

par(mar=c(5.1, 4.1, 4.1, 8.1), xpd=TRUE)
interaction.plot(data.long$time, data.long$gender, data.long$weight, type="b", col=c("red","blue"), legend=F,
                 lty=c(1,2), lwd=2, pch=c(18,24), xlab="Measurement",  ylab="Weight",
                 main="Weight evolution by gender", ylim = c(65, 105))


9.1 Προσθήκη υπομνήματος

legend("topright",c("Woman","Man"), bty="n", lty=c(1,2), lwd=2, pch=c(18,24), col=c("red","blue"), title="Gender",inset=c(-0.5,0))


10. Εύρεση συντεταγμένων: Μετά την εκτέλεση της locator(6) ο χρή-στης επιλέγει με το ποντίκι πάνω στο διάγραμμα τα 6 σημεία όπου επιθυμεί να εμφανιστούν οι ετικέτες.
 Προσοχή: Η σειρά που θα επιλεγούν πρέπει να είναι η ίδια η σειρά των επιπέδων στους παράγοντες, δηλαδή
 Γυναίκα - 1η, Γυναίκα - 2η, Γυναίκα - 3η, ?νδρας - 1η, ?νδρας - 2η, ?νδρας - 3η.
 

coord_for_labels = locator(6)


9.1 Τοποθέτηση των ετικετών (αντίστοιχες μέσες τιμές)

counter = 1
for (agender in levels(data.long$gender)) {
  for (ameasurement in levels(data.long$time)) {
      meantoshow = mean(data.long[ which(data.long$gender==agender & data.long$time == ameasurement), ]$weight)
      text(coord_for_labels$x[counter], coord_for_labels$y[counter], round(meantoshow, 1), pos=3) 
      counter = counter + 1
    }
}