Statistiche sulla mia vita: ho monitorato le mie abitudini per un anno e questo è ciò che ho imparato |  di Pau Blasco i Roca |  Novembre 2023

 | Intelligenza-Artificiale

Per prima cosa ho esaminato le serie temporali individuali per quattro variabili: sonno, studio, socializzazione e umore. Ho usato Microsoft Excel per disegnare rapidamente alcuni grafici. Rappresentano il numero giornaliero di ore trascorse (blu) e la media mobile¹ per cinque giorni MA(5) (rosso) che ho considerato una buona misura per la mia situazione. La variabile umore è stata valutata da 10 (il massimo!) a 0 (terribile!).

Per quanto riguarda i dati contenuti nella nota a piè di pagina di ciascun appezzamento: i totale è la somma dei valori della serie, the Significare è la media aritmetica della serie, il ST è la deviazione standard e il deviazione relativa è la STD divisa per la media.

Totale: 2361 ore. Media: 7,1 ore. STD: 1,1 ore. Deviazione relativa: 15,5% (immagine dell’autore).

Tutto sommato, con il sonno me la sono cavata abbastanza bene. Ho avuto giornate difficili, come tutti gli altri, ma penso che la tendenza sia abbastanza stabile. In effetti, è uno dei meno vari del mio studio.

Totale: 589,1 ore. Media: 1,8 ore. STD: 2,2. Deviazione relativa: 122% (immagine dell’autore).

Queste sono le ore che ho dedicato alla mia carriera accademica. Oscilla molto – trovare un equilibrio tra lavoro e studio spesso significa dover stipare progetti nei fine settimana – ma comunque mi considero soddisfatto.

Totale: 1440,9 ore. Media: 4,3 ore. STD: 4,7 ore. Deviazione relativa: 107% (immagine dell’autore).

Per quanto riguarda questo tavolo, tutto quello che posso dire è che sono sorpreso. Il totale complessivo è maggiore di quanto mi aspettassi, dato che sono un introverso. Naturalmente contano anche le ore trascorse con i colleghi al college. In termini di variabilità, la MST è davvero elevata, il che ha senso data la difficoltà di avere una routine stabilita per quanto riguarda la socializzazione.

Media: 8,0h. STD: 0,9 ore. Deviazione relativa: 11,3% (immagine dell’autore).

Questa è la serie meno variabile: la deviazione relativa è la più bassa tra le variabili da me studiate. PrimoSono soddisfatto del trend osservato. Penso che sia positivo mantenere un umore abbastanza stabile – e ancora meglio se è buono.

Dopo aver esaminato le tendenze delle variabili principali, ho deciso di approfondire e studiare le potenziali correlazioni² tra di loro. Poiché il mio obiettivo era essere in grado di modellare e prevedere matematicamente (o almeno spiegare) “Umore”, le correlazioni erano una metrica importante da considerare. Da essi potrei estrarre relazioni come le seguenti: “i giorni in cui studio di più sono quelli in cui dormo di meno”, “di solito studio lingue e musica insieme”, ecc.

Prima di fare qualsiasi altra cosa, apriamo un file Python e importiamo alcune librerie di chiavi dall’analisi delle serie. Normalmente utilizzo gli alias per loro, poiché è una pratica comune e rende le cose meno dettagliate nel codice reale.

import pandas as pd               #1.4.4
import numpy as np #1.22.4
import seaborn as sns #0.12.0
import matplotlib.pyplot as plt #3.5.2
from pmdarima import arima #2.0.4

Faremo due diversi studi per quanto riguarda la correlazione. Esamineremo il coefficiente di correlazione persona³ (per relazioni lineari tra variabili) e il coefficiente di correlazione di Spearman⁴ (che studia le relazioni monotone tra variabili). Utilizzeremo la loro implementazione⁵ nei panda.

Matrice di correlazione di Pearson

