I dati sono stati rilevati tramite un dispositivo indossabile (mi band 4) indossato dal sottoscritto.
La durata della raccolta dei dati va dal 15/09/2019 al 6/12/2020. Il dispositivo indossabile ha dei sensori che registrano in continuazione il battito cardiaco e il sonno, suddividendolo a sua volta tra sonno profondo e sonno leggero. Successivamente si sono trasferiti i dati dal bracciale al telefono che, tramite un’applicazione, ha elaborato i dati raccolti. I dati, poi, sono stati esportati in formato ‘csv’ dall’applicazione al computer e contengono le seguenti informazioni:
Data: Data della registrazione dei dati, data in formato gg/mm/aaaaGiorno: Giorno della settimana in cifre (es. lunedì=1)Giorno lettere: Giorno della settimana in lettereMese: Numero del mese corrispondenteOra inizio: Ora in cui è stato registrato l’inizio del sonnoOra fine: Ora in cui è stata registrata la fine del sonnoinizioT : Data della registrazione dei dati, data in formato gg/mm/aaaa hh.mmInizio sonno: Data della registrazione all’inizio del sonno, data senza formattazione (per una precisa lettura da parte del programma)Fine sonno: Data della registrazione della fine del sonno, data senza formattazione (per una precisa lettura da parte del programma)Sonno totale : Durata in minuti del sonnoSonno profondo : Durata in minuti del sonno profondoSonno leggero: Durata in minuti del sonno leggeroBattito medio: Media delle registrazioni del battito cardiacoBattito Max : Valore massimo del battito del cuore registrato nel sonnoBattito Min : Valore minimo del battito del cuore registrato nel sonnosonnoGrezzo=read.table(file = "/Users/Erik/OneDrive - Università degli Studi di Trieste/Dati/SonnoSinteticoOriginale.csv", header = TRUE, sep = ";")
sonnoGrezzo[1:5,]
## Inizio.sonno Fine.sonno Sonno.totale Sonno.profondo Sonno.leggero
## 1 1,56851E+12 1,56853E+12 267 148 119
## 2 1,56853E+12 1,56854E+12 133 39 94
## 3 1,56859E+12 1,56862E+12 457 78 379
## 4 1,56867E+12 1,56871E+12 614 188 426
## 5 1,56872E+12 1,56873E+12 25 0 25
## Battito.medio Battito.Max Battito.Min Qualit..del.sonno
## 1 65 76 52 Sonno molto buono
## 2 63 108 46
## 3 55 95 45 Sonno pessimo
## 4 65 102 48 Sonno molto buono
## 5 62 76 55
Prima di importare i dati in R li si ha adattati e semplificati per una migliore lettura, nello specifico:
La data di inzio sonno e fine sonno contenevano all’interno giorno, mese, anno, ora e minuti. Con Excel la separazione di questi dati risulta molto più semplice e intuitiva che con R.
Il giorno di inizio sonno, nei casi in cui il sonno iniziava prima della mezzanotte, veniva segnato il giorno prima e quindi è stato aggiustato.
Spesso, a causa della scarsa aderenza con la pelle, l’orologio non rivela correttamente il sonno e si ottiene un insieme di intervalli separati per la stessa giornata. Evento analogo avviene anche nel caso in cui ci si sveglia durante la notte o si fa un pisolino pomeridiano. Per ovviare ciò è stato creato un algoritmo per l’unione delle rilevazioni fatte lo stesso giorno.
Si crea così anche un altro problema, bisogna riconoscere i pisolini pomeridiani da quando ci si addormenta prima della mezzanotte, in modo da non spostare anche i pisolini nel giorno successivo. Per questo problema è stato risolto con Excel tramite la formula =INT(SE(ORA([@[Inizio sonno]])<13;(ORA([@[Inizio sonno]])+24)*100+(MINUTO([@[Inizio sonno]])/0,6);ORA([@[Inizio sonno]])*100+(MINUTO([@[Inizio sonno]])/0,6))), in questa formula i numeri sono stati moltiplicati per 100 così da evitare la \(,\) che successivamente nella formula as.integer() avrebbe dato errore.
Dalla data si è estrapolato il giorno della settimana corrispondente, anche in questo caso Excel ha aiutato di molto con la formula =CERCA.VERT(GIORNO.SETTIMANA([@Data];2);R1:S7;2)
Dì.settimana non c’è dubbio del giorno della settimana in cui ci si sia addormentati, mentre per l’orario di inizio Ora.inizio ha spesso un margine di errore di una decina di minuti. Lo strumento con la quale viene analizzato il battito cardiaco ha una sensibilità di 1 bpm.Quindi i dati sono validi, rappresentativi (eccetto Mese) e affidabili (anche se non del tutto per la scarsa precisione degli strumenti).
dati = read.table(file = "/Users/Erik/OneDrive - Università degli Studi di Trieste/Dati/sonnoR.csv", header = TRUE, sep = ";")
datiPuliti = table(NULL)
posizionei = c()
posizionek = c()
posizioneUltima = c()
giorno2 = c()
i = 1
ultimoDatoDoppio = 0
datiElaborati = table(NULL)
vettIndice = c(1:length(dati$Giorno))
#controlla quanti dati appartengono allo stesso giorno
while (i < length(dati$Giorno))
{
if (i > 1) {
if (dati$Giorno[i - 1] != dati$Giorno[i]) {
#se il giorno prima è diverso dal giorno attuale
j=i
while (dati$Giorno[i] == dati$Giorno[j]) {
posizionei = c(posizionei, i)
giorno2 = c(giorno2, dati$Giorno[i])
if (j != length(dati$Giorno)) {
kult = j
j = j + 1
}
if(j == length(dati$Giorno)){ #ho dovuto sostituire il else a causa di un errore sconosciuto
#così esce sicuro dal ciclo
posizionei = c(posizionei, i)
giorno2 = c(giorno2, dati$Giorno[i])
kult = j
j = i-1
}
}
for (k in i:kult) {
posizionek = c(posizionek, kult)
}
}
} else{
#caso i=1
j = i
while (dati$Giorno[i] == dati$Giorno[j]) {
posizionei = c(posizionei, i)
giorno2 = c(giorno2, dati$Giorno[i])
kult = j
j = j + 1
}
for (k in i:kult) {
posizionek = c(posizionek, kult)
}
}
i = i + 1
}
datiPuliti = matrix(c(vettIndice, posizionei, posizionek, giorno2),
ncol = 4,
byrow = FALSE)
dimnames(datiPuliti) = list(1:length(posizionei),
c("vettIndice", "posizionei", "posizionek", "giorno2"))
#somme e medie
datiElaborati = matrix()
data=c()
giornoSettimana = c()
g=c()
diSettimana=c()
oraInizio=c()
oraFine=c()
giorno = c()
mese = c()
inizioSonno = c()
fineSonno = c()
sonnoTot = c()
sonnoPro = c()
sonnoLeg = c()
battitoMed = c()
battitoMax = c()
battitoMin = c()
i = 1
while (i < length(dati$Giorno)) {
if (datiPuliti[i, 2] != datiPuliti[i, 3]) {
fine = as.integer(datiPuliti[i, 3])
data=c(data,dati$Data[i])
giornoSettimana = c(giornoSettimana, dati$Giorno.della.setimana[i])
g=c(g,dati$Giorno[i])
diSettimana=c(diSettimana,dati$Giorno.lettere[i])
oraInizio=c(oraInizio,dati$Ora.inizio[i])
oraFine=c(oraFine,dati$Ora.fine[i])
giorno = c(giorno, dati$Giorno[i])
mese = c(mese, dati$Mese[i])
inizioSonno = c(inizioSonno, dati$Inizio.sonno[i])
fineSonno = c(fineSonno, dati$Fine.sonno[fine])
sommaSonnoTot = sum(dati$Sonno.totale[c(i:fine)])
sommaSonnoPro = sum(dati$Sonno.profondo[c(i:fine)])
sommaSonnoLeg = sum(dati$Sonno.leggero[c(i:fine)])
mediaBattitoMed = mean(dati$Battito.medio[c(i:fine)])
mediaBattitoMax = max(dati$Battito.Max[c(i:fine)])
mediaBattitoMin = min(dati$Battito.Min[c(i:fine)])
sonnoTot = c(sonnoTot, sommaSonnoTot)
sonnoPro = c(sonnoPro, sommaSonnoPro)
sonnoLeg = c(sonnoLeg, sommaSonnoLeg)
battitoMed = c(battitoMed, mediaBattitoMed)
battitoMax = c(battitoMax, mediaBattitoMax)
battitoMin = c(battitoMin, mediaBattitoMin)
i = fine + 1
} else{
#caso solo 1 dato per giorno
g=c(g,dati$Giorno[i])
data=c(data,dati$Data[i])
giornoSettimana = c(giornoSettimana, dati$Giorno.della.setimana[i])
diSettimana=c(diSettimana,dati$Giorno.lettere[i])
oraInizio=c(oraInizio,dati$Ora.inizio[i])
oraFine=c(oraFine,dati$Ora.fine[i])
giorno = c(giorno, dati$Giorno[i])
mese = c(mese, dati$Mese[i])
inizioSonno = c(inizioSonno, dati$Inizio.sonno[i])
fineSonno = c(fineSonno, dati$Fine.sonno[i])
sonnoTot = c(sonnoTot, dati$Sonno.totale[i])
sonnoPro = c(sonnoPro, dati$Sonno.profondo[i])
sonnoLeg = c(sonnoLeg, dati$Sonno.leggero[i])
battitoMed = c(battitoMed, dati$Battito.medio[i])
battitoMax = c(battitoMax, dati$Battito.Max[i])
battitoMin = c(battitoMin, dati$Battito.Min[i])
i = i + 1
}
}
#intestazione
intestazione = c(
"Data",
"Giorno",
"Dì settimana",
"Ora inizio",
"Ora fine",
"Mese",
"Inizio sonno",
"Fine sonno",
"Sonno totale",
"Sonno profondo",
"Sonno leggero",
"Media battito cardiaco",
"Max battito cardiaco",
"Min battito cardiaco"
)
datiElaborati = matrix(
c(
data,
giorno,
diSettimana,
oraInizio,
oraFine,
mese,
inizioSonno,
fineSonno,
sonnoTot,
sonnoPro,
sonnoLeg,
battitoMed,
battitoMax,
battitoMin
),
ncol = 14
)
dimnames(datiElaborati) = list(NULL, intestazione)
frame = data.frame(datiElaborati)
framePulito = data.frame(NULL)
#Conversione dei dati in numeri
frame = transform(frame,
Ora.fine = as.integer(Ora.fine))
frame = transform(frame,
Ora.inizio = as.integer(Ora.inizio))
frame = transform(frame,
Sonno.totale = as.integer(Sonno.totale))
frame = transform(frame,
Sonno.profondo = as.integer(Sonno.profondo))
frame = transform(frame,
Sonno.leggero = as.integer(Sonno.leggero))
frame = transform(frame,
Media.battito.cardiaco = as.integer(Media.battito.cardiaco))
frame = transform(frame,
Max.battito.cardiaco = as.integer(Max.battito.cardiaco))
frame = transform(frame,
Min.battito.cardiaco = as.integer(Min.battito.cardiaco))
frame[1:5,]
## Data Giorno Dì.settimana Ora.inizio Ora.fine Mese Inizio.sonno
## 1 15/09/2019 7 Domenica 2728 773 Settembre 43723,13681
## 2 16/09/2019 1 Lunedì 2580 941 Settembre 43724,075
## 3 17/09/2019 2 Martedì 2370 993 Settembre 43724,9875
## 4 18/09/2019 3 Mercoledì 2411 725 Settembre 43726,00486
## 5 19/09/2019 4 Giovedì 1970 -305 Settembre 43726,82083
## Fine.sonno Sonno.totale Sonno.profondo Sonno.leggero Media.battito.cardiaco
## 1 43723,43264 400 187 213 64
## 2 43724,39236 457 78 379 55
## 3 43725,62639 639 188 451 63
## 4 43726,30208 428 166 261 58
## 5 43727,60833 635 268 367 42
## Max.battito.cardiaco Min.battito.cardiaco
## 1 108 46
## 2 95 45
## 3 102 48
## 4 94 48
## 5 94 0
frame[frame$Media.battito.cardiaco<40,]
## Data Giorno Dì.settimana Ora.inizio Ora.fine Mese Inizio.sonno
## 38 22/10/2019 2 Martedì 2328 693 Ottombre 43759,97014
## 46 30/10/2019 3 Mercoledì 1911 -360 Ottombre 43767,79653
## 47 31/10/2019 4 Giovedì 1965 -302 Ottombre 43768,81875
## 48 01/11/2019 5 Venerdì 2825 848 Novembre 43770,17708
## 49 02/11/2019 6 Sabato 2901 1045 Novembre 43771,20903
## 156 21/02/2020 5 Venerdì 1968 -302 Febbraio 43881,82014
## 387 15/10/2020 4 Giovedì 3083 781 Ottombre 44119,28472
## 427 25/11/2020 3 Mercoledì 2318 615 Novembre 44159,96597
## 428 26/11/2020 4 Giovedì 2283 763 Novembre 44160,95139
## 434 02/12/2020 3 Mercoledì 1918 -374 Dicembre 44166,79931
## 435 03/12/2020 4 Giovedì 1918 -340 Dicembre 44167,79931
## Fine.sonno Sonno.totale Sonno.profondo Sonno.leggero
## 38 43760,28889 459 207 252
## 46 43768,35694 607 126 478
## 47 43769,35417 599 212 387
## 48 43770,67847 373 141 232
## 49 43771,43542 326 145 134
## 156 43882,26944 516 178 338
## 387 44119,32569 59 9 50
## 427 44160,25625 418 152 266
## 428 44161,31806 528 170 358
## 434 44167,24931 550 244 306
## 435 44168,43472 855 263 591
## Media.battito.cardiaco Max.battito.cardiaco Min.battito.cardiaco
## 38 0 0 0
## 46 0 0 0
## 47 0 0 0
## 48 0 0 0
## 49 0 0 0
## 156 28 94 0
## 387 0 0 0
## 427 0 0 0
## 428 0 0 0
## 434 19 94 0
## 435 27 81 0
Come si può vedere non sempre il bracciale registra correttamente i dati, ci sono volte in cui, magari per la scarsa aderenza al polso, non viene registrato il battito cardiaco.
In altri casi, invece, ho indossato il bracciale soltanto durante il giorno (in cui magari ho fatto un pisolino) e la notte ho scordato di indossarlo, in questo caso la durata del sonno sarà molto breve e andrà a rovinare le statistiche.
Ci sono moltissimi altri fattori che influenzano la corretta registrazione dei dati. Dato che la mole di dati è significativa e andarli ad analizzare singolarmente sarebbe troppo laborioso, si è scelto di fare una ‘scrematura’ automatica dei dati.
Note: Nel primo ciclo è stato messo un while in modo tale che a ogni giro del ciclo viene ricalcolata la lunghezza. Infatti ogni volta che vengono trovati dei valori anomali viene eliminata l’intera riga (frame=frame[-c(i),])e la lunghezza del frame viene modificata
i = 1
while (i < length(frame[, 1]))
{
if (frame$Media.battito.cardiaco[i] < 40)
{
frame = frame[-c(i),]
}
if (frame$Media.battito.cardiaco[i] < 40)
{
frame = frame[-c(i),]
}
if (frame$Media.battito.cardiaco[i] > 90)
{
frame = frame[-c(i),]
}
if (frame$Max.battito.cardiaco[i] > 140)
{
frame = frame[-c(i),]
}
if (frame$Sonno.totale[i] < 180)
{
frame = frame[-c(i),]
}
if (frame$Sonno.totale[i] > 800)
{
frame = frame[-c(i),]
}
if (frame$Min.battito.cardiaco[i] < 40)
{
frame = frame[-c(i),]
}
if (frame$Max.battito.cardiaco[i] < 40) {
frame = frame[-c(i),]
}
i = i + 1
}
Osservando i dati si nota una correlazione tra il battito cardiaco (media, minimo e massimo) con i giorni della settimana, escludendo che la causa del variare della media nei diversi giorni della settimana siano proprio i giorni della settimana, allora si è provato a vedere se è correlate con la durata del sonno (totale, profondo, leggero) oppure con l’ora dell’inizio o della fine del sonno.
Per approfondire l’analisi si è scelto di inserire i dati sulla spesa che l’individuo esaminato effettua. I dati sono stati registrati tramite un’applicazione sul telefono in cui per ogni record sono stati inseriti: l’importo, la data, la posizione, la categoria, le etichette che riguardano in cosa è stato speso e con che gruppo di persone.
spesaGrezza=read.csv('/Users/Erik/OneDrive - Università degli Studi di Trieste/Dati/SpesaGrezza.csv',header = TRUE,sep = ';')
spesaGrezza[1695:1701,]
## account category currency amount ref_currency_amount type
## 1695 Contanti Ristoranti & Fast-food EUR -2,1 -2,1 Spese
## 1696 Chiavetta Bar & Locali EUR -0,5 -0,5 Spese
## 1697 Contanti Ristoranti & Fast-food EUR -1,5 -1,5 Spese
## 1698 Contanti Bar & Locali EUR -9 -9 Spese
## 1699 Chiavetta Bar & Locali EUR -0,43 -0,43 Spese
## 1700 Contanti Ristoranti & Fast-food EUR -2,1 -2,1 Spese
## 1701 Contanti Abbigliamento EUR -5 -5 Spese
## payment_type payment_type_local note date gps_latitude
## 1695 CASH Contanti 43425,57645 45,6529
## 1696 CASH Contanti 43425,45232 45,64407
## 1697 CASH Contanti 43425,38111 45,63992
## 1698 CASH Contanti 43425,38083 45,63992
## 1699 CASH Contanti 43424,63205 45,64975
## 1700 CASH Contanti 43424,63184 45,64975
## 1701 CASH Contanti 43424,63123 45,65017
## gps_longitude gps_accuracy_in_meters warranty_in_month transfer payee
## 1695 13,77837 1200 0 FALSO
## 1696 13,76635 14 0 FALSO
## 1697 13,78332 15 0 FALSO
## 1698 13,78332 15 0 FALSO
## 1699 13,77688 15 0 FALSO
## 1700 13,77688 15 0 FALSO
## 1701 13,77554 15 0 FALSO
## labels envelope_id custom_category
## 1695 Scuola|Pranzo 1001 FALSO
## 1696 CaffŠ|Scuola 1002 FALSO
## 1697 Cena|Sera 1001 FALSO
## 1698 Sera|Scuola|Cocktail 1002 FALSO
## 1699 CaffŠ|Scuola 1002 FALSO
## 1700 Scuola|Pranzo 1001 FALSO
## 1701 2000 FALSO
Si è prima effettuata una elaborazione dei dati con Excel dove si sono create delle liste indicatrici che indicassero se in quel giorno si fosse o meno restati fuori la sera, bevuto alcolici e nello specifico se era birra o altro. La formula utilizzata è stata la seguente: =SE(SOMMA.SE(RecordSpesa[ggmmaaaa];[@ggmmaaaa];RecordSpesa[Serata])>0;1;0)
Mentre per registrare la spesa effettuata nel corso della serata la formula è stata la seguente: =ASS(SOMMA.SE(RecordSpesa[ggmmaaaa];[@ggmmaaaa];RecordSpesa[spesa alcol]))*10
Successivamente i dati sono stati inseriti all’interno di un file csv e importati in RStudio e uniti al data frame principale.
sera=read.table('/Users/Erik/OneDrive - Università degli Studi di Trieste/Dati/serata.csv',header = TRUE,sep = ';')
data=c()
giornoSettimana = c()
diSettimana = c()
oraInizio = c()
oraFine = c()
giorno = c()
mese = c()
inizioSonno = c()
fineSonno = c()
sonnoTot = c()
sonnoPro = c()
sonnoLeg = c()
battitoMed = c()
battitoMax = c()
battitoMin = c()
alcol = c()
serata = c()
birra = c()
cocktail = c()
spesa = c()
for (i in 1:length(sera$Data))
{
for (j in 1:length(frame$Data))
{
if (grepl(sera$Data[i], frame$Data[j])) {
data = c(data, frame$Data[j])
giorno = c(giorno, frame$Giorno[j])
diSettimana = c(diSettimana, frame$Dì.settimana[j])
mese = c(mese, frame$Mese[j])
oraInizio = c(oraInizio, frame$Ora.inizio[j])
oraFine = c(oraFine, frame$Ora.fine[j])
inizioSonno = c(inizioSonno, frame$Inizio.sonno[j])
fineSonno = c(fineSonno, frame$Fine.sonno[j])
sonnoTot = c(sonnoTot, frame$Sonno.totale[j])
sonnoPro = c(sonnoPro, frame$Sonno.profondo[j])
sonnoLeg = c(sonnoLeg, frame$Sonno.leggero[j])
battitoMed = c(battitoMed, frame$Media.battito.cardiaco[j])
battitoMax = c(battitoMax, frame$Max.battito.cardiaco[j])
battitoMin = c(battitoMin, frame$Min.battito.cardiaco[j])
alcol = c(alcol, sera$Alcol[i])
serata = c(serata,sera$Serata[i])
birra = c(birra,sera$birra[i])
cocktail = c(cocktail,sera$cocktail[i])
spesa = c(spesa,sera$spesa[i])
}
}
}
datiElaborati = matrix(
c(
diSettimana,
oraInizio,
oraFine,
mese,
sonnoTot,
sonnoPro,
sonnoLeg,
battitoMed,
battitoMax,
battitoMin,
alcol,
serata,
birra,
cocktail,
spesa
),
ncol = 15
)
intestazioneMaggiorata = c(
"Dì settimana",
"Ora inizio",
"Ora fine",
"Mese",
"Sonno totale",
"Sonno profondo",
"Sonno leggero",
"Media battito cardiaco",
"Max battito cardiaco",
"Min battito cardiaco",
"Alcol",
"Serata",
"Birra",
"Cocktail",
"Spesa"
)
dimnames(datiElaborati) = list(data, intestazioneMaggiorata)
datiIncrociati = data.frame(datiElaborati)
datiIncrociati = transform(datiIncrociati,
Ora.fine = as.integer(Ora.fine))
datiIncrociati = transform(datiIncrociati,
Ora.inizio = as.integer(Ora.inizio))
datiIncrociati = transform(datiIncrociati,
Sonno.totale = as.integer(Sonno.totale))
datiIncrociati = transform(datiIncrociati,
Sonno.profondo = as.integer(Sonno.profondo))
datiIncrociati = transform(datiIncrociati,
Sonno.leggero = as.integer(Sonno.leggero))
datiIncrociati = transform(datiIncrociati,
Media.battito.cardiaco = as.integer(Media.battito.cardiaco))
datiIncrociati = transform(datiIncrociati,
Max.battito.cardiaco = as.integer(Max.battito.cardiaco))
datiIncrociati = transform(datiIncrociati,
Min.battito.cardiaco = as.integer(Min.battito.cardiaco))
datiIncrociati = transform(datiIncrociati,
Alcol = as.integer(Alcol))
datiIncrociati = transform(datiIncrociati,
Serata = as.integer(Serata))
datiIncrociati = transform(datiIncrociati,
Birra = as.integer(Birra))
datiIncrociati = transform(datiIncrociati,
Cocktail = as.integer(Cocktail))
datiIncrociati = transform(datiIncrociati,
Spesa = as.integer(Spesa))
livelloMese = c(
"Gennaio",
"Febbraio",
"Marzo",
"Aprile",
"Maggio",
"Giugno",
"Luglio",
"Agosto",
"Settembre",
"Ottombre",
"Novembre",
"Dicembre"
)
livelloSettimana = c("Lunedì",
"Martedì",
"Mercoledì",
"Giovedì",
"Venerdì",
"Sabato",
"Domenica")
#cancellazione di alcuni dati anomali
i=1
while (i<length(datiIncrociati[, 1]))
{
if (datiIncrociati$Media.battito.cardiaco[i] < 40)
{
datiIncrociati = datiIncrociati[-c(i), ]
}
i=i+1
}
str(datiIncrociati)
## 'data.frame': 411 obs. of 15 variables:
## $ Dì.settimana : chr "Domenica" "Lunedì" "Martedì" "Mercoledì" ...
## $ Ora.inizio : int 2728 2580 2370 2411 2376 2278 2893 2306 2371 2306 ...
## $ Ora.fine : int 773 941 993 725 581 811 651 695 5 623 ...
## $ Mese : chr "Settembre" "Settembre" "Settembre" "Settembre" ...
## $ Sonno.totale : int 400 457 639 428 363 560 332 473 501 471 ...
## $ Sonno.profondo : int 187 78 188 166 162 142 149 132 55 176 ...
## $ Sonno.leggero : int 213 379 451 261 201 418 183 340 446 295 ...
## $ Media.battito.cardiaco: int 64 55 63 58 56 54 59 54 64 55 ...
## $ Max.battito.cardiaco : int 108 95 102 94 86 94 86 95 118 81 ...
## $ Min.battito.cardiaco : int 46 45 48 48 47 47 47 45 45 46 ...
## $ Alcol : int 0 0 0 0 0 0 0 0 0 1 ...
## $ Serata : int 0 0 0 0 0 1 0 0 0 1 ...
## $ Birra : int 0 0 0 0 0 0 0 0 0 1 ...
## $ Cocktail : int 0 0 0 0 0 0 0 0 0 1 ...
## $ Spesa : int 0 0 0 0 0 0 0 0 0 705 ...
L’obbiettivo di questa indagine è scoprire quali parametri influenzano o sono correlati con il sonno e con il battito cardiaco. Nello specifico si andrà a cercare se e quanto i parametri a nostra disposizione spiegano il sonno o il battito cardiaco.
Un aspetto interessante potrebbe essere verificare eventuali differenze tra sonno e alcol, oppure tra battito cardiaco e alcol.
Dovremo tenere conto che certe variabili, ad esempio alcol e giorno della settimana possano essere correlate e di conseguenza la relazione con la risposta dell’una e dell’altra potrebbero confondersi.
par(mfrow = c(1, 3))
variabile = datiIncrociati$Sonno.totale
hist(
variabile,
xlab = LabSonnoTot,
ylab = LabDensita,
main = "",
br = 20,
freq = FALSE
)
curve(dnorm(x, mean(variabile), sd(variabile)),
add = TRUE,
xlim = range(variabile))
variabile = datiIncrociati$Sonno.profondo
hist(
variabile,
xlab = LabSonnoPro,
ylab = LabDensita,
main = "",
br = 20,
freq = FALSE
)
curve(dnorm(x, mean(variabile), sd(variabile)),
add = TRUE,
xlim = range(variabile))
variabile = datiIncrociati$Sonno.leggero
hist(
variabile,
xlab = LabSonnoLeg,
ylab = LabDensita,
main = "",
br = 20,
freq = FALSE
)
curve(dnorm(x, mean(variabile), sd(variabile)),
add = TRUE,
xlim = range(variabile))
Interessante osservare la distribuzione dell’ora di inizio e di fine che si distribuiscono come una normale univariata asimmetrica e con curtosi
variabile=datiIncrociati$Ora.fine
ggplot(datiIncrociati, aes(x = variabile)) +
geom_histogram(aes(y = ..density..),
fill = 'red',
alpha = 0.6,
bins = 50) +
geom_density(colour = 'blue',fill='blue',alpha=0.1,kernel="gaussian",adjust=0.9) +
geom_density(colour = 'green',fill='green',alpha=0.1,kernel="gaussian",adjust=5) +
xlab(LabFine) +
ylab(LabDensita)
Nel grafico sottostante è presente la densità approssimata della media del battito cardiaco rapportata ai nei diversi giorni della settimana.
Giorno=as.factor(datiIncrociati$Dì.settimana)
variabile=datiIncrociati$Min.battito.cardiaco
mu <- ddply(datiIncrociati,"Giorno", summarise, grp.mean=mean(Min.battito.cardiaco))
p<-ggplot(datiIncrociati, aes(x=variabile, color=Giorno)) +
geom_density()+
geom_vline(data=mu, aes(xintercept=grp.mean, color=Giorno),
linetype="dashed")+
xlim(range(variabile))+
ylab(LabDensita)+
xlab(LabMedBpm)
p
datiIncrociati$Alcol=as.factor(datiIncrociati$Alcol)
datiIncrociati$Mese = factor(x = datiIncrociati$Mese,
levels = livelloMese,
ordered = TRUE)
ggplot(datiIncrociati,
aes(
x = Mese,
y = Media.battito.cardiaco,
fill = Alcol
)) +
theme(
legend.box.spacing = unit(0, "cm"),
legend.position = "top",
legend.background = element_blank(),
axis.text = element_text(size = rel(0.78))
) +
ylab(label = element_blank())+
geom_boxplot()
kable(t(table(datiIncrociati$Mese[datiIncrociati$Alcol==1])))
| Gennaio | Febbraio | Marzo | Aprile | Maggio | Giugno | Luglio | Agosto | Settembre | Ottombre | Novembre | Dicembre |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 4 | 10 | 3 | 2 | 10 | 10 | 15 | 10 | 15 | 21 | 6 | 2 |
Si può notare che durante il mese di aprile non c’è stata nessuna spesa in Cocktail a causa delle misure adottate per il Covid discorso simile per il mese di novembre. Invece nel mese di gennaio e giugno una possibile giustificazione dei scarsi dati può essere giustificata dalla sessione di esami e quindi dalla mancanza di tempo per lo svago. Questo influisce sulla rappresentatività dei dati per la variabile Mese cosa diversa invece per le altre variabili esplicative.
cocktail=as.factor(datiIncrociati$Cocktail)
datiIncrociati$Dì.settimana=factor(x = datiIncrociati$Dì.settimana,levels = livelloSettimana,ordered = TRUE)
ggplot(datiIncrociati, aes(x=as.factor(Dì.settimana), y=Media.battito.cardiaco, fill=cocktail)) +
theme(
legend.box.spacing = unit(0, "cm"),
legend.position = "top",
legend.background = element_blank(),
axis.text = element_text(size = rel(1))
) +
geom_boxplot()+
xlab(LabDi)+
ylab(LabMedBpm)
Di seguito riportiamo la numerosità del campione in cui si verifica il parametro Cocktail nei diversi giorni della settimana in modo da facilitare la lettura del grafico soprastante.
kable(t(table(datiIncrociati$Dì.settimana[datiIncrociati$Cocktail==1])))
| Lunedì | Martedì | Mercoledì | Giovedì | Venerdì | Sabato | Domenica |
|---|---|---|---|---|---|---|
| 0 | 4 | 11 | 8 | 16 | 29 | 5 |
Iniziamo dal modello, provo inizialmente a inserire tutte le variabili a disposizione \[ Y = \beta_1+ \beta_2 dìDellaSettimana + \beta_3 sonnoProfondo + ... + \beta_J Mese+ errore \] dove \(Y\) è la media del battito cardiaco durante il sonno. Subito a prima vista si possono osservare diverse correlazioni tra le variabili.
fit=lm(Media.battito.cardiaco~.,data=datiIncrociati)
summary(fit)
##
## Call:
## lm(formula = Media.battito.cardiaco ~ ., data = datiIncrociati)
##
## Residuals:
## Min 1Q Median 3Q Max
## -8.1346 -2.0904 -0.2493 1.5730 16.7211
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -8.9270542 3.9370989 -2.267 0.023924 *
## Dì.settimana.L 1.7705314 0.5628700 3.146 0.001788 **
## Dì.settimana.Q 0.0915745 0.4975254 0.184 0.854064
## Dì.settimana.C 0.5376684 0.4900628 1.097 0.273272
## Dì.settimana^4 -0.0601170 0.4930105 -0.122 0.903012
## Dì.settimana^5 -0.1943349 0.4950691 -0.393 0.694878
## Dì.settimana^6 -0.8457706 0.4966628 -1.703 0.089401 .
## Ora.inizio 0.0039318 0.0010989 3.578 0.000391 ***
## Ora.fine -0.0019367 0.0008145 -2.378 0.017918 *
## Mese.L 0.4754008 0.6441619 0.738 0.460960
## Mese.Q -0.6214438 0.7062286 -0.880 0.379443
## Mese.C -1.1603207 0.6734585 -1.723 0.085713 .
## Mese^4 -0.2033056 0.6448796 -0.315 0.752736
## Mese^5 -0.4169304 0.6578764 -0.634 0.526623
## Mese^6 -0.7773938 0.6365783 -1.221 0.222763
## Mese^7 0.6455431 0.6429471 1.004 0.315998
## Mese^8 -0.7410894 0.6305897 -1.175 0.240636
## Mese^9 -1.3304130 0.6365715 -2.090 0.037283 *
## Mese^10 2.5337336 0.6676095 3.795 0.000172 ***
## Mese^11 1.1109416 0.6855964 1.620 0.105973
## Sonno.totale 0.0662817 0.0300781 2.204 0.028146 *
## Sonno.profondo -0.0583933 0.0303614 -1.923 0.055191 .
## Sonno.leggero -0.0602852 0.0304665 -1.979 0.048565 *
## Max.battito.cardiaco 0.1946107 0.0215055 9.049 < 2e-16 ***
## Min.battito.cardiaco 0.8198036 0.0525965 15.587 < 2e-16 ***
## Alcol1 2.3295592 1.2923412 1.803 0.072243 .
## Serata -0.7685680 0.7579544 -1.014 0.311225
## Birra -1.4738533 0.9206677 -1.601 0.110238
## Cocktail 0.7318675 1.0195346 0.718 0.473293
## Spesa -0.0019779 0.0020759 -0.953 0.341301
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.626 on 381 degrees of freedom
## Multiple R-squared: 0.6928, Adjusted R-squared: 0.6694
## F-statistic: 29.62 on 29 and 381 DF, p-value: < 2.2e-16
fitb=stepAIC(fit,direction = "both")
## Start: AIC=1087.61
## Media.battito.cardiaco ~ Dì.settimana + Ora.inizio + Ora.fine +
## Mese + Sonno.totale + Sonno.profondo + Sonno.leggero + Max.battito.cardiaco +
## Min.battito.cardiaco + Alcol + Serata + Birra + Cocktail +
## Spesa
##
## Df Sum of Sq RSS AIC
## - Cocktail 1 6.8 5015.1 1086.2
## - Spesa 1 11.9 5020.3 1086.6
## - Serata 1 13.5 5021.8 1086.7
## <none> 5008.3 1087.6
## - Birra 1 33.7 5042.0 1088.4
## - Alcol 1 42.7 5051.0 1089.1
## - Sonno.profondo 1 48.6 5057.0 1089.6
## - Sonno.leggero 1 51.5 5059.8 1089.8
## - Dì.settimana 6 179.4 5187.8 1090.1
## - Sonno.totale 1 63.8 5072.2 1090.8
## - Ora.fine 1 74.3 5082.6 1091.7
## - Mese 11 390.4 5398.7 1096.5
## - Ora.inizio 1 168.3 5176.6 1099.2
## - Max.battito.cardiaco 1 1076.5 6084.8 1165.6
## - Min.battito.cardiaco 1 3193.5 8201.9 1288.3
##
## Step: AIC=1086.16
## Media.battito.cardiaco ~ Dì.settimana + Ora.inizio + Ora.fine +
## Mese + Sonno.totale + Sonno.profondo + Sonno.leggero + Max.battito.cardiaco +
## Min.battito.cardiaco + Alcol + Serata + Birra + Spesa
##
## Df Sum of Sq RSS AIC
## - Spesa 1 8.0 5023.1 1084.8
## - Serata 1 12.6 5027.7 1085.2
## <none> 5015.1 1086.2
## + Cocktail 1 6.8 5008.3 1087.6
## - Sonno.profondo 1 49.3 5064.4 1088.2
## - Sonno.leggero 1 52.5 5067.6 1088.5
## - Dì.settimana 6 183.8 5198.9 1089.0
## - Sonno.totale 1 65.0 5080.1 1089.5
## - Ora.fine 1 74.7 5089.8 1090.2
## - Birra 1 89.4 5104.5 1091.4
## - Alcol 1 117.2 5132.3 1093.7
## - Mese 11 391.0 5406.1 1095.0
## - Ora.inizio 1 172.4 5187.5 1098.0
## - Max.battito.cardiaco 1 1079.1 6094.2 1164.3
## - Min.battito.cardiaco 1 3188.5 8203.6 1286.4
##
## Step: AIC=1084.82
## Media.battito.cardiaco ~ Dì.settimana + Ora.inizio + Ora.fine +
## Mese + Sonno.totale + Sonno.profondo + Sonno.leggero + Max.battito.cardiaco +
## Min.battito.cardiaco + Alcol + Serata + Birra
##
## Df Sum of Sq RSS AIC
## - Serata 1 11.1 5034.2 1083.7
## <none> 5023.1 1084.8
## + Spesa 1 8.0 5015.1 1086.2
## + Cocktail 1 2.8 5020.3 1086.6
## - Sonno.profondo 1 49.3 5072.4 1086.8
## - Sonno.leggero 1 52.8 5075.8 1087.1
## - Dì.settimana 6 182.5 5205.6 1087.5
## - Sonno.totale 1 65.2 5088.3 1088.1
## - Ora.fine 1 85.6 5108.6 1089.8
## - Birra 1 92.6 5115.7 1090.3
## - Alcol 1 113.0 5136.1 1092.0
## - Mese 11 383.1 5406.2 1093.0
## - Ora.inizio 1 173.1 5196.2 1096.7
## - Max.battito.cardiaco 1 1097.0 6120.0 1164.0
## - Min.battito.cardiaco 1 3193.1 8216.2 1285.1
##
## Step: AIC=1083.73
## Media.battito.cardiaco ~ Dì.settimana + Ora.inizio + Ora.fine +
## Mese + Sonno.totale + Sonno.profondo + Sonno.leggero + Max.battito.cardiaco +
## Min.battito.cardiaco + Alcol + Birra
##
## Df Sum of Sq RSS AIC
## <none> 5034.2 1083.7
## + Serata 1 11.1 5023.1 1084.8
## + Spesa 1 6.5 5027.7 1085.2
## + Cocktail 1 2.5 5031.7 1085.5
## - Sonno.profondo 1 51.6 5085.8 1085.9
## - Sonno.leggero 1 55.3 5089.5 1086.2
## - Dì.settimana 6 186.3 5220.5 1086.7
## - Sonno.totale 1 67.6 5101.8 1087.2
## - Ora.fine 1 90.7 5124.9 1089.1
## - Birra 1 91.1 5125.2 1089.1
## - Mese 11 377.5 5411.7 1091.4
## - Alcol 1 136.0 5170.2 1092.7
## - Ora.inizio 1 167.9 5202.0 1095.2
## - Max.battito.cardiaco 1 1097.7 6131.9 1162.8
## - Min.battito.cardiaco 1 3185.7 8219.9 1283.2
summary(fitb)
##
## Call:
## lm(formula = Media.battito.cardiaco ~ Dì.settimana + Ora.inizio +
## Ora.fine + Mese + Sonno.totale + Sonno.profondo + Sonno.leggero +
## Max.battito.cardiaco + Min.battito.cardiaco + Alcol + Birra,
## data = datiIncrociati)
##
## Residuals:
## Min 1Q Median 3Q Max
## -7.9741 -2.0504 -0.2474 1.6455 16.3588
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -8.6873449 3.8982104 -2.229 0.026422 *
## Dì.settimana.L 1.7566640 0.5608222 3.132 0.001867 **
## Dì.settimana.Q 0.1015649 0.4960322 0.205 0.837872
## Dì.settimana.C 0.5974611 0.4853851 1.231 0.219113
## Dì.settimana^4 0.0019867 0.4838126 0.004 0.996726
## Dì.settimana^5 -0.2047754 0.4883238 -0.419 0.675200
## Dì.settimana^6 -0.8938605 0.4943255 -1.808 0.071351 .
## Ora.inizio 0.0039119 0.0010932 3.578 0.000390 ***
## Ora.fine -0.0021035 0.0007996 -2.631 0.008865 **
## Mese.L 0.4399039 0.6402558 0.687 0.492450
## Mese.Q -0.6373078 0.7050288 -0.904 0.366591
## Mese.C -1.1795502 0.6699474 -1.761 0.079092 .
## Mese^4 -0.2079369 0.6427129 -0.324 0.746470
## Mese^5 -0.5276037 0.6516804 -0.810 0.418669
## Mese^6 -0.7833954 0.6326030 -1.238 0.216336
## Mese^7 0.6668355 0.6318149 1.055 0.291893
## Mese^8 -0.7075882 0.6281150 -1.127 0.260646
## Mese^9 -1.2850920 0.6339966 -2.027 0.043356 *
## Mese^10 2.4340520 0.6590259 3.693 0.000253 ***
## Mese^11 0.9694291 0.6757437 1.435 0.152212
## Sonno.totale 0.0681388 0.0300002 2.271 0.023683 *
## Sonno.profondo -0.0600935 0.0302834 -1.984 0.047926 *
## Sonno.leggero -0.0623814 0.0303773 -2.054 0.040695 *
## Max.battito.cardiaco 0.1960377 0.0214240 9.150 < 2e-16 ***
## Min.battito.cardiaco 0.8149788 0.0522806 15.589 < 2e-16 ***
## Alcol1 2.0336699 0.6313842 3.221 0.001386 **
## Birra -1.8977667 0.7200727 -2.636 0.008741 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.621 on 384 degrees of freedom
## Multiple R-squared: 0.6912, Adjusted R-squared: 0.6703
## F-statistic: 33.06 on 26 and 384 DF, p-value: < 2.2e-16
Consideriamo il modello con le interazioni più logiche a prima vista, per esempio potremmo raggruppare tutte le variabili che misurano lo stesso fenomeno: 1 Mese * Ora.fne * Dì.settimana Che vanno tutte a misurare il tempo 2 Max.battito.cardiaco * Min.battito.cardiacoChe misurano il battito cardiaco e sono molto correlate alla variabile risposta 3 Alcol * Birra Che misurano l’assunzione di alcolici, e nello specifico il tipo di alcolici
\[ Y= \beta_1 Dì.settimana * \beta_2 Mese* \beta_3Ora.fine + \beta_4Max.battito.cardiaco * \beta_5Min.battito.cardiaco + \beta_6Alcol * \beta_7Birra+errore \]
fitInterazione = lm(
formula = Media.battito.cardiaco ~ Dì.settimana *
Mese+ Ora.fine + Max.battito.cardiaco * Min.battito.cardiaco + as.factor(Alcol) *
as.factor(Birra),
data = datiIncrociati)
summary(fitInterazione)
##
## Call:
## lm(formula = Media.battito.cardiaco ~ Dì.settimana * Mese + Ora.fine +
## Max.battito.cardiaco * Min.battito.cardiaco + as.factor(Alcol) *
## as.factor(Birra), data = datiIncrociati)
##
## Residuals:
## Min 1Q Median 3Q Max
## -8.0708 -1.8777 -0.2089 1.6515 13.1413
##
## Coefficients: (1 not defined because of singularities)
## Estimate Std. Error t value
## (Intercept) -5.260e+01 1.963e+01 -2.679
## Dì.settimana.L 1.857e+00 5.746e-01 3.231
## Dì.settimana.Q 2.654e-01 5.223e-01 0.508
## Dì.settimana.C 6.548e-01 5.122e-01 1.279
## Dì.settimana^4 -1.681e-01 5.106e-01 -0.329
## Dì.settimana^5 -1.382e-01 5.132e-01 -0.269
## Dì.settimana^6 -9.897e-01 5.163e-01 -1.917
## Mese.L 1.934e-01 6.539e-01 0.296
## Mese.Q -8.126e-01 7.098e-01 -1.145
## Mese.C -8.529e-01 6.864e-01 -1.243
## Mese^4 -6.258e-01 6.522e-01 -0.960
## Mese^5 -3.008e-01 6.614e-01 -0.455
## Mese^6 -8.602e-01 6.473e-01 -1.329
## Mese^7 5.964e-01 6.483e-01 0.920
## Mese^8 -7.588e-01 6.373e-01 -1.191
## Mese^9 -1.308e+00 6.406e-01 -2.042
## Mese^10 2.425e+00 6.645e-01 3.649
## Mese^11 1.342e+00 6.851e-01 1.959
## Ora.fine -1.915e-03 8.887e-04 -2.155
## Max.battito.cardiaco 7.322e-01 1.858e-01 3.941
## Min.battito.cardiaco 1.953e+00 4.096e-01 4.767
## as.factor(Alcol)1 1.649e+00 7.376e-01 2.236
## as.factor(Birra)1 -1.975e+00 7.978e-01 -2.476
## Dì.settimana.L:Mese.L -1.194e+00 1.732e+00 -0.689
## Dì.settimana.Q:Mese.L 1.717e+00 1.744e+00 0.985
## Dì.settimana.C:Mese.L -3.442e-01 1.722e+00 -0.200
## Dì.settimana^4:Mese.L -3.432e-01 1.716e+00 -0.200
## Dì.settimana^5:Mese.L 1.328e+00 1.739e+00 0.764
## Dì.settimana^6:Mese.L 1.099e+00 1.729e+00 0.636
## Dì.settimana.L:Mese.Q 2.560e-01 1.819e+00 0.141
## Dì.settimana.Q:Mese.Q 2.222e+00 1.812e+00 1.226
## Dì.settimana.C:Mese.Q -4.440e+00 1.812e+00 -2.451
## Dì.settimana^4:Mese.Q 1.985e+00 1.816e+00 1.093
## Dì.settimana^5:Mese.Q 1.080e+00 1.818e+00 0.594
## Dì.settimana^6:Mese.Q -5.518e-01 1.816e+00 -0.304
## Dì.settimana.L:Mese.C -1.097e+00 1.776e+00 -0.617
## Dì.settimana.Q:Mese.C -2.738e-01 1.753e+00 -0.156
## Dì.settimana.C:Mese.C 7.270e-01 1.757e+00 0.414
## Dì.settimana^4:Mese.C 3.109e+00 1.749e+00 1.778
## Dì.settimana^5:Mese.C -7.841e-01 1.766e+00 -0.444
## Dì.settimana^6:Mese.C 4.035e-01 1.780e+00 0.227
## Dì.settimana.L:Mese^4 -3.434e+00 1.715e+00 -2.002
## Dì.settimana.Q:Mese^4 2.417e+00 1.725e+00 1.401
## Dì.settimana.C:Mese^4 -9.145e-01 1.713e+00 -0.534
## Dì.settimana^4:Mese^4 -3.332e+00 1.736e+00 -1.919
## Dì.settimana^5:Mese^4 2.208e+00 1.726e+00 1.280
## Dì.settimana^6:Mese^4 3.603e-01 1.757e+00 0.205
## Dì.settimana.L:Mese^5 -2.794e-01 1.726e+00 -0.162
## Dì.settimana.Q:Mese^5 -7.240e-01 1.736e+00 -0.417
## Dì.settimana.C:Mese^5 -2.206e+00 1.703e+00 -1.295
## Dì.settimana^4:Mese^5 7.939e-01 1.696e+00 0.468
## Dì.settimana^5:Mese^5 9.008e-01 1.725e+00 0.522
## Dì.settimana^6:Mese^5 -1.515e+00 1.749e+00 -0.867
## Dì.settimana.L:Mese^6 -3.819e+00 1.675e+00 -2.280
## Dì.settimana.Q:Mese^6 -6.793e-01 1.690e+00 -0.402
## Dì.settimana.C:Mese^6 1.203e+00 1.692e+00 0.711
## Dì.settimana^4:Mese^6 1.187e+00 1.707e+00 0.696
## Dì.settimana^5:Mese^6 -1.750e-01 1.699e+00 -0.103
## Dì.settimana^6:Mese^6 2.167e+00 1.717e+00 1.262
## Dì.settimana.L:Mese^7 -2.291e-01 1.650e+00 -0.139
## Dì.settimana.Q:Mese^7 2.998e-01 1.685e+00 0.178
## Dì.settimana.C:Mese^7 1.504e+00 1.680e+00 0.895
## Dì.settimana^4:Mese^7 2.873e-01 1.679e+00 0.171
## Dì.settimana^5:Mese^7 -1.692e+00 1.710e+00 -0.990
## Dì.settimana^6:Mese^7 -2.250e+00 1.731e+00 -1.300
## Dì.settimana.L:Mese^8 1.816e+00 1.651e+00 1.099
## Dì.settimana.Q:Mese^8 1.589e+00 1.677e+00 0.948
## Dì.settimana.C:Mese^8 2.873e+00 1.658e+00 1.733
## Dì.settimana^4:Mese^8 2.821e+00 1.688e+00 1.671
## Dì.settimana^5:Mese^8 -1.656e+00 1.681e+00 -0.986
## Dì.settimana^6:Mese^8 -6.209e-01 1.741e+00 -0.357
## Dì.settimana.L:Mese^9 1.179e+00 1.663e+00 0.709
## Dì.settimana.Q:Mese^9 -8.302e-01 1.692e+00 -0.491
## Dì.settimana.C:Mese^9 -2.387e+00 1.686e+00 -1.416
## Dì.settimana^4:Mese^9 -6.047e-01 1.721e+00 -0.351
## Dì.settimana^5:Mese^9 -1.852e+00 1.691e+00 -1.096
## Dì.settimana^6:Mese^9 2.516e+00 1.752e+00 1.436
## Dì.settimana.L:Mese^10 1.736e+00 1.742e+00 0.996
## Dì.settimana.Q:Mese^10 -1.124e+00 1.763e+00 -0.638
## Dì.settimana.C:Mese^10 6.329e-01 1.749e+00 0.362
## Dì.settimana^4:Mese^10 -9.974e-02 1.758e+00 -0.057
## Dì.settimana^5:Mese^10 -1.134e+00 1.754e+00 -0.647
## Dì.settimana^6:Mese^10 9.501e-02 1.785e+00 0.053
## Dì.settimana.L:Mese^11 -1.240e+00 1.806e+00 -0.687
## Dì.settimana.Q:Mese^11 -3.687e-01 1.788e+00 -0.206
## Dì.settimana.C:Mese^11 2.833e+00 1.796e+00 1.578
## Dì.settimana^4:Mese^11 -1.889e+00 1.862e+00 -1.015
## Dì.settimana^5:Mese^11 2.434e+00 1.808e+00 1.347
## Dì.settimana^6:Mese^11 -7.403e-01 1.817e+00 -0.407
## Max.battito.cardiaco:Min.battito.cardiaco -1.074e-02 3.837e-03 -2.800
## as.factor(Alcol)1:as.factor(Birra)1 NA NA NA
## Pr(>|t|)
## (Intercept) 0.007760 **
## Dì.settimana.L 0.001360 **
## Dì.settimana.Q 0.611693
## Dì.settimana.C 0.201977
## Dì.settimana^4 0.742138
## Dì.settimana^5 0.787846
## Dì.settimana^6 0.056166 .
## Mese.L 0.767647
## Mese.Q 0.253097
## Mese.C 0.214890
## Mese^4 0.337977
## Mese^5 0.649556
## Mese^6 0.184872
## Mese^7 0.358296
## Mese^8 0.234691
## Mese^9 0.041986 *
## Mese^10 0.000308 ***
## Mese^11 0.050947 .
## Ora.fine 0.031910 *
## Max.battito.cardiaco 9.96e-05 ***
## Min.battito.cardiaco 2.84e-06 ***
## as.factor(Alcol)1 0.026068 *
## as.factor(Birra)1 0.013809 *
## Dì.settimana.L:Mese.L 0.491250
## Dì.settimana.Q:Mese.L 0.325585
## Dì.settimana.C:Mese.L 0.841667
## Dì.settimana^4:Mese.L 0.841604
## Dì.settimana^5:Mese.L 0.445593
## Dì.settimana^6:Mese.L 0.525497
## Dì.settimana.L:Mese.Q 0.888174
## Dì.settimana.Q:Mese.Q 0.221101
## Dì.settimana.C:Mese.Q 0.014794 *
## Dì.settimana^4:Mese.Q 0.275194
## Dì.settimana^5:Mese.Q 0.552800
## Dì.settimana^6:Mese.Q 0.761393
## Dì.settimana.L:Mese.C 0.537379
## Dì.settimana.Q:Mese.C 0.875991
## Dì.settimana.C:Mese.C 0.679328
## Dì.settimana^4:Mese.C 0.076370 .
## Dì.settimana^5:Mese.C 0.657333
## Dì.settimana^6:Mese.C 0.820759
## Dì.settimana.L:Mese^4 0.046154 *
## Dì.settimana.Q:Mese^4 0.162256
## Dì.settimana.C:Mese^4 0.593830
## Dì.settimana^4:Mese^4 0.055853 .
## Dì.settimana^5:Mese^4 0.201586
## Dì.settimana^6:Mese^4 0.837702
## Dì.settimana.L:Mese^5 0.871477
## Dì.settimana.Q:Mese^5 0.676892
## Dì.settimana.C:Mese^5 0.196154
## Dì.settimana^4:Mese^5 0.640025
## Dì.settimana^5:Mese^5 0.601947
## Dì.settimana^6:Mese^5 0.386830
## Dì.settimana.L:Mese^6 0.023241 *
## Dì.settimana.Q:Mese^6 0.688016
## Dì.settimana.C:Mese^6 0.477612
## Dì.settimana^4:Mese^6 0.487043
## Dì.settimana^5:Mese^6 0.918053
## Dì.settimana^6:Mese^6 0.207820
## Dì.settimana.L:Mese^7 0.889690
## Dì.settimana.Q:Mese^7 0.858918
## Dì.settimana.C:Mese^7 0.371373
## Dì.settimana^4:Mese^7 0.864283
## Dì.settimana^5:Mese^7 0.323032
## Dì.settimana^6:Mese^7 0.194575
## Dì.settimana.L:Mese^8 0.272401
## Dì.settimana.Q:Mese^8 0.344023
## Dì.settimana.C:Mese^8 0.084054 .
## Dì.settimana^4:Mese^8 0.095645 .
## Dì.settimana^5:Mese^8 0.325109
## Dì.settimana^6:Mese^8 0.721661
## Dì.settimana.L:Mese^9 0.478963
## Dì.settimana.Q:Mese^9 0.623929
## Dì.settimana.C:Mese^9 0.157868
## Dì.settimana^4:Mese^9 0.725534
## Dì.settimana^5:Mese^9 0.274085
## Dì.settimana^6:Mese^9 0.151973
## Dì.settimana.L:Mese^10 0.319775
## Dì.settimana.Q:Mese^10 0.524198
## Dì.settimana.C:Mese^10 0.717737
## Dì.settimana^4:Mese^10 0.954786
## Dì.settimana^5:Mese^10 0.518402
## Dì.settimana^6:Mese^10 0.957581
## Dì.settimana.L:Mese^11 0.492748
## Dì.settimana.Q:Mese^11 0.836743
## Dì.settimana.C:Mese^11 0.115617
## Dì.settimana^4:Mese^11 0.310934
## Dì.settimana^5:Mese^11 0.179068
## Dì.settimana^6:Mese^11 0.684032
## Max.battito.cardiaco:Min.battito.cardiaco 0.005426 **
## as.factor(Alcol)1:as.factor(Birra)1 NA
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.657 on 321 degrees of freedom
## Multiple R-squared: 0.7366, Adjusted R-squared: 0.6636
## F-statistic: 10.09 on 89 and 321 DF, p-value: < 2.2e-16
Emerge che non ha senso tenere conto dell’interazione tra Alcol e Birra e neanche dell’ Ora.fine con le altre date, invece delle interazioni tra le altre variabili sì.
fitInterazione = lm(
formula = Media.battito.cardiaco ~ Dì.settimana *
Mese+ Ora.fine + Max.battito.cardiaco * Min.battito.cardiaco + as.factor(Alcol) +
as.factor(Birra),
data = datiIncrociati)
summary(fitInterazione)
##
## Call:
## lm(formula = Media.battito.cardiaco ~ Dì.settimana * Mese + Ora.fine +
## Max.battito.cardiaco * Min.battito.cardiaco + as.factor(Alcol) +
## as.factor(Birra), data = datiIncrociati)
##
## Residuals:
## Min 1Q Median 3Q Max
## -8.0708 -1.8777 -0.2089 1.6515 13.1413
##
## Coefficients:
## Estimate Std. Error t value
## (Intercept) -5.260e+01 1.963e+01 -2.679
## Dì.settimana.L 1.857e+00 5.746e-01 3.231
## Dì.settimana.Q 2.654e-01 5.223e-01 0.508
## Dì.settimana.C 6.548e-01 5.122e-01 1.279
## Dì.settimana^4 -1.681e-01 5.106e-01 -0.329
## Dì.settimana^5 -1.382e-01 5.132e-01 -0.269
## Dì.settimana^6 -9.897e-01 5.163e-01 -1.917
## Mese.L 1.934e-01 6.539e-01 0.296
## Mese.Q -8.126e-01 7.098e-01 -1.145
## Mese.C -8.529e-01 6.864e-01 -1.243
## Mese^4 -6.258e-01 6.522e-01 -0.960
## Mese^5 -3.008e-01 6.614e-01 -0.455
## Mese^6 -8.602e-01 6.473e-01 -1.329
## Mese^7 5.964e-01 6.483e-01 0.920
## Mese^8 -7.588e-01 6.373e-01 -1.191
## Mese^9 -1.308e+00 6.406e-01 -2.042
## Mese^10 2.425e+00 6.645e-01 3.649
## Mese^11 1.342e+00 6.851e-01 1.959
## Ora.fine -1.915e-03 8.887e-04 -2.155
## Max.battito.cardiaco 7.322e-01 1.858e-01 3.941
## Min.battito.cardiaco 1.953e+00 4.096e-01 4.767
## as.factor(Alcol)1 1.649e+00 7.376e-01 2.236
## as.factor(Birra)1 -1.975e+00 7.978e-01 -2.476
## Dì.settimana.L:Mese.L -1.194e+00 1.732e+00 -0.689
## Dì.settimana.Q:Mese.L 1.717e+00 1.744e+00 0.985
## Dì.settimana.C:Mese.L -3.442e-01 1.722e+00 -0.200
## Dì.settimana^4:Mese.L -3.432e-01 1.716e+00 -0.200
## Dì.settimana^5:Mese.L 1.328e+00 1.739e+00 0.764
## Dì.settimana^6:Mese.L 1.099e+00 1.729e+00 0.636
## Dì.settimana.L:Mese.Q 2.560e-01 1.819e+00 0.141
## Dì.settimana.Q:Mese.Q 2.222e+00 1.812e+00 1.226
## Dì.settimana.C:Mese.Q -4.440e+00 1.812e+00 -2.451
## Dì.settimana^4:Mese.Q 1.985e+00 1.816e+00 1.093
## Dì.settimana^5:Mese.Q 1.080e+00 1.818e+00 0.594
## Dì.settimana^6:Mese.Q -5.518e-01 1.816e+00 -0.304
## Dì.settimana.L:Mese.C -1.097e+00 1.776e+00 -0.617
## Dì.settimana.Q:Mese.C -2.738e-01 1.753e+00 -0.156
## Dì.settimana.C:Mese.C 7.270e-01 1.757e+00 0.414
## Dì.settimana^4:Mese.C 3.109e+00 1.749e+00 1.778
## Dì.settimana^5:Mese.C -7.841e-01 1.766e+00 -0.444
## Dì.settimana^6:Mese.C 4.035e-01 1.780e+00 0.227
## Dì.settimana.L:Mese^4 -3.434e+00 1.715e+00 -2.002
## Dì.settimana.Q:Mese^4 2.417e+00 1.725e+00 1.401
## Dì.settimana.C:Mese^4 -9.145e-01 1.713e+00 -0.534
## Dì.settimana^4:Mese^4 -3.332e+00 1.736e+00 -1.919
## Dì.settimana^5:Mese^4 2.208e+00 1.726e+00 1.280
## Dì.settimana^6:Mese^4 3.603e-01 1.757e+00 0.205
## Dì.settimana.L:Mese^5 -2.794e-01 1.726e+00 -0.162
## Dì.settimana.Q:Mese^5 -7.240e-01 1.736e+00 -0.417
## Dì.settimana.C:Mese^5 -2.206e+00 1.703e+00 -1.295
## Dì.settimana^4:Mese^5 7.939e-01 1.696e+00 0.468
## Dì.settimana^5:Mese^5 9.008e-01 1.725e+00 0.522
## Dì.settimana^6:Mese^5 -1.515e+00 1.749e+00 -0.867
## Dì.settimana.L:Mese^6 -3.819e+00 1.675e+00 -2.280
## Dì.settimana.Q:Mese^6 -6.793e-01 1.690e+00 -0.402
## Dì.settimana.C:Mese^6 1.203e+00 1.692e+00 0.711
## Dì.settimana^4:Mese^6 1.187e+00 1.707e+00 0.696
## Dì.settimana^5:Mese^6 -1.750e-01 1.699e+00 -0.103
## Dì.settimana^6:Mese^6 2.167e+00 1.717e+00 1.262
## Dì.settimana.L:Mese^7 -2.291e-01 1.650e+00 -0.139
## Dì.settimana.Q:Mese^7 2.998e-01 1.685e+00 0.178
## Dì.settimana.C:Mese^7 1.504e+00 1.680e+00 0.895
## Dì.settimana^4:Mese^7 2.873e-01 1.679e+00 0.171
## Dì.settimana^5:Mese^7 -1.692e+00 1.710e+00 -0.990
## Dì.settimana^6:Mese^7 -2.250e+00 1.731e+00 -1.300
## Dì.settimana.L:Mese^8 1.816e+00 1.651e+00 1.099
## Dì.settimana.Q:Mese^8 1.589e+00 1.677e+00 0.948
## Dì.settimana.C:Mese^8 2.873e+00 1.658e+00 1.733
## Dì.settimana^4:Mese^8 2.821e+00 1.688e+00 1.671
## Dì.settimana^5:Mese^8 -1.656e+00 1.681e+00 -0.986
## Dì.settimana^6:Mese^8 -6.209e-01 1.741e+00 -0.357
## Dì.settimana.L:Mese^9 1.179e+00 1.663e+00 0.709
## Dì.settimana.Q:Mese^9 -8.302e-01 1.692e+00 -0.491
## Dì.settimana.C:Mese^9 -2.387e+00 1.686e+00 -1.416
## Dì.settimana^4:Mese^9 -6.047e-01 1.721e+00 -0.351
## Dì.settimana^5:Mese^9 -1.852e+00 1.691e+00 -1.096
## Dì.settimana^6:Mese^9 2.516e+00 1.752e+00 1.436
## Dì.settimana.L:Mese^10 1.736e+00 1.742e+00 0.996
## Dì.settimana.Q:Mese^10 -1.124e+00 1.763e+00 -0.638
## Dì.settimana.C:Mese^10 6.329e-01 1.749e+00 0.362
## Dì.settimana^4:Mese^10 -9.974e-02 1.758e+00 -0.057
## Dì.settimana^5:Mese^10 -1.134e+00 1.754e+00 -0.647
## Dì.settimana^6:Mese^10 9.501e-02 1.785e+00 0.053
## Dì.settimana.L:Mese^11 -1.240e+00 1.806e+00 -0.687
## Dì.settimana.Q:Mese^11 -3.687e-01 1.788e+00 -0.206
## Dì.settimana.C:Mese^11 2.833e+00 1.796e+00 1.578
## Dì.settimana^4:Mese^11 -1.889e+00 1.862e+00 -1.015
## Dì.settimana^5:Mese^11 2.434e+00 1.808e+00 1.347
## Dì.settimana^6:Mese^11 -7.403e-01 1.817e+00 -0.407
## Max.battito.cardiaco:Min.battito.cardiaco -1.074e-02 3.837e-03 -2.800
## Pr(>|t|)
## (Intercept) 0.007760 **
## Dì.settimana.L 0.001360 **
## Dì.settimana.Q 0.611693
## Dì.settimana.C 0.201977
## Dì.settimana^4 0.742138
## Dì.settimana^5 0.787846
## Dì.settimana^6 0.056166 .
## Mese.L 0.767647
## Mese.Q 0.253097
## Mese.C 0.214890
## Mese^4 0.337977
## Mese^5 0.649556
## Mese^6 0.184872
## Mese^7 0.358296
## Mese^8 0.234691
## Mese^9 0.041986 *
## Mese^10 0.000308 ***
## Mese^11 0.050947 .
## Ora.fine 0.031910 *
## Max.battito.cardiaco 9.96e-05 ***
## Min.battito.cardiaco 2.84e-06 ***
## as.factor(Alcol)1 0.026068 *
## as.factor(Birra)1 0.013809 *
## Dì.settimana.L:Mese.L 0.491250
## Dì.settimana.Q:Mese.L 0.325585
## Dì.settimana.C:Mese.L 0.841667
## Dì.settimana^4:Mese.L 0.841604
## Dì.settimana^5:Mese.L 0.445593
## Dì.settimana^6:Mese.L 0.525497
## Dì.settimana.L:Mese.Q 0.888174
## Dì.settimana.Q:Mese.Q 0.221101
## Dì.settimana.C:Mese.Q 0.014794 *
## Dì.settimana^4:Mese.Q 0.275194
## Dì.settimana^5:Mese.Q 0.552800
## Dì.settimana^6:Mese.Q 0.761393
## Dì.settimana.L:Mese.C 0.537379
## Dì.settimana.Q:Mese.C 0.875991
## Dì.settimana.C:Mese.C 0.679328
## Dì.settimana^4:Mese.C 0.076370 .
## Dì.settimana^5:Mese.C 0.657333
## Dì.settimana^6:Mese.C 0.820759
## Dì.settimana.L:Mese^4 0.046154 *
## Dì.settimana.Q:Mese^4 0.162256
## Dì.settimana.C:Mese^4 0.593830
## Dì.settimana^4:Mese^4 0.055853 .
## Dì.settimana^5:Mese^4 0.201586
## Dì.settimana^6:Mese^4 0.837702
## Dì.settimana.L:Mese^5 0.871477
## Dì.settimana.Q:Mese^5 0.676892
## Dì.settimana.C:Mese^5 0.196154
## Dì.settimana^4:Mese^5 0.640025
## Dì.settimana^5:Mese^5 0.601947
## Dì.settimana^6:Mese^5 0.386830
## Dì.settimana.L:Mese^6 0.023241 *
## Dì.settimana.Q:Mese^6 0.688016
## Dì.settimana.C:Mese^6 0.477612
## Dì.settimana^4:Mese^6 0.487043
## Dì.settimana^5:Mese^6 0.918053
## Dì.settimana^6:Mese^6 0.207820
## Dì.settimana.L:Mese^7 0.889690
## Dì.settimana.Q:Mese^7 0.858918
## Dì.settimana.C:Mese^7 0.371373
## Dì.settimana^4:Mese^7 0.864283
## Dì.settimana^5:Mese^7 0.323032
## Dì.settimana^6:Mese^7 0.194575
## Dì.settimana.L:Mese^8 0.272401
## Dì.settimana.Q:Mese^8 0.344023
## Dì.settimana.C:Mese^8 0.084054 .
## Dì.settimana^4:Mese^8 0.095645 .
## Dì.settimana^5:Mese^8 0.325109
## Dì.settimana^6:Mese^8 0.721661
## Dì.settimana.L:Mese^9 0.478963
## Dì.settimana.Q:Mese^9 0.623929
## Dì.settimana.C:Mese^9 0.157868
## Dì.settimana^4:Mese^9 0.725534
## Dì.settimana^5:Mese^9 0.274085
## Dì.settimana^6:Mese^9 0.151973
## Dì.settimana.L:Mese^10 0.319775
## Dì.settimana.Q:Mese^10 0.524198
## Dì.settimana.C:Mese^10 0.717737
## Dì.settimana^4:Mese^10 0.954786
## Dì.settimana^5:Mese^10 0.518402
## Dì.settimana^6:Mese^10 0.957581
## Dì.settimana.L:Mese^11 0.492748
## Dì.settimana.Q:Mese^11 0.836743
## Dì.settimana.C:Mese^11 0.115617
## Dì.settimana^4:Mese^11 0.310934
## Dì.settimana^5:Mese^11 0.179068
## Dì.settimana^6:Mese^11 0.684032
## Max.battito.cardiaco:Min.battito.cardiaco 0.005426 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.657 on 321 degrees of freedom
## Multiple R-squared: 0.7366, Adjusted R-squared: 0.6636
## F-statistic: 10.09 on 89 and 321 DF, p-value: < 2.2e-16
Si nota che $ R^2 adjusted$ è minore del modello senza interazione. Nella costruzione di un modello bisogna stare attenti all’errore di adattamento che decresce all’aumentare della complessità del modello e all’errore di generalizzazione che con l’aumentare della complessità del modello decresce per poi ad un certo crescere.
Una valutazione analitica per l’errore di generalizzazione ha la forma \(errore\space di\space adattamento + penalizzazione \space complessità\). In questo caso (e anche prima) verrà usato il criterio di informazioni di Akaike \[AIC=n* log(\hat\sigma^2)+2(p+1)\]
fitAIC=stepAIC(fitInterazione,direction = "both")
## Start: AIC=1144.36
## Media.battito.cardiaco ~ Dì.settimana * Mese + Ora.fine + Max.battito.cardiaco *
## Min.battito.cardiaco + as.factor(Alcol) + as.factor(Birra)
##
## Df Sum of Sq RSS AIC
## - Dì.settimana:Mese 66 902.63 5196.6 1090.8
## <none> 4294.0 1144.4
## - Ora.fine 1 62.12 4356.1 1148.3
## - as.factor(Alcol) 1 66.85 4360.8 1148.7
## - as.factor(Birra) 1 81.99 4376.0 1150.1
## - Max.battito.cardiaco:Min.battito.cardiaco 1 104.85 4398.8 1152.3
##
## Step: AIC=1090.77
## Media.battito.cardiaco ~ Dì.settimana + Mese + Ora.fine + Max.battito.cardiaco +
## Min.battito.cardiaco + as.factor(Alcol) + as.factor(Birra) +
## Max.battito.cardiaco:Min.battito.cardiaco
##
## Df Sum of Sq RSS AIC
## <none> 5196.6 1090.8
## - Ora.fine 1 69.10 5265.7 1094.2
## - as.factor(Birra) 1 82.93 5279.5 1095.3
## - Max.battito.cardiaco:Min.battito.cardiaco 1 94.87 5291.5 1096.2
## - Mese 11 369.76 5566.3 1097.0
## - Dì.settimana 6 260.64 5457.2 1098.9
## - as.factor(Alcol) 1 137.57 5334.2 1099.5
## + Dì.settimana:Mese 66 902.63 4294.0 1144.4
summary(fitAIC)
##
## Call:
## lm(formula = Media.battito.cardiaco ~ Dì.settimana + Mese + Ora.fine +
## Max.battito.cardiaco + Min.battito.cardiaco + as.factor(Alcol) +
## as.factor(Birra) + Max.battito.cardiaco:Min.battito.cardiaco,
## data = datiIncrociati)
##
## Residuals:
## Min 1Q Median 3Q Max
## -8.9338 -2.2283 -0.3432 1.8967 16.1093
##
## Coefficients:
## Estimate Std. Error t value
## (Intercept) -4.604e+01 1.808e+01 -2.547
## Dì.settimana.L 1.934e+00 5.419e-01 3.569
## Dì.settimana.Q 4.119e-01 4.986e-01 0.826
## Dì.settimana.C 7.562e-01 4.898e-01 1.544
## Dì.settimana^4 -1.177e-01 4.888e-01 -0.241
## Dì.settimana^5 -2.532e-01 4.935e-01 -0.513
## Dì.settimana^6 -9.154e-01 4.971e-01 -1.841
## Mese.L 2.587e-01 6.455e-01 0.401
## Mese.Q -5.837e-01 6.964e-01 -0.838
## Mese.C -7.311e-01 6.681e-01 -1.094
## Mese^4 -5.862e-01 6.457e-01 -0.908
## Mese^5 -3.353e-01 6.550e-01 -0.512
## Mese^6 -7.953e-01 6.396e-01 -1.243
## Mese^7 5.785e-01 6.404e-01 0.903
## Mese^8 -9.236e-01 6.314e-01 -1.463
## Mese^9 -1.290e+00 6.350e-01 -2.031
## Mese^10 2.285e+00 6.601e-01 3.462
## Mese^11 1.394e+00 6.799e-01 2.050
## Ora.fine -1.807e-03 7.964e-04 -2.268
## Max.battito.cardiaco 6.676e-01 1.717e-01 3.889
## Min.battito.cardiaco 1.812e+00 3.762e-01 4.815
## as.factor(Alcol)1 2.042e+00 6.381e-01 3.201
## as.factor(Birra)1 -1.811e+00 7.287e-01 -2.485
## Max.battito.cardiaco:Min.battito.cardiaco -9.401e-03 3.537e-03 -2.658
## Pr(>|t|)
## (Intercept) 0.011253 *
## Dì.settimana.L 0.000403 ***
## Dì.settimana.Q 0.409202
## Dì.settimana.C 0.123386
## Dì.settimana^4 0.809842
## Dì.settimana^5 0.608238
## Dì.settimana^6 0.066324 .
## Mese.L 0.688863
## Mese.Q 0.402459
## Mese.C 0.274515
## Mese^4 0.364486
## Mese^5 0.609054
## Mese^6 0.214496
## Mese^7 0.366952
## Mese^8 0.144363
## Mese^9 0.042928 *
## Mese^10 0.000596 ***
## Mese^11 0.041018 *
## Ora.fine 0.023850 *
## Max.battito.cardiaco 0.000119 ***
## Min.battito.cardiaco 2.11e-06 ***
## as.factor(Alcol)1 0.001484 **
## as.factor(Birra)1 0.013369 *
## Max.battito.cardiaco:Min.battito.cardiaco 0.008185 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.664 on 387 degrees of freedom
## Multiple R-squared: 0.6812, Adjusted R-squared: 0.6623
## F-statistic: 35.96 on 23 and 387 DF, p-value: < 2.2e-16
Sotto viene riportato l’ANOVA ovvero l’analisi delle varianze
anova(fit,fitb)
## Analysis of Variance Table
##
## Model 1: Media.battito.cardiaco ~ Dì.settimana + Ora.inizio + Ora.fine +
## Mese + Sonno.totale + Sonno.profondo + Sonno.leggero + Max.battito.cardiaco +
## Min.battito.cardiaco + Alcol + Serata + Birra + Cocktail +
## Spesa
## Model 2: Media.battito.cardiaco ~ Dì.settimana + Ora.inizio + Ora.fine +
## Mese + Sonno.totale + Sonno.profondo + Sonno.leggero + Max.battito.cardiaco +
## Min.battito.cardiaco + Alcol + Birra
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 381 5008.3
## 2 384 5034.2 -3 -25.859 0.6557 0.5798
anova(fitAIC,fitInterazione)
## Analysis of Variance Table
##
## Model 1: Media.battito.cardiaco ~ Dì.settimana + Mese + Ora.fine + Max.battito.cardiaco +
## Min.battito.cardiaco + as.factor(Alcol) + as.factor(Birra) +
## Max.battito.cardiaco:Min.battito.cardiaco
## Model 2: Media.battito.cardiaco ~ Dì.settimana * Mese + Ora.fine + Max.battito.cardiaco *
## Min.battito.cardiaco + as.factor(Alcol) + as.factor(Birra)
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 387 5196.6
## 2 321 4294.0 66 902.63 1.0224 0.4373
anova(fitInterazione,fitb)
## Analysis of Variance Table
##
## Model 1: Media.battito.cardiaco ~ Dì.settimana * Mese + Ora.fine + Max.battito.cardiaco *
## Min.battito.cardiaco + as.factor(Alcol) + as.factor(Birra)
## Model 2: Media.battito.cardiaco ~ Dì.settimana + Ora.inizio + Ora.fine +
## Mese + Sonno.totale + Sonno.profondo + Sonno.leggero + Max.battito.cardiaco +
## Min.battito.cardiaco + Alcol + Birra
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 321 4294.0
## 2 384 5034.2 -63 -740.23 0.8784 0.7294
summary(fitb)
##
## Call:
## lm(formula = Media.battito.cardiaco ~ Dì.settimana + Ora.inizio +
## Ora.fine + Mese + Sonno.totale + Sonno.profondo + Sonno.leggero +
## Max.battito.cardiaco + Min.battito.cardiaco + Alcol + Birra,
## data = datiIncrociati)
##
## Residuals:
## Min 1Q Median 3Q Max
## -7.9741 -2.0504 -0.2474 1.6455 16.3588
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -8.6873449 3.8982104 -2.229 0.026422 *
## Dì.settimana.L 1.7566640 0.5608222 3.132 0.001867 **
## Dì.settimana.Q 0.1015649 0.4960322 0.205 0.837872
## Dì.settimana.C 0.5974611 0.4853851 1.231 0.219113
## Dì.settimana^4 0.0019867 0.4838126 0.004 0.996726
## Dì.settimana^5 -0.2047754 0.4883238 -0.419 0.675200
## Dì.settimana^6 -0.8938605 0.4943255 -1.808 0.071351 .
## Ora.inizio 0.0039119 0.0010932 3.578 0.000390 ***
## Ora.fine -0.0021035 0.0007996 -2.631 0.008865 **
## Mese.L 0.4399039 0.6402558 0.687 0.492450
## Mese.Q -0.6373078 0.7050288 -0.904 0.366591
## Mese.C -1.1795502 0.6699474 -1.761 0.079092 .
## Mese^4 -0.2079369 0.6427129 -0.324 0.746470
## Mese^5 -0.5276037 0.6516804 -0.810 0.418669
## Mese^6 -0.7833954 0.6326030 -1.238 0.216336
## Mese^7 0.6668355 0.6318149 1.055 0.291893
## Mese^8 -0.7075882 0.6281150 -1.127 0.260646
## Mese^9 -1.2850920 0.6339966 -2.027 0.043356 *
## Mese^10 2.4340520 0.6590259 3.693 0.000253 ***
## Mese^11 0.9694291 0.6757437 1.435 0.152212
## Sonno.totale 0.0681388 0.0300002 2.271 0.023683 *
## Sonno.profondo -0.0600935 0.0302834 -1.984 0.047926 *
## Sonno.leggero -0.0623814 0.0303773 -2.054 0.040695 *
## Max.battito.cardiaco 0.1960377 0.0214240 9.150 < 2e-16 ***
## Min.battito.cardiaco 0.8149788 0.0522806 15.589 < 2e-16 ***
## Alcol1 2.0336699 0.6313842 3.221 0.001386 **
## Birra -1.8977667 0.7200727 -2.636 0.008741 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.621 on 384 degrees of freedom
## Multiple R-squared: 0.6912, Adjusted R-squared: 0.6703
## F-statistic: 33.06 on 26 and 384 DF, p-value: < 2.2e-16
Quindi il modello finale che useremo sarà \[Y=\beta_1 Dì.settimana + \beta_2Mese + \beta_3Ora.inizio + \beta_4 Max.battito.cardiaco +... +\beta_jBirra+errore \] che risulta essere il modello con la statistica \(F\) maggiore (\(35.74\))
ggplotRegression <- function (fit) {
ggplot(fit$model, aes_string(x = names(fit$model)[7], y = names(fit$model)[1])) +
geom_point() +
stat_smooth(method = "lm", col = "red") +
labs(title = paste(
"Adj R2 = ",
signif(summary(fit)$adj.r.squared, 5),
" Max.battito.cardaco =",
signif(fitb$coefficients["Max.battito.cardiaco"], 5),
" P =",
signif(summary(fit)$coef["Max.battito.cardiaco",4], 5)
))
}
ggplotRegression(fitb) +
xlab(LabMaxBpm) +
ylab(LabMedBpm)
## `geom_smooth()` using formula 'y ~ x'
L’\(R^2\) è relativamente basso ma questo è ragionevole in questo contesto dove ci aspettiamo che la variabilità del fenomeno intorno al modello di regressione sia grande. Sulla base della statistica \(F\) il modello IID è preferibile rispetto a quello con interazioni.
La variabile risposta Media.battito.caridiaco è una variabile quantitativa discreta, poiché i dati rilevati dal sensore sono tutti numeri naturali.
Il Sonno.totale è dato dalla somma di Sonno.profondo + Sonno.leggero e se fossero state incluse tutte e 3 le variabili nel modello ciò avrebbe potuto portare a non identificabilità del modello (multicollinearità) che avrebbe causato elevate varianze dei coefficienti. Stesso discorso vale per le etichette riguardanti l’assunzione delle diverse tipologie di alcolici con Alcol che contiene tutte.
summary(lm(datiIncrociati$Media.battito.cardiaco~datiIncrociati$Sonno.totale+datiIncrociati$Sonno.profondo+datiIncrociati$Sonno.leggero))
##
## Call:
## lm(formula = datiIncrociati$Media.battito.cardiaco ~ datiIncrociati$Sonno.totale +
## datiIncrociati$Sonno.profondo + datiIncrociati$Sonno.leggero)
##
## Residuals:
## Min 1Q Median 3Q Max
## -16.779 -4.177 -1.102 2.974 29.130
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 67.87966 1.57791 43.019 <2e-16 ***
## datiIncrociati$Sonno.totale 0.05901 0.04876 1.210 0.2269
## datiIncrociati$Sonno.profondo -0.08375 0.04939 -1.696 0.0907 .
## datiIncrociati$Sonno.leggero -0.07086 0.04969 -1.426 0.1547
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 6.139 on 407 degrees of freedom
## Multiple R-squared: 0.05905, Adjusted R-squared: 0.05211
## F-statistic: 8.513 on 3 and 407 DF, p-value: 1.7e-05
summary(lm(datiIncrociati$Media.battito.cardiaco~datiIncrociati$Sonno.profondo+datiIncrociati$Sonno.leggero))
##
## Call:
## lm(formula = datiIncrociati$Media.battito.cardiaco ~ datiIncrociati$Sonno.profondo +
## datiIncrociati$Sonno.leggero)
##
## Residuals:
## Min 1Q Median 3Q Max
## -16.701 -4.165 -1.085 3.144 28.730
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 67.637607 1.566074 43.189 < 2e-16 ***
## datiIncrociati$Sonno.profondo -0.024392 0.005762 -4.233 2.85e-05 ***
## datiIncrociati$Sonno.leggero -0.010899 0.003848 -2.832 0.00485 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 6.143 on 408 degrees of freedom
## Multiple R-squared: 0.05566, Adjusted R-squared: 0.05103
## F-statistic: 12.02 on 2 and 408 DF, p-value: 8.437e-06
Per verificare quanto il modello si adatti al fenomeno si useranno alcuni strumenti grafici e inferenziali sui residui. Non necessariamente un comportamento diverso da quello ideale dei residui porta a negare il modello.
Come strumento grafico si può usare il diagramma di dispersione dei residui (std) rispetto a \(x\) o $y $. Se la relazione è lineare il grafico non mostra regolarità (andamenti) ovvero positivi e negativi si alternano oppure simmetrie rispetto l’asse delle ascisse. Se i residui rispettano l’ipotesi di omoschedasticità allora la variabilità dei residui deve rimanere costante.
Mentre come test inferenziale, per l’omoschedasticità, si può usare il test di Bartlett.
{r warning=FALSE
Per la verifica della normalità si è utilizzato il diagramma quantile - quantile che risulta il miglior strumento in quanto molto preciso.
autoplot(
fitb,
which = 2,
colour = 'black',
smooth.colour = 'black',
smooth.linetype = 'dashed',
ad.colour = 'blue',
label.size = 3,
label.n = 5,
label.colour = 'blue',
ncol = 1
)
Il problema potrebbe essere dato dall’asimmetria della variabile risposta.
variabile=datiIncrociati$Media.battito.cardiaco
ggplot(datiIncrociati, aes(x = variabile)) +
geom_histogram(aes(y = ..density..),
fill = 'red',
alpha = 0.6,
bins = 30) +
geom_density(colour = 'blue',fill='blue',alpha=0.1,kernel="gaussian",adjust=0.9) +
geom_density(colour = 'green',fill='green',alpha=0.1,kernel="gaussian") +
xlab(LabMedBpm) +
ylab(LabDensita)
Come si può vedere dal grafico dei residui, merita analizzare alcune date e osservare il motivo del loro scostamento dal modello:
date=c("08/02/2020","28/11/2020","07/12/2020","18/08/2020")
dati[dati$Data=="26/03/2020",]
## Data Giorno Giorno.lettere Mese Ora.inizio Ora.fine inizioT
## 278 26/03/2020 4 Giovedì Marzo 2436 796 26/3/20 6.22
## Inizio.sonno Fine.sonno Sonno.totale Sonno.profondo Sonno.leggero
## 278 43916,01528 43916,33194 456 224 232
## Battito.medio Battito.Max Battito.Min
## 278 54 141 45
datiIncrociati[date,]
## Dì.settimana Ora.inizio Ora.fine Mese Sonno.totale
## 08/02/2020 Sabato 2028 -295 Febbraio 439
## 28/11/2020 Sabato 2266 778 Novembre 547
## 07/12/2020 Lunedì 1988 -302 Dicembre 708
## 18/08/2020 Martedì 3088 858 Agosto 372
## Sonno.profondo Sonno.leggero Media.battito.cardiaco
## 08/02/2020 200 235 78
## 28/11/2020 260 287 76
## 07/12/2020 212 496 68
## 18/08/2020 216 156 81
## Max.battito.cardiaco Min.battito.cardiaco Alcol Serata Birra
## 08/02/2020 95 48 1 1 1
## 28/11/2020 109 47 0 0 0
## 07/12/2020 95 46 0 0 0
## 18/08/2020 118 46 0 0 0
## Cocktail Spesa
## 08/02/2020 0 130
## 28/11/2020 0 0
## 07/12/2020 0 0
## 18/08/2020 0 0
Nel primo caso il Max.battito.cardiaco dovuto molto probabilmente a una errata rilevazione, il dato infatti poi è stato tolto mediante il controllo iniziale di dati rilevati male.
Nel secondo caso, invece, è l’Ora.fine che è anomala al modello. Probabilmente l’errore si è creato nell’unione dei dati alla stessa giornata.
Il 18/08/2020 il motivo dell’anomalia è che la variabile Alcol non è stata registrata come True perché non c’è stata nessuna spesa nella omonima categoria ma l’assunzione c’è stata in quanto era una festa di compleanno. Questo è il dato che di più si discosta dal modello ed è ragionevole fare fare una correzione dei dati.
datiSistemati=datiIncrociati
datiSistemati["18/08/2020","Alcol"]=1
datiSistemati["18/08/2020","Birra"]=1
datiSistemati["18/08/2020","Serata"]=1
datiSistemati["08/02/2020","Ora.fine"]=mean(datiIncrociati$Ora.fine)
datiSistemati["07/12/2020","Ora.fine"]=mean(datiIncrociati$Ora.fine)
datiSistemati["28/11/20200","Max.battito.cardiaco"]=mean(datiIncrociati$Max.battito.cardiaco[datiIncrociati$Alcol==0])
fitPulito = lm(
Media.battito.cardiaco ~ Dì.settimana + Ora.inizio + Mese + Sonno.leggero + Max.battito.cardiaco + Min.battito.cardiaco +
Alcol + Birra ,
data = datiSistemati
)
summary(fitb)[9]
## $adj.r.squared
## [1] 0.6702768
summary(fitPulito)[9]
## $adj.r.squared
## [1] 0.6614175
Da notare come la stima del coefficiente per la variabile Birra sia negativo, questo non significa che l’assunzione di birra diminuisca il battito cardiaco nel sonno. Infatti bisogna osservare anche la stima del coefficiente Alcol poiché quando Birra è verificata allora è verificata anche Alcol però nel caso in cui sia presente solo Alcol vorrà dire che c’è stata solo assunzione di Cocktail mentre se è verificata anche Birra allora la Media.battito.cardiaco sarà più bassa che del primo caso.
In questo modello la variabilità è elevata a causa della complessità del fenomeno, è naturale pensare che il battito cardiaco sia influenzato da moltissimi fattori, molti dei quali non misurabili. Però emergono alcune relazioni tra il cuore e lo stile di vita analizzato, mentre altre variabili come il sonno non risultano essere correlate significativamente con la variabile risposta.
Emerge che l’assunzione di alcolici ha un effetto nel senso che nelle giornate in cui vengono assunti alcolici la media del battito cardiaco nel sonno (in media) sarà maggiore, e questo in misura maggiore il mercoledì e il sabato e in alcuni mesi dell’anno. Nel valutare questo si è tenuto conto dell’impatto di altre caratteristiche potenzialmente correlate (ad esempio la spesa nella categoria alcolici oppure le differenze tra birra e cocktail che hanno una gradazione maggiore della birra).
Vanno evidenziati i limiti dell’interpretazione che possiamo dare a questi risultati, in particolare è possibile ipotizzare che la causa dietro a questi effetti sia che per il metabolismo dell’alcol è richiesta molta acqua, ciò porta a disidratazione e il sangue a sua volta diventa più concentrato circolando con più difficoltà nei vasi sanguigni, di conseguenza il cuore che funge da pompa per il sangue dovrà battere più velocemente.