Randomized block design: controllo della varianza

Progettazione Sperimentale in Python

James Chapman

Curriculum Manager, DataCamp

Capire il blocking

 

  • Riduci la varianza raggruppando unità simili
  • Ogni blocco riceve tutti i trattamenti
  • Concentrati sugli effetti del trattamento, controllando gli effetti di blocco

Esempio di randomizzazione a blocchi con due griglie di quadrati arancioni e bianchi

Progettazione Sperimentale in Python

Esempio di dati per disegno a blocchi

athletes.head()
   Athlete_ID Initial_Fitness_Level  Muscle_Gain_kg
0         113              Beginner        3.225102
1          30              Advanced        3.976548
2         183          Intermediate        5.165449
3         200              Beginner        2.188297
4         194              Beginner        4.724162
Progettazione Sperimentale in Python

Implementare il randomized block design

  • Usa .groupby() per mescolare all'interno dei blocchi
blocks = athletes.groupby('Initial_Fitness_Level').apply(

lambda x: x.sample(frac=1)
)
blocks = blocks.reset_index(drop=True) blocks
     Athlete_ID Initial_Fitness_Level  Muscle_Gain_kg
0           198              Advanced           5.742
1           146              Advanced           6.248
2           157              Advanced           6.049
..          ...                   ...             ...
198         164          Intermediate           6.134
199         178          Intermediate           6.591
Progettazione Sperimentale in Python

Blocchi randomizzati implementati

  • numpy.random.choice() per assegnare trattamenti casuali nei blocchi
blocks['Treatment'] = np.random.choice(
    ['Cardio', 'Strength Training', 'Mixed'],
    size=len(blocks))

blocks.sample(n=5)
     Athlete_ID  Initial_Fitness_Level  Muscle_Gain_kg          Treatment
 87         194               Beginner           4.724             Cardio
 54           3               Advanced           3.731  Strength Training
177          80           Intermediate           6.758              Mixed
146         183           Intermediate           5.165  Strength Training          
 60         190               Advanced           3.763             Cardio
Progettazione Sperimentale in Python

Visualizzare gli effetti per trattamento nei blocchi

import seaborn as sns
sns.boxplot(x='Initial_Fitness_Level', y='Muscle_Gain_kg', hue='Treatment', data=blocks)
plt.show()

Boxplot all'interno dei blocchi

Progettazione Sperimentale in Python

ANOVA nei blocchi

  • Supponi un livello di significatività $\alpha$ = 0,05
from scipy.stats import f_oneway
blocks.groupby('Initial_Fitness_Level').apply(
  lambda x: f_oneway(x[x['Treatment'] == 'Cardio']['Muscle_Gain_kg'], 
                     x[x['Treatment'] == 'Mixed']['Muscle_Gain_kg'],
                     x[x['Treatment'] == 'Strength Training']['Muscle_Gain_kg'])
)
Block
Initial_Fitness_Level
Advanced        (0.7951054385317405, 0.4555687666120679)
Beginner        (0.1085790370950905, 0.8972754969684291)
Intermediate    (0.5678877824942661, 0.5698403547950377)
dtype: object
Progettazione Sperimentale in Python

Visualizzare gli effetti tra blocchi

import seaborn as sns
sns.boxplot(x='Initial_Fitness_Level', y='Muscle_Gain_kg', data=blocks)
plt.show()

Boxplot tra blocchi

Progettazione Sperimentale in Python

ANOVA tra blocchi

f_oneway(
  blocks[blocks['Initial_Fitness_Level'] == "Advanced"]['Muscle_Gain_kg'], 
  blocks[blocks['Initial_Fitness_Level'] == "Beginner"]['Muscle_Gain_kg'], 
  blocks[blocks['Initial_Fitness_Level'] == "Intermediate"]['Muscle_Gain_kg']
)
F_onewayResult(statistic=2.325058605244051, pvalue=0.10045536062209368)
Progettazione Sperimentale in Python

Passiamo alla pratica !

Progettazione Sperimentale in Python

Preparing Video For Download...