項目分析#
テストを実施したあと、モデルをあてはめてパラメータを推定する前の段階で簡単に計算できる指標群で項目の良し悪しを考察できる。
項目困難度 / 通過率#
古典テスト理論における項目困難度は、正答率のこと。
わかりやすさのために「通過率」と呼ばれることもある。各設問の正答の容易さを示す。
responses.mean().to_frame("mean").head()
| mean | |
|---|---|
| item_1 | 0.788 |
| item_2 | 0.336 |
| item_3 | 0.302 |
| item_4 | 0.422 |
| item_5 | 0.372 |
項目識別力#
古典テスト理論における項目識別力は、素点(テスト得点)と各項目得点の相関をみるもの。
テストで測りたい能力を大まかに表すものである素点に対し、各項目が相関している(能力を測るのに貢献している)ことを確かめる。
| item | corr | |
|---|---|---|
| 0 | item_1 | 0.127 |
| 1 | item_2 | 0.024 |
| 2 | item_3 | 0.466 |
| 3 | item_4 | 0.306 |
| 4 | item_5 | 0.346 |
項目特性図 / トレースライン#
各被験者の素点やテスト得点(をビンに区切ったもの)を横軸に、素点ごとの各選択肢の選択割合を縦軸にした折れ線グラフ。
素点が高くなるに従って項目の正答率も上昇していれば識別力の高い項目と判断される。
逆に、素点が低い受験者のほうが正答率が高いような設問は識別力が低い疑いがある
[Text(0.5, 1.0, '識別力が低い項目')]
/tmp/ipykernel_8494/1452260162.py:7: FutureWarning: The default of observed=False is deprecated and will be changed to True in a future version of pandas. Pass observed=False to retain current behavior or observed=True to adopt the future default and silence this warning.
stats = df.groupby("raw_score")[item_cols].mean().reset_index()
/tmp/ipykernel_8494/1452260162.py:10: FutureWarning: Downcasting behavior in `replace` is deprecated and will be removed in a future version. To retain the old behavior, explicitly call `result.infer_objects(copy=False)`. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`
stats["raw_score"] = stats["raw_score"].replace(dict(zip(rs.cat.categories, rs.cat.codes))).astype(str)
/tmp/ipykernel_8494/1452260162.py:10: FutureWarning: The behavior of Series.replace (and DataFrame.replace) with CategoricalDtype is deprecated. In a future version, replace will only be used for cases that preserve the categories. To change the categories, use ser.cat.rename_categories instead.
stats["raw_score"] = stats["raw_score"].replace(dict(zip(rs.cat.categories, rs.cat.codes))).astype(str)
<Axes: xlabel='raw_score', ylabel='pass_rate'>