Il coefficiente di correlazione di Pearson tra due variabili X E Y viene calcolato come segue:

Dove cov è la covarianza, sigma X è std(X) e sigma Y è std(Y)

Possiamo calcolare rapidamente una matrice di correlazione, dove viene calcolata ogni possibile correlazione a coppie.

#read, select and normalize the data
raw = pd.read_csv("final_stats.csv", sep=";")
numerics = raw.select_dtypes('number')

#compute the correlation matrix
corr = numerics.corr(method='pearson')

#generate the heatmap
sns.heatmap(corr, annot=True)

#draw the plot
plt.show()

Questa è la matrice grezza di correlazione di Pearson ottenuta dai miei dati.

Matrice di correlazione di Pearson per le mie variabili (immagine dell’autore).

E questi sono i valori significativi⁶, quelli che, con una confidenza del 95%, sono diversi da zero. Eseguiamo un t-test⁷ con la seguente formula. Per ogni valore di correlazione Rho, lo scartiamo se:

Dove N è la dimensione del campione. Possiamo riciclare il codice di prima e aggiungere questo filtro.

#constants
N=332 #number of samples
STEST = 2/np.sqrt(N)

def significance_pearson(val):
if np.abs(val)<STEST:
return True
return False

#read data
raw = pd.read_csv("final_stats.csv", sep=";")
numerics = raw.select_dtypes('number')

#calculate correlation
corr = numerics.corr(method='pearson')

#prepare masks
mask = corr.copy().applymap(significance_pearson)
mask2 = np.triu(np.ones_like(corr, dtype=bool)) #remove upper triangle
mask_comb = np.logical_or(mask, mask2)

c = sns.heatmap(corr, annot=True, mask=mask_comb)
c.set_xticklabels(c.get_xticklabels(), rotation=-45)
plt.show()

Quelli che sono stati scartati potrebbero essere solo rumore e rappresentare erroneamente tendenze o relazioni. In ogni caso, è meglio presumere che una relazione vera sia priva di significato piuttosto che considerarne significativa una che non lo è (ciò che chiamiamo errore di tipo II è favorito rispetto all’errore di tipo I). Ciò è particolarmente vero in uno studio con misurazioni piuttosto soggettive.

Matrice di correlazione di Pearson filtrata. I valori non significativi (e il triangolare superiore) sono stati filtrati. (immagine dell’autore)

Coefficiente di correlazione del rango di Spearman

Il coefficiente di correlazione Spearman può essere calcolato come segue:

Dove R indica la variabile di rango⁸ — il resto delle variabili sono le stesse descritte nel coefficiente di Pearson.

Come abbiamo fatto prima, possiamo calcolare rapidamente la matrice di correlazione:

#read, select and normalize the data
raw = pd.read_csv("final_stats.csv", sep=";")
numerics = raw.select_dtypes('number')

#compute the correlation matrix
corr = numerics.corr(method='spearman') #pay attention to this change!

#generate the heatmap
sns.heatmap(corr, annot=True)

#draw the plot
plt.show()

Questa è la matrice grezza di correlazione del rango di Spearman ottenuta dai miei dati:

Matrice di correlazione di Spearman per le mie variabili (immagine dell’autore).

Vediamo quali valori sono effettivamente significativi. La formula per verificare la significatività è la seguente:

Dove R è il coefficiente di Spearman. Qui, T segue una distribuzione t-studente con n-2 gradi di libertà.

Qui, filtreremo tutti i valori t superiori (in valore assoluto) a 1,96. Ancora una volta, il motivo per cui sono stati scartati è che non siamo sicuri se si tratti di rumore – possibilità casuale – o di una tendenza reale. Codifichiamolo:

#constants
N=332 #number of samples
TTEST = 1.96

def significance_spearman(val):
if val==1:
return True
t = val * np.sqrt((N-2)/(1-val*val))
if np.abs

Fonte: towardsdatascience.com

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *