Come eseguire un'anova bidirezionale in python
Un’ANOVA a due vie viene utilizzata per determinare se esiste o meno una differenza statisticamente significativa tra le medie di tre o più gruppi indipendenti che sono stati suddivisi in due fattori.
Lo scopo di un’ANOVA a due vie è determinare l’impatto di due fattori su una variabile di risposta e determinare se esiste o meno un’interazione tra i due fattori sulla variabile di risposta.
Questo tutorial spiega come eseguire un’ANOVA bidirezionale in Python.
Esempio: ANOVA a due vie in Python
Un botanico vuole sapere se la crescita delle piante è influenzata dall’esposizione alla luce solare e dalla frequenza delle annaffiature. Pianta 30 semi e li lascia crescere per due mesi in diverse condizioni di esposizione al sole e frequenza di irrigazione. Dopo due mesi registra l’altezza di ciascuna pianta, in pollici.
Utilizzare i seguenti passaggi per eseguire un’ANOVA bidirezionale per determinare se la frequenza di irrigazione e l’esposizione al sole hanno un effetto significativo sulla crescita delle piante e per determinare se esiste un effetto di interazione tra la frequenza dell’acqua e l’esposizione al sole. irrigazione ed esposizione al sole.
Passaggio 1: inserisci i dati.
Innanzitutto, creeremo un DataFrame panda che contiene le seguenti tre variabili:
- acqua: quanto spesso è stata annaffiata ogni pianta: giornaliera o settimanale
- sole: quantità di esposizione solare ricevuta da ciascuna pianta: bassa, media o alta
- altezza: l’altezza di ciascuna pianta (in pollici) dopo due mesi
import numpy as np import pandas as pd #create data df = pd.DataFrame({'water': np.repeat(['daily', 'weekly'], 15), 'sun': np.tile(np.repeat(['low', 'med', 'high'], 5), 2), 'height': [6, 6, 6, 5, 6, 5, 5, 6, 4, 5, 6, 6, 7, 8, 7, 3, 4, 4, 4, 5, 4, 4, 4, 4, 4, 5, 6, 6, 7, 8]}) #view first ten rows of data df[:10] water sun height 0 daily low 6 1 daily low 6 2 daily low 6 3 daily low 5 4 daily low 6 5 daily med 5 6 daily med 5 7 daily med 6 8 daily med 4 9 daily med 5
Passaggio 2: eseguire l’ANOVA bidirezionale.
Successivamente, eseguiremo l’ANOVA bidirezionale utilizzando la funzione anova_lm() dalla libreria statsmodels:
import statsmodels.api as sm from statsmodels.formula.api import ols #perform two-way ANOVA model = ols('height ~ C(water) + C(sun) + C(water):C(sun)', data=df).fit() sm.stats.anova_lm(model, typ=2) sum_sq df F PR(>F) C(water) 8.533333 1.0 16.0000 0.000527 C(sun) 24.866667 2.0 23.3125 0.000002 C(water):C(sun) 2.466667 2.0 2.3125 0.120667 Residual 12.800000 24.0 NaN NaN
Passaggio 3: interpretare i risultati.
Possiamo vedere i seguenti valori p per ciascuno dei fattori nella tabella:
- acqua: valore p = 0,000527
- sole: valore p = 0,0000002
- acqua*sole: valore p = 0,120667
Poiché i valori p dell’acqua e del sole sono entrambi inferiori a 0,05, ciò significa che entrambi i fattori hanno un effetto statisticamente significativo sull’altezza delle piante.
E poiché il valore p per l’effetto di interazione (0,120667) non è inferiore a 0,05, ciò ci dice che non esiste un effetto di interazione significativo tra l’esposizione al sole e la frequenza di irrigazione.
Nota: sebbene i risultati ANOVA ci dicano che la frequenza di irrigazione e l’esposizione al sole hanno un effetto statisticamente significativo sull’altezza delle piante, dovremo eseguire test post-hoc per determinare esattamente in che modo i diversi livelli di acqua e luce solare influiscono sull’altezza delle piante.
Risorse addizionali
I seguenti tutorial spiegano come eseguire altre attività comuni in Python:
Come eseguire ANOVA unidirezionale in Python
Come eseguire un’ANOVA a tre vie in Python