实验数据设置

Python 实验设计

James Chapman

Curriculum Manager, DataCamp

随机化的问题

1) 不均衡问题:各组受试者数量不同

两个组中受试者数量不同。

Python 实验设计

随机化的问题

2) 协变量问题:某些协变量波动大 → 随机化时组间不平衡

控制组与处理组用于衡量年龄对反应时间的影响。两组的体能分布不均,虽非研究重点,但可能影响反应时间变量。

结果:更难测量处理效应!

Python 实验设计

区组随机化

 

  • 先按大小为 n 的区组划分,再随机分配
    • 解决不均衡问题

区组随机化示例,展示两个由橙色和白色方格组成的网格

  • 24 名受试者先分两组后再随机化
Python 实验设计

我们的数据集

  • 电商数据集(ecom)(1000 名受试者)
    • 平均购物篮大小
    • 网站平均停留时间
    • 重度用户(网站日均 40+ 分钟)
   basket_size  web_time  power_user
0          227         7           0
1          123         5           0
2           98        16           0
3          211        45           1
4          133        17           0
Python 实验设计

Python 中的区组随机化

group1 = ecom.sample(frac=0.5, random_state=42, replace=False)
group1['Block'] = 1
group2 = ecom.drop(group1.index)
group2['Block'] = 2
print(len(group1), len(group2))
500,500
Python 实验设计

可视化划分

 

import seaborn as sns
import matplotlib.pyplot as plt
sns.displot(data=ecom, 
            x='basket_size', 
            hue='power_user', 
            fill=True, 
            kind='kde')    
plt.show()

混杂 = 变量可能由其引起效果而非处理

 

一张 seaborn 分布图,显示两个半透明、近似正态的分布。一个更大的蓝色分布和一个更小的橙色分布,略有重叠,橙色更靠右

Python 实验设计

分层随机化

 

  • 先按协变量划分
    • 再随机分配
  • 绿色 = 全部重度用户(黄色 = 非重度用户)
    • 然后再分配处理/对照
  • 解决协变量/混杂问题
  • 可用于多协变量,但会变复杂

两块数据网格,一块为绿色,一块为黄色。每个单元格标有字母 T 或 C,黄色网格更大

Python 实验设计

第一层(strata)

  • 分离重度用户
  • 抽样分到处理/对照
strata_1 = ecom[ecom['power_user'] == 1]
strata_1['Block'] = 1

strata_1_g1 = strata_1.sample(frac=0.5, replace=False) strata_1_g1['T_C'] = 'T'
strata_1_g2 = strata_1.drop(strata_1_g1.index) strata_1_g2['T_C'] = 'C'
Python 实验设计

第二层(strata)

  • 分离非重度用户
  • 抽样分到处理/对照
strata_2 = ecom.drop(strata_1.index)
strata_2['Block'] = 2

strata_2_g1 = strata_2.sample(frac=0.5, replace=False) strata_2_g1['T_C'] = 'T' strata_2_g2 = strata_2.drop(strata_2_g1.index) strata_2_g2['T_C'] = 'C'
Python 实验设计

确认分层

  • 合并区组与分组
  • 用 groupby 检查分配
ecom_stratified = pd.concat([strata_1_g1, strata_1_g2, strata_2_g1, strata_2_g2])

ecom_stratified.groupby(['Block','T_C', 'power_user']).size()
Block  T_C  power_user
1      C    1              50
       T    1              50
2      C    0             450
       T    0             450
Python 实验设计

让我们来练习!

Python 实验设计

Preparing Video For Download...