Thiết kế khối ngẫu nhiên: kiểm soát phương sai

Thiết kế thí nghiệm với Python

James Chapman

Curriculum Manager, DataCamp

Hiểu về chia khối (blocking)

 

  • Giảm phương sai bằng cách gom nhóm các đơn vị tương đồng
  • Mỗi khối nhận tất cả các nghiệm thức
  • Tập trung vào hiệu ứng nghiệm thức, kiểm soát hiệu ứng khối

Ví dụ về ngẫu nhiên hóa theo khối với hai lưới ô vuông cam và trắng

Thiết kế thí nghiệm với Python

Ví dụ dữ liệu cho thiết kế khối

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
Thiết kế thí nghiệm với Python

Triển khai thiết kế khối ngẫu nhiên

  • Dùng .groupby() để xáo trộn trong từng khối
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
Thiết kế thí nghiệm với Python

Đã triển khai khối ngẫu nhiên

  • numpy.random.choice() để gán nghiệm thức ngẫu nhiên trong từng khối
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
Thiết kế thí nghiệm với Python

Trực quan hóa hiệu ứng trong khối

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

Biểu đồ hộp trong từng khối

Thiết kế thí nghiệm với Python

ANOVA trong khối

  • Giả sử mức ý nghĩa $\alpha$ là 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
Thiết kế thí nghiệm với Python

Trực quan hóa hiệu ứng giữa các khối

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

Biểu đồ hộp giữa các khối

Thiết kế thí nghiệm với Python

ANOVA giữa các khối

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)
Thiết kế thí nghiệm với Python

Cùng luyện tập nào!

Thiết kế thí nghiệm với Python

Preparing Video For Download...