Design pe blocuri randomizate: controlul varianței

Design experimental în Python

James Chapman

Curriculum Manager, DataCamp

Înțelegerea blocării

 

  • Reducerea varianței prin gruparea unităților similare
  • Fiecare bloc primește toate tratamentele
  • Focalizare pe efectele tratamentului, controlând efectele blocurilor

Exemplu de randomizare pe blocuri cu două grile de pătrate portocalii și albe

Design experimental în Python

Exemplu de date pentru designul pe blocuri

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
Design experimental în Python

Implementarea designului pe blocuri randomizate

  • Utilizați .groupby() pentru amestecare în cadrul blocurilor
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
Design experimental în Python

Blocuri randomizate implementate

  • numpy.random.choice() pentru atribuirea aleatorie a tratamentului în cadrul blocurilor
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
Design experimental în Python

Vizualizarea efectelor tratamentului în cadrul blocurilor

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

Boxplot în cadrul blocurilor

Design experimental în Python

ANOVA în cadrul blocurilor

  • Se presupune un nivel de semnificație $\alpha$ de 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
Design experimental în Python

Vizualizarea efectelor între blocuri

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

Boxplot între blocuri

Design experimental în Python

ANOVA între blocuri

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)
Design experimental în Python

Să exersăm!

Design experimental în Python

Preparing Video For Download...