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

Aggiungi un commento

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