I dati longitudinali in statistica si riferiscono a osservazioni raccolte su una stessa unità di studio (ad esempio, un individuo, una famiglia, un’azienda) ripetutamente nel tempo. In altre parole, invece di raccogliere dati da diverse unità di studio in un dato momento, si seguono le stesse unità nel corso del tempo per analizzare le variazioni e i cambiamenti che si verificano all’interno di ciascuna unità. In questo articolo scopriremo cosa sono e quali tecniche di studio applicare utilizzando Python come strumento di analisi.
I Dati Longitudinali
I dati longitudinali si riferiscono a dati raccolti attraverso osservazioni ripetute su un insieme di unità di studio nel corso del tempo. Queste osservazioni possono essere raccolte a intervalli regolari o irregolari nel tempo e sono utilizzate per studiare i cambiamenti nel tempo, i processi di sviluppo, le relazioni causali e altro ancora.
Ecco alcuni esempi di dati longitudinali:
- Studio di crescita infantile: Un esempio classico di dati longitudinali è uno studio che segue lo sviluppo fisico e cognitivo di bambini nel corso del tempo. Le misurazioni potrebbero includere altezza, peso, sviluppo motorio, capacità linguistiche, ecc. Le osservazioni vengono raccolte a intervalli regolari (ad esempio, ogni sei mesi o ogni anno) dall’infanzia fino all’età adulta.
- Studio clinico: In campo medico, i dati longitudinali sono comunemente utilizzati per monitorare la progressione di una malattia o l’efficacia di un trattamento nel tempo. Ad esempio, un trial clinico potrebbe coinvolgere il monitoraggio dei livelli di zucchero nel sangue di pazienti diabetici ogni mese per un periodo di due anni per valutare l’efficacia di un nuovo farmaco.
- Indagini longitudinali sui redditi familiari: Questi studi seguono le famiglie nel tempo per raccogliere informazioni sui loro redditi, spese, condizioni di vita, ecc. Le osservazioni vengono raccolte a intervalli regolari (ad esempio, ogni anno) per analizzare le variazioni nel reddito familiare nel corso del tempo e identificare i fattori che influenzano tali cambiamenti.
- Studio longitudinale sull’occupazione: Un altro esempio potrebbe essere uno studio che segue individui nel corso della loro vita lavorativa, registrando informazioni come posizioni lavorative, salario, soddisfazione lavorativa, ecc. Questo tipo di dati può essere utilizzato per studiare i modelli di carriera, i fattori che influenzano la mobilità lavorativa e altro ancora.
In tutti questi esempi, l’obiettivo principale è quello di analizzare come le variabili cambiano nel tempo e quali fattori influenzano tali cambiamenti. I dati longitudinali forniscono una prospettiva unica che consente di esplorare le dinamiche temporali e di ottenere una comprensione più completa dei fenomeni studiati.
Un esempio di Dati Longitudinali in Python
Per comprendere al meglio la natura dei dati longitudinali possiamo implementare con Python un semplice esempio utilizzando il modulo pandas
, che è comunemente utilizzato per manipolare e analizzare dati tabulari. Supponiamo di avere un dataset che rappresenta l’altezza di un gruppo di bambini misurata a intervalli di sei mesi nel corso di tre anni.
import pandas as pd
# Creiamo un DataFrame con dati longitudinali
data = {
'ID': [1, 2, 3, 4, 5], # ID dei bambini
'Eta': [3, 3.5, 4, 4.5, 5], # Età dei bambini (anni)
'Altezza_0m': [90, 92, 88, 95, 91], # Altezza iniziale (cm)
'Altezza_6m': [93, 95, 90, 98, 94], # Altezza a 6 mesi (cm)
'Altezza_1y': [96, 98, 93, 101, 97], # Altezza a 1 anno (cm)
'Altezza_1.5y': [100, 102, 97, 105, 101], # Altezza a 1.5 anni (cm)
'Altezza_2y': [102, 104, 99, 107, 103], # Altezza a 2 anni (cm)
'Altezza_2.5y': [104, 106, 101, 109, 105] # Altezza a 2.5 anni (cm)
}
df = pd.DataFrame(data)
# Visualizziamo il DataFrame
df
Questo codice crea un DataFrame con colonne per l’ID dei bambini, la loro età e l’altezza misurata a intervalli di 6 mesi nel corso di tre anni. Ogni riga rappresenta un bambino e ogni colonna rappresenta un momento di misurazione. Ad esempio, la colonna Altezza_0m
rappresenta l’altezza iniziale dei bambini, mentre Altezza_6m
rappresenta l’altezza dei bambini dopo sei mesi, e così via.
Con questo DataFrame, è possibile eseguire varie analisi longitudinali, come la visualizzazione delle tendenze di crescita nel tempo, il calcolo della crescita media dei bambini nel corso degli anni e l’analisi delle correlazioni tra altezza e età.
I disegni di studio longitudinali
I disegni di studio longitudinali si riferiscono alla progettazione di uno studio che coinvolge l’osservazione di un insieme di unità di studio nel corso del tempo, al fine di raccogliere dati ripetuti su queste unità nel corso di periodi specifici. Questi disegni di studio sono utilizzati per studiare i cambiamenti nel tempo e per comprendere meglio i processi di sviluppo, le relazioni causali e altri fenomeni che possono variare nel corso del tempo.
Ci sono diversi tipi di disegni di studio longitudinali, tra cui:
- Studio longitudinale puro: In questo tipo di studio, le stesse unità di studio vengono osservate in momenti diversi nel tempo. Ad esempio, si potrebbe seguire lo stesso gruppo di individui nel corso di diversi anni per valutare come cambiano nel tempo.
- Studio longitudinale a panel: In questo caso, viene selezionato un campione di unità di studio e queste unità vengono osservate in più di un momento nel tempo. Può essere differenziato dallo studio longitudinale puro nel senso che il campione può cambiare nel tempo, ma le unità all’interno di ogni campione rimangono le stesse.
- Studio longitudinale a coorte: Questo tipo di studio segue una coorte di individui nel corso del tempo, osservando il gruppo in momenti successivi.
- Studio longitudinale retrospettivo: Questo tipo di studio raccoglie dati su eventi passati attraverso interviste o registri.
I dati longitudinali offrono numerosi vantaggi, tra cui la possibilità di valutare i cambiamenti nel tempo, analizzare i processi di sviluppo e individuare le relazioni causali. Tuttavia, presentano anche sfide uniche, come la gestione dei tassi di perdita di follow-up e il controllo della variabilità nel tempo. L’analisi di dati longitudinali richiede spesso tecniche statistiche specializzate, pertanto, è importante utilizzare metodi per l’analisi dei dati longitudinali, come i modelli misti o i modelli di equazioni di stima generalizzata (GEE).
Modelli Misti vs Modelli di equazioni di stima generalizzata
I modelli misti e i modelli di equazioni di stima generalizzata (GEE) sono entrambi metodi statistici utilizzati per analizzare dati longitudinali o dati che presentano correlazione intrinseca tra le osservazioni. Tuttavia, hanno approcci leggermente diversi.
Modelli misti (Mixed Effects Models):
I modelli misti sono un tipo di modello statistico che tiene conto della struttura gerarchica dei dati longitudinali. Questi modelli incorporano sia effetti fissi che effetti casuali. Gli effetti fissi sono parametri che si suppone siano costanti su tutta la popolazione e vengono stimati direttamente dal modello. Gli effetti casuali, d’altra parte, sono considerati campionati da una distribuzione di probabilità e sono usati per catturare la variazione tra le unità di studio. In altre parole, i modelli misti trattano le unità di studio come campioni casuali di una popolazione più ampia. I modelli misti sono spesso utilizzati per analizzare dati longitudinali con una struttura gerarchica, ad esempio dati in cui le osservazioni sono raggruppate all’interno di individui o di altri cluster.
Modelli di equazioni di stima generalizzata (GEE):
I modelli GEE, d’altra parte, si concentrano sull’analisi delle medie di gruppo e forniscono stime dei parametri che sono consistenti anche quando la struttura di correlazione tra le osservazioni non è specificata correttamente. Questi modelli considerano solo gli effetti fissi e non incorporano effetti casuali. Un vantaggio dei modelli GEE è che sono robusti alla specificazione errata della struttura di correlazione tra le osservazioni. I modelli GEE sono utilizzati quando si vuole fare inferenza sulle medie di gruppo e non si è interessati a stimare gli effetti casuali.
In sintesi, mentre i modelli misti sono più appropriati quando si vuole tenere conto della variabilità tra le unità di studio e quando si vuole fare inferenza sugli effetti casuali, i modelli GEE sono più appropriati quando si vuole fare inferenza sulle medie di gruppo e quando si vuole mantenere una maggiore flessibilità nella specificazione della struttura di correlazione. Entrambi i tipi di modelli sono utili strumenti per analizzare dati longitudinali, e la scelta tra i due dipende dalle specifiche domande di ricerca e dalle caratteristiche dei dati stessi.
Esempio in Python dei Mixed Effects Models
Per esemplificare l’uso dei modelli misti su un dataset longitudinale, creeremo un semplice set di dati che rappresenta le misurazioni ripetute di un gruppo di individui nel corso del tempo. Immaginiamo di avere un dataset che contiene le altezze di bambini misurate in diverse età.
import pandas as pd
import statsmodels.api as sm
import statsmodels.formula.api as smf
# Creazione del DataFrame con i dati
data = {
'Individuo': [1, 1, 1, 2, 2, 2],
'Età': [2, 4, 6, 3, 5, 7],
'Altezza': [85, 95, 105, 88, 98, 110]
}
df = pd.DataFrame(data)
df
Ecco un esempio di come potrebbe apparire il dataset:
Ogni riga rappresenta un’osservazione di un individuo in un dato momento (età) con la sua rispettiva altezza registrata.
Ora, useremo Python insieme al modulo statsmodels
per eseguire un modello misto (mixed effects model) su questi dati. Assicurati di aver installato il modulo statsmodels
prima di eseguire il codice.
# Definizione del modello misto
model = smf.mixedlm("Altezza ~ Età", df, groups=df["Individuo"])
# Addestramento del modello
result = model.fit()
# Stampare i risultati del modello
print(result.summary())
In questo esempio:
- Utilizziamo Pandas per creare un DataFrame con i nostri dati.
- Definiamo un modello misto utilizzando la funzione
mixedlm
distatsmodels.formula.api
. Qui specifichiamo la formulaAltezza ~ Età
per indicare che stiamo modellando l’altezza in funzione dell’età, e specificando il gruppo comeIndividuo
per catturare gli effetti casuali dei singoli individui. - Addestriamo il modello chiamando il metodo
fit()
. - Stampiamo i risultati del modello utilizzando
result.summary()
.
Eseguendo si ottiene il seguente risultato:
Mixed Linear Model Regression Results
=====================================================
Model: MixedLM Dependent Variable: Altezza
No. Observations: 6 Method: REML
No. Groups: 2 Scale: 0.5556
Min. group size: 3 Log-Likelihood: -7.7385
Max. group size: 3 Converged: Yes
Mean group size: 3.0
-----------------------------------------------------
Coef. Std.Err. z P>|z| [0.025 0.975]
-----------------------------------------------------
Intercept 73.307 1.156 63.389 0.000 71.040 75.574
Età 5.228 0.188 27.738 0.000 4.859 5.597
Group Var 1.051 2.746
=====================================================
Il risultato ottenuto dalla summary ti fornisce una panoramica completa dei risultati del tuo modello misto, permettendoti di valutare l’effetto delle variabili indipendenti sulle variazioni dell’altezza nel tempo, controllando simultaneamente per gli effetti individuali dei gruppi (individui) nel dataset. Ecco come interpretare i vari elementi:
Modello e variabile dipendente: Il modello utilizzato è un modello lineare misto (MixedLM). La variabile dipendente (o risposta) è l’altezza (Altezza
).
Numero di osservazioni e gruppi:
Il numero totale di osservazioni nel dataset è 6.
Il numero totale di gruppi (o individui) nel dataset è 2.
Metodo di stima: Il metodo utilizzato per stimare i parametri del modello è il REML (Restricted Maximum Likelihood), che è un metodo comune per la stima dei parametri nei modelli misti.
Scala del modello: La scala del modello, che rappresenta la varianza residua non spiegata dal modello, è 0.5556.
Log-Likelihood e Convergenza: Il valore del Log-Likelihood è -7.7385, che fornisce una misura dell’adeguatezza del modello. Il modello è convergente, il che indica che il processo di stima dei parametri è stato completato con successo.
Parametri stimati:
Intercept
: Il coefficiente stimato per l’intercetta del modello è 73.307. Questo rappresenta l’altezza media iniziale dei bambini quando l’età è zero.Età
: Il coefficiente stimato per la variabileEtà
è 5.228. Questo indica che, in media, l’altezza aumenta di 5.228 unità per ogni unità di aumento dell’età.Group Var
: Questo rappresenta la varianza tra i gruppi (individui) non spiegata dalle variabili nel modello.
Intervallo di confidenza: Per ciascun coefficiente stimato, sono forniti gli intervalli di confidenza al 95% (da 0.025 a 0.975).
Adesso aggiungiamo anche delle rappresentazioni grafiche per comprendere in maniera visuale quello che stiamo studiando
import matplotlib.pyplot as plt
import seaborn as sns
# Visualizzazione dei dati: scatter plot
plt.figure(figsize=(8, 6))
sns.scatterplot(data=df, x='Età', y='Altezza', hue='Individuo', palette='Set1', s=100)
plt.title('Scatter plot delle misurazioni di altezza per età e individuo')
plt.xlabel('Età')
plt.ylabel('Altezza')
plt.legend(title='Individuo')
plt.grid(True)
plt.show()
Eseguendo si ottiene il seguente scatterplot delle misurazioni effettuate (i dati longitudinali).
Adesso visualizzeremo il grafico dei residui. Il grafico dei residui è uno strumento utile per valutare la bontà di adattamento del modello e identificare eventuali pattern o violazioni delle assunzioni del modello. Esaminando i residui, che sono le differenze tra i valori osservati e quelli predetti dal modello, possiamo valutare se il modello cattura adeguatamente la variazione nei dati e se ci sono eventuali strutture residui che non sono state modellate correttamente.
Ecco alcune delle principali ragioni per cui si utilizza un grafico dei residui:
- Valutare la linearità
- Rilevare eteroschedasticità
- Identificare outlier o influenti
- Verificare l’assunzione di normalità
# Visualizzazione dei risultati del modello: grafico dei residui
plt.figure(figsize=(8, 6))
sns.residplot(x=result.fittedvalues, y=result.resid, lowess=True, scatter_kws={'alpha': 0.5})
plt.title('Grafico dei residui del modello misto')
plt.xlabel('Valori predetti')
plt.ylabel('Residui')
plt.grid(True)
plt.show()
Eseguendo si ottiene il grafico dei residui del modello misto
Infine, riporteremo in maniera grafica i risultati del modello, cioè i coefficienti ottenuti dal modello misto. Il grafico dei coefficienti mostra i valori stimati dei coefficienti del modello misto, insieme agli intervalli di confidenza. Questo grafico è utile per valutare l’effetto stimato di ciascuna variabile indipendente e per confrontare i loro impatti sul risultato. Può essere utile anche per identificare variabili che hanno un effetto significativo sul risultato rispetto a quelle che non lo hanno. Inoltre, confrontando i coefficienti stimati con i rispettivi intervalli di confidenza, possiamo determinare se un coefficiente è statisticamente significativo.
# Visualizzazione dei risultati del modello: grafico dei coefficienti
plt.figure(figsize=(8, 6))
sns.barplot(x=result.params.index, y=result.params.values)
plt.title('Coefficienti del modello misto')
plt.xlabel('Coefficiente')
plt.ylabel('Valore')
plt.xticks(rotation=45)
plt.grid(True)
plt.show()
Eseguendo si ottiene il grafico dei coefficienti del modello misto.
Questo è solo un esempio molto basilare di come utilizzare i modelli misti su dati longitudinali utilizzando Python. I modelli misti possono essere estesi ulteriormente per includere altre variabili come covariate e possono essere adattati per soddisfare le specifiche esigenze del tuo dataset e della tua domanda di ricerca.
Esempio in Python dei Modelli di equazioni di stima generalizzata (GEE)
Creiamo un esempio di come utilizzare i Modelli di Equazioni di Stima Generalizzata (GEE) su un dataset longitudinale. Per l’esempio, supponiamo di avere un dataset che contiene le misurazioni ripetute della pressione sanguigna di un gruppo di pazienti nel corso del tempo.
import pandas as pd
import statsmodels.api as sm
import statsmodels.formula.api as smf
# Creazione del DataFrame con i dati
data = {
'Paziente': [1, 1, 1, 2, 2, 2],
'Tempo': [1, 2, 3, 1, 2, 3],
'Pressione_Sanguigna': [120, 118, 115, 130, 128, 125],
'Trattamento': ['A', 'A', 'A', 'B', 'B', 'B']
}
df = pd.DataFrame(data)
df
Ecco un esempio di come potrebbe apparire il dataset:
Ogni riga rappresenta un’osservazione di un paziente in un dato momento (tempo) con la sua rispettiva pressione sanguigna e il trattamento ricevuto registrato. Ora, useremo Python insieme al modulo statsmodels
per eseguire un modello GEE su questi dati. Assicurati di aver installato il modulo statsmodels
prima di eseguire il codice.
# Definizione del modello GEE
model = sm.GEE.from_formula("Pressione_Sanguigna ~ Trattamento", groups="Paziente", data=df)
# Addestramento del modello
result = model.fit()
# Stampare i risultati del modello
print(result.summary())
In questo esempio:
- Utilizziamo Pandas per creare un DataFrame con i nostri dati.
- Definiamo un modello GEE utilizzando la classe
GEE
distatsmodels.api
. Qui specifichiamo la formulaPressione_Sanguigna ~ Trattamento
per indicare che stiamo modellando la pressione sanguigna in funzione del trattamento ricevuto, e specificando il gruppo comePaziente
per tener conto della correlazione tra le misurazioni dello stesso paziente. - Addestriamo il modello chiamando il metodo
fit()
. - Stampiamo i risultati del modello utilizzando
result.summary()
.
Eseguendo si otterrà il seguente risultato:
GEE Regression Results
===================================================================================
Dep. Variable: Pressione_Sanguigna No. Observations: 6
Model: GEE No. clusters: 2
Method: Generalized Min. cluster size: 3
Estimating Equations Max. cluster size: 3
Family: Gaussian Mean cluster size: 3.0
Dependence structure: Independence Num. iterations: 2
Date: Tue, 26 Mar 2024 Scale: 6.333
Covariance type: robust Time: 09:21:33
====================================================================================
coef std err z P>|z| [0.025 0.975]
------------------------------------------------------------------------------------
Intercept 117.6667 4.74e-15 2.48e+16 0.000 117.667 117.667
Trattamento[T.B] 10.0000 6.7e-15 1.49e+15 0.000 10.000 10.000
==============================================================================
Skew: -0.2391 Kurtosis: -1.5000
Centered skew: -0.2391 Centered kurtosis: -1.5000
==============================================================================
Un modo per rappresentare graficamente i risultati di un modello GEE potrebbe essere tramite un grafico a barre che mostra la media della pressione sanguigna per ciascun trattamento, insieme agli intervalli di confidenza. Questo ci permette di visualizzare facilmente le differenze medie di pressione sanguigna tra i diversi trattamenti.
import matplotlib.pyplot as plt
# Calcolare le medie della pressione sanguigna per ciascun trattamento
mean_pressure = df.groupby('Trattamento')['Pressione_Sanguigna'].mean()
# Calcolare gli errori standard per ciascun trattamento
std_error = df.groupby('Trattamento')['Pressione_Sanguigna'].std() / (df.groupby('Trattamento')['Pressione_Sanguigna'].count() ** 0.5)
# Plotting
plt.figure(figsize=(8, 6))
mean_pressure.plot(kind='bar', yerr=std_error, capsize=5, color=['blue', 'green'], alpha=0.7)
plt.title('Media della Pressione Sanguigna per Trattamento')
plt.xlabel('Trattamento')
plt.ylabel('Pressione Sanguigna')
plt.xticks(rotation=0)
plt.grid(axis='y')
plt.show()
Eseguendo si otterrà il seguente grafico:
Questo è solo un esempio molto basilare di come utilizzare i modelli GEE su dati longitudinali utilizzando Python. I modelli GEE possono essere estesi ulteriormente per includere altre variabili come covariate e specificare diverse strutture di correlazione tra le osservazioni.
Studio dei dati longitudinali
Analizzare dati longitudinali comporta una serie di passaggi e l’uso di diversi parametri statistici per comprendere e interpretare le dinamiche dei dati nel tempo. Ecco una panoramica di alcuni di questi parametri e perché vengono calcolati:
- Tasso di attrito
- ANCOVA (Analisi della Covarianza)
- Effetti fissi ed effetti casuali
- Modello di crescita:
Il calcolo di questi parametri è essenziale per una corretta interpretazione dei dati longitudinali e per ottenere una comprensione più approfondita dei processi di sviluppo, dei fattori di rischio e di protezione, nonché dell’efficacia delle interventi nel tempo. Aiuta anche a mitigare potenziali fonti di bias e a rendere l’analisi più accurata e affidabile. Li vedremo uno per uno i nella parte seguente del capitolo con alcuni semplici esempio.
Il Tasso di Attrito
Il tasso di attrito, noto anche come tasso di perdita di follow-up o tasso di abbandono, si riferisce alla percentuale di partecipanti in uno studio longitudinale che non sono più disponibili o non possono essere seguiti nel corso del tempo. Questo può accadere per una varietà di ragioni, tra cui il rifiuto di continuare a partecipare, la perdita di contatto con i partecipanti, il trasferimento o la morte.
Il tasso di attrito è un importante fattore da considerare quando si analizzano dati longitudinali, poiché può influenzare la validità e l’affidabilità delle conclusioni tratte dallo studio. Un alto tasso di attrito può portare a problemi di rappresentatività del campione, bias nei risultati e riduzione della potenza statistica.
Per gestire il tasso di attrito, gli studiosi spesso adottano diverse strategie, come il miglioramento dei metodi di raccolta dati, l’offerta di incentivi ai partecipanti per rimanere nel progetto, il mantenimento di un buon rapporto con i partecipanti nel corso del tempo e l’analisi appropriata dei dati mancanti.
In generale, è importante monitorare attentamente il tasso di attrito e considerare le sue implicazioni nell’interpretazione dei risultati dello studio longitudinale.
Ecco un esempio di come calcolare il tasso di attrito in Python utilizzando un DataFrame Pandas:
import pandas as pd
# Creazione di un DataFrame fittizio con i dati
data = {
'Individuo': [1, 2, 3, 4, 5],
'Numero di osservazioni': [5, 4, 3, 2, 1] # Numero di osservazioni per ciascun individuo
}
df = pd.DataFrame(data)
# Calcolo del numero totale di osservazioni
totale_osservazioni = df['Numero di osservazioni'].sum()
# Calcolo del numero totale di individui
totale_individui = len(df)
# Calcolo del numero di osservazioni mancanti
osservazioni_mancanti = totale_osservazioni - totale_individui
# Calcolo del tasso di attrito
tasso_attrito = (osservazioni_mancanti / totale_osservazioni) * 100
print("Numero totale di osservazioni:", totale_osservazioni)
print("Numero totale di individui:", totale_individui)
print("Numero di osservazioni mancanti:", osservazioni_mancanti)
print("Tasso di attrito:", tasso_attrito, "%")
In questo esempio, abbiamo un DataFrame che contiene il numero di osservazioni per ciascun individuo. Il tasso di attrito viene calcolato come la percentuale di osservazioni mancanti rispetto al numero totale di osservazioni. Infine, stampiamo i risultati.
Numero totale di osservazioni: 15
Numero totale di individui: 5
Numero di osservazioni mancanti: 10
Tasso di attrito: 66.66666666666666 %
Esistono diversi modi classici per visualizzare il tasso di attrito. Uno dei modi più comuni è utilizzare un grafico a barre o un grafico a torta per mostrare la proporzione di osservazioni mancanti rispetto alle osservazioni totali. Ecco un esempio di come puoi visualizzare il tasso di attrito utilizzando un grafico a torta in Python.
import matplotlib.pyplot as plt
# Creazione di una lista di etichette per il grafico a torta
labels = ['Osservazioni completate', 'Osservazioni mancanti']
# Creazione di una lista di valori per il grafico a torta
sizes = [totale_individui, osservazioni_mancanti]
# Creazione del grafico a torta
plt.figure(figsize=(8, 6))
plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=140)
plt.title('Tasso di attrito')
plt.axis('equal') # Equal aspect ratio ensures that pie is drawn as a circle.
plt.show()
Questo codice creerà un grafico a torta che mostra la proporzione di osservazioni completate e mancanti nel tuo dataset.
Effetti fissi ed Effetti casuali
Gli effetti fissi e gli effetti casuali sono due concetti fondamentali nei modelli misti utilizzati per analizzare dati longitudinali o dati con struttura gerarchica. Questi termini si riferiscono al modo in cui vengono considerate le variabili nel modello e alla natura della loro relazione con le unità di studio.
- Effetti fissi:
Gli effetti fissi sono parametri che si suppone siano costanti su tutta la popolazione e vengono stimati direttamente dal modello. Questi effetti rappresentano l’effetto medio di una variabile indipendente su una variabile dipendente. Ad esempio, in un modello che studia l’effetto di un trattamento su un risultato, l’effetto fisso del trattamento rappresenterebbe la differenza media nel risultato tra il gruppo trattato e il gruppo di controllo. - Effetti casuali:
Gli effetti casuali sono considerati campionati da una distribuzione di probabilità e sono utilizzati per catturare la variazione tra le unità di studio. Questi effetti rappresentano le deviazioni individuali rispetto alla media popolazionale. Ad esempio, se stiamo studiando l’impatto di un trattamento su diversi individui, gli effetti casuali catturerebbero le differenze individuali nella risposta al trattamento, che non possono essere spiegate solo dalle variabili indipendenti nel modello.
In breve, gli effetti fissi sono parametri che si suppone siano costanti su tutta la popolazione e si concentrano sugli effetti medi delle variabili indipendenti, mentre gli effetti casuali catturano la variazione individuale tra le unità di studio e forniscono informazioni su come queste unità differiscono rispetto alla media della popolazione. Entrambi gli effetti sono importanti da considerare nell’analisi dei dati longitudinali per comprendere sia gli effetti medi che la variazione individuale nel tempo.
Supponiamo di avere un dataset che rappresenta le altezze di bambini misurate in diverse età. Utilizzeremo un modello misto per analizzare questi dati, con effetti fissi per l’età e effetti casuali per ciascun individuo.
import pandas as pd
import statsmodels.api as sm
# Creazione del DataFrame con i dati
data = {
'Individuo': [1, 1, 1, 2, 2, 2],
'Età': [2, 4, 6, 3, 5, 7],
'Altezza': [85, 95, 105, 88, 98, 110]
}
df = pd.DataFrame(data)
# Definizione del modello misto con effetti fissi per l'età e effetti casuali per l'individuo
model = sm.MixedLM.from_formula("Altezza ~ Età", groups="Individuo", data=df)
result = model.fit()
# Stampare i risultati del modello
print(result.summary())
In questo esempio, stiamo utilizzando il modulo MixedLM
di statsmodels
per creare un modello misto. La formula specificata nella funzione from_formula
indica che stiamo modellando l’altezza in funzione dell’età, con un effetto fisso per l’età e un effetto casuale per l’individuo. La variabile Individuo
viene specificata come gruppo per catturare gli effetti casuali specifici di ciascun individuo. Infine, i risultati del modello vengono stampati utilizzando il metodo summary()
. Questo ci darà informazioni sui coefficienti stimati, sui test di significatività e su altri parametri del modello.
Mixed Linear Model Regression Results
========================================================
Model: MixedLM Dependent Variable: Altezza
No. Observations: 6 Method: REML
No. Groups: 2 Scale: 0.5556
Min. group size: 3 Log-Likelihood: -7.7385
Max. group size: 3 Converged: Yes
Mean group size: 3.0
--------------------------------------------------------
Coef. Std.Err. z P>|z| [0.025 0.975]
--------------------------------------------------------
Intercept 73.307 1.156 63.389 0.000 71.040 75.574
Età 5.228 0.188 27.738 0.000 4.859 5.597
Individuo Var 1.051 2.746
========================================================
Adesso implementiamo anche una rappresentazione grafica.
# Creazione del grafico a dispersione con linee di regressione
sns.lmplot(x='Età', y='Altezza', data=df, hue='Individuo', ci=None, scatter_kws={"s": 100})
plt.title('Effetti fissi e casuali')
plt.xlabel('Età')
plt.ylabel('Altezza')
plt.show()
In questo codice, stiamo utilizzando sns.lmplot
di Seaborn per creare un grafico a dispersione con linee di regressione. Ogni individuo è rappresentato da un colore diverso sul grafico.
Le linee di regressione mostrano gli effetti fissi, mentre la dispersione dei punti intorno alle linee riflette gli effetti casuali. Questo fornisce una rappresentazione visiva di come l’altezza dei bambini varia con l’età, tenendo conto sia degli effetti medi che delle differenze individuali.
Analisi della Covarianza (ANCOVA)
Nel contesto dei dati longitudinali, l’analisi della covarianza (ANCOVA) può essere estesa per tener conto della struttura longitudinale dei dati e per valutare le differenze tra gruppi su una variabile dipendente continua, controllando simultaneamente l’effetto di variabili continue (covariate) su più punti nel tempo. Questo approccio è spesso chiamato ANCOVA longitudinale o ANCOVA con variabili di tempo.
L’ANCOVA longitudinale considera la variabilità osservata tra i partecipanti nel corso del tempo e cerca di isolare gli effetti di interesse, controllando per le differenze iniziali o preesistenti tra i gruppi e per altre variabili che potrebbero influenzare la variabile dipendente nel tempo.
Il procedimento principale dell’ANCOVA longitudinale coinvolge la specificazione di un modello che incorpora gli effetti dei gruppi di interesse, delle variabili di controllo e il tempo. Questo modello può essere implementato utilizzando tecniche di regressione lineare multivariata, come i modelli misti (mixed effects models) o i modelli lineari generalizzati (generalized linear models).
Alcuni punti chiave da considerare nell’analisi della covarianza nei dati longitudinali includono:
- Struttura di correlazione: Poiché i dati longitudinali di solito presentano correlazione tra le osservazioni dello stesso individuo nel tempo, è necessario tenere conto di questa struttura di correlazione nell’analisi per evitare stime distorte e inferenze errate.
- Assunzioni del modello: È importante verificare che le assunzioni del modello siano soddisfatte, ad esempio l’omoschedasticità degli errori e la normalità residua.
- Controllo per confondimenti: L’ANCOVA longitudinale consente di controllare per variabili di confondimento che possono influenzare il risultato nel tempo.
- Interazione tra tempo e gruppi: È possibile esplorare le interazioni tra le variabili di gruppo e il tempo per valutare se gli effetti dei gruppi variano nel corso del tempo.
Comprensione e gestione di queste considerazioni sono fondamentali per ottenere risultati validi e interpretabili nell’analisi della covarianza nei dati longitudinali.
Supponiamo di avere un dataset simile a quello utilizzato negli esempi precedenti, dove abbiamo misurato l’altezza dei bambini in diverse età, e vogliamo valutare se l’età influisce sull’altezza dei bambini, controllando per una covariata, ad esempio il genere.
import pandas as pd
import statsmodels.api as sm
# Creazione del DataFrame con i dati
data = {
'Individuo': [1, 1, 1, 1, 2, 2, 2, 2],
'Età': [2, 4, 6, 8, 3, 5, 7, 9],
'Altezza': [85, 95, 105, 111, 88, 98, 110, 123],
'Genere': ['M', 'M', 'M', 'M', 'F', 'F', 'F', 'F']
}
df = pd.DataFrame(data)
# Definizione del modello ANCOVA
model = sm.OLS.from_formula("Altezza ~ Età + Genere", data=df)
result = model.fit()
# Stampare i risultati del modello
print(result.summary())
In questo esempio, stiamo utilizzando il modulo statsmodels
per eseguire un’analisi dell’ANCOVA. Nella formula del modello, stiamo specificando che vogliamo modellare l’altezza in funzione dell’età e del genere come covariata. Il metodo fit()
addestrerà il modello e restituirà i risultati.
OLS Regression Results
==============================================================================
Dep. Variable: Altezza R-squared: 0.975
Model: OLS Adj. R-squared: 0.966
Method: Least Squares F-statistic: 99.27
Date: Tue, 26 Mar 2024 Prob (F-statistic): 9.46e-05
Time: 09:46:30 Log-Likelihood: -16.380
No. Observations: 8 AIC: 38.76
Df Residuals: 5 BIC: 39.00
Df Model: 2
Covariance Type: nonrobust
===============================================================================
coef std err t P>|t| [0.025 0.975]
-------------------------------------------------------------------------------
Intercept 74.0000 2.543 29.095 0.000 67.462 80.538
Genere[T.M] -0.6250 1.718 -0.364 0.731 -5.042 3.792
Età 5.1250 0.375 13.667 0.000 4.161 6.089
==============================================================================
Omnibus: 0.297 Durbin-Watson: 1.169
Prob(Omnibus): 0.862 Jarque-Bera (JB): 0.367
Skew: -0.320 Prob(JB): 0.832
Kurtosis: 2.168 Cond. No. 19.9
==============================================================================
Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
Con questo codice, otterremo i risultati dell’ANCOVA che mostreranno se l’età e il genere hanno un effetto significativo sull’altezza dei bambini, controllando l’uno sull’altro.
Un esempio di come visualizzare i risultati dell’ANCOVA è quello di utilizzare un grafico a dispersione con linee di regressione separate per ciascun livello della variabile categorica (ad esempio, genere) e un colore diverso per ciascun livello.
import seaborn as sns
import matplotlib.pyplot as plt
# Creazione del grafico a dispersione con linee di regressione per ciascun livello di genere
sns.lmplot(x='Età', y='Altezza', hue='Genere', data=df, ci=None)
plt.title('ANCOVA: Altezza in funzione di Età e Genere')
plt.xlabel('Età')
plt.ylabel('Altezza')
plt.show()
In questo codice, stiamo utilizzando la funzione lmplot
di Seaborn per creare un grafico a dispersione con linee di regressione separate per ciascun livello di genere. Questo ci consentirà di visualizzare graficamente come l’altezza varia in funzione dell’età, controllando per il genere. Il parametro hue
viene utilizzato per specificare la variabile categorica (genere) che vogliamo separare e colorare le linee di regressione.
Il Modello di Crescita
Il modello di crescita è un tipo di modello statistico utilizzato per descrivere e analizzare il cambiamento di una variabile nel tempo. Questi modelli sono comunemente impiegati nell’ambito della ricerca longitudinale, in cui i dati sono raccolti in più punti nel tempo per lo stesso individuo, gruppo o unità di studio.
I modelli di crescita sono spesso utilizzati per esaminare e comprendere i processi di sviluppo, cambiamento e apprendimento nel corso del tempo. Essi possono essere applicati a una vasta gamma di fenomeni, tra cui sviluppo cognitivo, crescita fisica, cambiamenti comportamentali e molte altre aree di interesse.
Esistono diversi tipi di modelli di crescita, tra cui:
- Modelli di crescita lineare: Questi modelli assumono che il cambiamento nel tempo sia costante e lineare. Possono essere utilizzati per studiare cambiamenti che si verificano a un ritmo costante nel corso del tempo.
- Modelli di crescita non lineare: Questi modelli consentono di catturare cambiamenti che non sono lineari nel tempo. Possono includere curve a forma di S, esponenziali, quadratiche o polinomiali.
- Modelli di crescita gerarchica: Questi modelli tengono conto della struttura gerarchica dei dati, ad esempio dati raccolti su individui all’interno di gruppi o comunità. Questi modelli consentono di studiare sia i cambiamenti individuali che quelli di gruppo.
- Modelli di crescita a variabili latenti: Questi modelli implicano l’uso di variabili latenti o non osservabili per descrivere il cambiamento nel tempo. Possono essere utilizzati per modellare costrutti complessi come l’intelligenza, l’umore o l’abilità.
In sintesi, i modelli di crescita sono strumenti utili per comprendere i processi di cambiamento nel tempo e per testare ipotesi riguardanti i fattori che influenzano tali cambiamenti. La scelta del modello dipende dalla natura dei dati e dagli obiettivi specifici della ricerca.
Altri parametri fondamentali nello studio dei dati longitudinali
Esistono altri parametri fondamentali che vengono utilizzati nello studio dei dati longitudinali per fornire una comprensione completa e approfondita dei processi in esame. Ecco alcuni di essi:
- Cambiamento nel tempo: Questo parametro misura la direzione e l’entità del cambiamento delle variabili di interesse nel corso del tempo. Può essere esaminato attraverso grafici di traiettoria, analisi di regressione e modelli di crescita.
- Correlazione tra le osservazioni: È importante valutare la correlazione tra le osservazioni multiple dello stesso individuo nel tempo. Questo può influenzare la scelta del modello statistico da utilizzare e la validità delle inferenze.
- Effetti di interazione: Gli effetti di interazione valutano se l’effetto di una variabile dipendente varia in base ai livelli di una o più variabili indipendenti nel corso del tempo. Questo parametro è importante per comprendere come le relazioni tra le variabili possono cambiare nel tempo.
- Varianza spiegata e non spiegata: Questi parametri misurano la proporzione della varianza totale nelle variabili di interesse che è spiegata dai modelli statistici utilizzati. Questi sono importanti per valutare quanto bene il modello si adatta ai dati e quanto della variazione è dovuto a fattori non inclusi nel modello.
- Valutazione dei modelli: La valutazione dei modelli implica l’uso di criteri come il coefficiente di determinazione (R²), il criterio di informazione di Akaike (AIC) e il criterio di informazione bayesiano (BIC) per valutare la bontà di adattamento e la complessità dei modelli.
- Analisi di sopravvivenza: In alcuni casi, l’analisi di sopravvivenza può essere utilizzata per modellare il tempo fino all’evento di interesse, ad esempio, il tempo fino alla diagnosi di una malattia o il tempo fino alla disoccupazione.
- Analisi dei cluster: Se i dati longitudinali sono raccolti da diversi siti o gruppi, l’analisi dei cluster può essere utilizzata per esaminare le differenze tra i gruppi e per valutare l’eterogeneità dei dati longitudinali.
Questi sono solo alcuni esempi di parametri importanti nello studio dei dati longitudinali. La scelta dei parametri da utilizzare dipende dall’obiettivo dello studio, dalla natura dei dati e dalle domande di ricerca specifich