C:\Users\paolo\AppData\Local\Programs\Python\Python311\Lib\site-packages\scipy\stats\_axis_nan_policy.py:418: UserWarning:
`kurtosistest` p-value may be inaccurate with fewer than 20 observations; only n=10 observations were given.
3 Propensity Score Matching (PSM)
Il PSM abbina le unità trattate con quelle di controllo che hanno una probabilità simile di ricevere il trattamento, basata su variabili osservabili. È utile per ridurre il bias di selezione.
Esempio in Python Supponiamo di avere un dataset con le colonne treatment, outcome, e alcune variabili predittive (X1, X2).
import pandas as pdfrom sklearn.linear_model import LogisticRegressionfrom sklearn.neighbors import NearestNeighbors# Dataset simulatodata = pd.DataFrame({'treatment': [1, 0, 1, 0, 1, 0, 1, 0],'outcome': [10, 5, 12, 6, 11, 4, 13, 7],'X1': [3, 2, 4, 2, 3, 1, 5, 2],'X2': [7, 6, 8, 5, 7, 4, 9, 5]})# Calcolo del propensity scoreX = data[['X1', 'X2']]y = data['treatment']logit = LogisticRegression()data['propensity_score'] = logit.fit(X, y).predict_proba(X)[:, 1]# Matching usando i Nearest Neighborstreated = data[data['treatment'] ==1]control = data[data['treatment'] ==0]nn = NearestNeighbors(n_neighbors=1)nn.fit(control[['propensity_score']])distances, indices = nn.kneighbors(treated[['propensity_score']])# Creazione del dataset abbinatomatched_control = control.iloc[indices.flatten()].reset_index(drop=True)matched_treated = treated.reset_index(drop=True)# Unire i dati con suffissimatched_data = pd.concat([matched_treated, matched_control], axis=1, keys=["treated", "control"])matched_data.columns = [f"{col[0]}_{col[1]}"for col in matched_data.columns]# Calcolo della differenza negli outcomeeffect = matched_data['treated_outcome'].mean() - matched_data['control_outcome'].mean()print(f"Effetto stimato del trattamento: {effect}")
Effetto stimato del trattamento: 6.5
4 cosa significa 6.5?
Quando il codice restituisce un valore come Effetto stimato del trattamento: 6.5, significa che l’effetto medio del trattamento (cioè la differenza media tra il gruppo trattato e il gruppo di controllo in termini di un determinato outcome) è pari a 6.5 unità
In termini pratici:
Il gruppo trattato ha ricevuto un trattamento o intervento specifico. Il gruppo di controllo non ha ricevuto il trattamento, ma viene utilizzato come punto di riferimento per capire cosa sarebbe successo al gruppo trattato in assenza del trattamento. 6.5 indica che, in media:
Il trattamento ha aumentato (o ridotto) l’outcome del gruppo trattato di 6.5 unità rispetto al gruppo di controllo. Un esempio pratico Supponiamo che tu stia valutando l’effetto di un programma di formazione aziendale sulla produttività dei dipendenti, e l’outcome misurato sia il numero di unità prodotte.
Il gruppo trattato (dipendenti che hanno partecipato al corso) ha una produttività media di 15 unità. Il gruppo di controllo (dipendenti che non hanno partecipato) ha una produttività media di 8.5 unità. L’effetto stimato del trattamento è:
15−8.5=6.5
L’intervento ha aumentato la produttività di 6.5 unità, in media.
##Limiti e considerazioni - Causalità: L’effetto stimato assume che tutti i bias di selezione e le - differenze osservabili/non osservabili tra i due gruppi siano correttamente - gestiti (ad esempio, con il Propensity Score Matching o un disegno - sperimentale ben fatto). - Significatività statistica: È importante verificare se l’effetto stimato è - statisticamente significativo (es. con un test statistico). - Unità di misura: Assicurati che il risultato sia chiaro in termini dell’outcome misurato (es. unità prodotte, reddito, vendite, ecc.).
5 Librerie utili:
statsmodels: Per la regressione del DiD.
sklearn: Per calcolare il propensity score e abbinare i dati.
causalinference: Per analisi causali.
econml: Per metodi avanzati di stima degli effetti causali.