従業員ブロック内でのANOVA
前回までの製造企業の分析では、従業員の生産性をブロックごとに調べ、インセンティブ制度を導入しました。ここからは、より深くデータを掘り下げます。企業は、さらに1200人の従業員とその productivity_score を含む、より充実したデータセットを productivity のDataFrameに用意し、生産性レベルに基づいて従業員を3つのブロックに分けました。各従業員には、3つのインセンティブのいずれか('Bonus'、'Profit Sharing'、'Work from Home')がランダムに割り当てられています。
インセンティブ処置が生産性に与える全体的な影響を評価する前に、最初の割り当てが本当にランダムであり、異なる生産性ブロック間で公平だったかを確認することが重要です。これにより、処置後に観測される生産性の差が、ブロック間の事前の違いではなく、インセンティブそのものに起因すると自信を持って言えるようになります。
scipy.stats の f_oneway() 関数はすでに読み込まれています。
この演習はコースの一部です
Pythonで学ぶ実験計画法
演習の手順
- データ内で異なるブロックを表す適切な列で
prod_dfをグループ化します。 - 各ブロック内でANOVAを実行するため、引数を指定した
lambda関数を適用します。 - 各ブロック内の処置ごとに、
'Treatment'列の値でprod_dfをフィルタし、'productivity_score'列を選択します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Perform the within blocks ANOVA, first grouping by block
within_block_anova = prod_df.groupby('____').apply(
# Set function
lambda x: ____(
# Filter Treatment values based on outcome
x[x['____'] == '____']['____'],
x[x['____'] == '____']['____'],
x[x['____'] == '____']['____'])
)
print(within_block_anova)