井出草平の研究ノート

Mokken尺度分析③

ides.hatenablog.com

ides.hatenablog.com

単調性(Monotonicity)と不変項目順序(IIO)の診断

第2回では、AISP(自動項目選択)によって抽出された下位尺度を比較し、lowerbound = 0.4、かつ k ≥ 4 の尺度群を主要結果として採用した。本稿では、それらの下位尺度が 「順序尺度として実際に運用可能か」 を追加で点検する。

Mokken尺度分析において、尺度性(H)が十分であることは必要条件に過ぎない。順序尺度としての解釈を支えるためには、少なくとも以下の2点が大きく破綻していないことを確認する必要がある。

  1. 単調性(monotonicity)
  2. 不変項目順序(Invariant Item Ordering; IIO)

本稿は、AISPで得られた「まとまり」が、合計得点による序列づけに耐えうるかを診断する段階に位置づけられる。

1) 単調性(Monotonicity)の診断

単調性とは、潜在特性が高くなるほど「より高い反応(肯定・高カテゴリ)」が出やすくなり、その確率が途中で逆向きにならないという性質である。順序尺度として合計得点を使うなら、少なくとも「特性が高い人ほど高得点になりやすい」という単調な関係が概ね成立している必要がある。

Mokken尺度分析では、他項目合計(restscore)で受検者を層別化し、その層ごとに反応確率が不自然に逆転していないかを調べることで、単調性の違反を検出する。

以下は「下位尺度の項目集合」を sub_items として渡し、単調性診断を回す例である。第2回で抽出した lowerbound=0.4、k≥4 の尺度ごとに、同じ処理を適用する。

前のノートオブジェクトの確認

str(main_04)

## 1) items 列(文字列)を「項目ベクトル」に分解する
main_04 <- main_04 %>%
  mutate(
    item_vec = str_split(items, pattern = ",\\s*")
  )

## 2) check.monotonicity() の method 引数の有無を確認(バージョン差対策)
use_method <- "method" %in% names(formals(check.monotonicity))
## 3) 単調性診断用の関数を定義
run_check_mono <- function(sub_items) {
  df_sub <- df.acl[, sub_items, drop = FALSE]

  if (use_method) {
    res <- check.monotonicity(df_sub, method = "restscore", minsize = 30)
  } else {
    res <- check.monotonicity(df_sub, minsize = 30)
  }

  return(res)
}

## 4) 尺度ごとに単調性診断を実行
mono_res_list <- lapply(main_04$item_vec, run_check_mono)

## 尺度番号を名前として付与
names(mono_res_list) <- paste0("scale_", main_04$scale)

## 5) 例として、最初の尺度の結果を表示
summary(mono_res_list[[1]])
Warning :Varying numbers of item scores were observed across the items.
  Either the items have the same number of response categories but some item categories were not endorsed;
  or the items have
      different numbers of categories by design. 
  In the latter case, the sum score cannot be used for (ordinal) measurement.
             ItemH #ac #vi #vi/#ac maxvi  sum sum/#ac zmax #zsig crit
attractive    0.65  47   0    0.00  0.00 0.00  0.0000 0.00     0    0
charming      0.49  94   9    0.10  0.15 0.67  0.0071 1.85     1   53
handsome      0.67  38   0    0.00  0.00 0.00  0.0000 0.00     0    0
good.looking  0.68  56   1    0.02  0.03 0.03  0.0006 0.27     0    0
sexy          0.62  68   2    0.03  0.11 0.15  0.0022 1.30     0   12
  • ItemH が全部 0.49〜0.68 と高く、尺度性はかなり良好

    • attractive: 0.65(違反 0)
    • handsome: 0.67(違反 0)
    • good.looking: 0.68(違反 1 / 56 ≒ 0.02)
    • sexy: 0.62(違反 2 / 68 ≒ 0.03) → いずれも単調性違反はほとんどなく、「残差得点が高い人ほど高カテゴリを取りやすい」という Mokken の前提はまず守られている。
  • charming だけ、やや違反が多め

    • ItemH = 0.49 とやや低め(とはいえまだ悪くはない)
    • ac = 94 に対して vi = 9(約 10%)
    • zmax = 1.85, zsig = 1, crit = 53 → 「単調性にやや怪しい部分があるが、致命的というほどではない」くらいの位置づけ。

まとめ

この 5 項目尺度は、

  • 全体としては 単調性の前提はかなり良く守られていて、Mokken 尺度として十分に使えるレベル
  • ただし charming は他の 4 項目に比べると、反応パターンが少し素直ではない部分がある → 場合によってはプロット(plot(mono_res_list[[1]]))でどの得点帯でおかしな挙動をしているかを確認してもよい

2) 不変項目順序(IIO)の診断

不変項目順序(Invariant Item Ordering; IIO)とは、潜在特性の水準にかかわらず、項目の「難しさ順(平均得点順)」が入れ替わらないという性質である。
IIOが成立すれば、「この項目は常にこの項目より“難しい”」「項目自体に安定した序列がある」といった、項目レベルでの解釈が可能になる。
ただしIIOは、単調性よりもはるかに強い仮定であり、短尺度やカテゴリ分布が偏ったデータでは成立しにくい。

2-1. 分析方針

ここでも対象は、第2回で主要結果とした lowerbound=0.4, k≥4 の下位尺度(main_04) とする。 各尺度について、単調性が概ね保たれていることを前提に、check.iio() を用いて

  • IIO が概ね成立していそうか(大きな違反が少ないか)
  • どの項目ペアで IIO 違反が生じやすいか

を点検する。IIO が完全には成立しない場合でも、「大きな違反はごく一部に限られている」のであれば、“近似的な項目順序” として利用するかどうかを検討できる。

2-2. 実行コード:主要尺度ごとに IIO をチェックする

check.iio() もバージョンによって method 引数の有無が異なるため、単調性のときと同様に事前チェックを入れておく。 こちらでも、第2回で作成した main_04 を利用する。

library(dplyr)
library(stringr)

## - item_vec 列:項目名ベクトル(まだなければここで作る)
main_04 <- main_04 %>%
  mutate(
    item_vec = str_split(items, pattern = ",\\s*")
  )

## 1) check.iio() の method 引数の有無を確認(バージョン差対策)

use_method_iio <- "method" %in% names(formals(check.iio))

## 2) IIO 診断用の関数を定義

run_check_iio <- function(sub_items) {
df_sub <- df.acl[, sub_items, drop = FALSE]

if (use_method_iio) {
# 代表的な設定:変換指標 Htrans に基づく IIO チェック
res <- check.iio(df_sub, method = "Htrans")
} else {
# 古いバージョンなど method 引数がない場合
res <- check.iio(df_sub)
}

return(res)
}

## 3) 主要尺度ごとに IIO を実行

iio_res_list <- lapply(main_04$item_vec, run_check_iio)

## 尺度番号を名前として付与

names(iio_res_list) <- paste0("scale_", main_04$scale)

## 4) 例として、最初の尺度(外見魅力尺度)の IIO 結果を表示

summary(iio_res_list[[1]])
$item.summary
             ItemH #ac #vi #vi/#ac maxvi  sum sum/#ac tmax #tsig crit
attractive    0.65   8   0    0.00  0.00 0.00  0.0000 0.00     0    0
charming      0.49   9   1    0.11  0.14 0.14  0.0157 2.15     1   67
handsome      0.67   8   1    0.12  0.14 0.14  0.0177 2.15     1   63
good.looking  0.68   8   0    0.00  0.00 0.00  0.0000 0.00     0    0
sexy          0.62   9   0    0.00  0.00 0.00  0.0000 0.00     0    0

$backward.selection
             step 1 step 2
attractive        0      0
charming          1     NA
handsome          1      0
good.looking      0      0
sexy              0      0

$HT
[1] 0.1751848

HT(Htrans)は「項目間の順序がどれくらい安定しているか」を表す指標で、だいたいの目安は次のように扱われる。

  • HT ≈ 0.30 未満 …… IIO は弱い/あまり支持されない
  • HT ≈ 0.30〜0.40 …… 弱い〜中程度の IIO
  • HT が高いほど …… 項目順序が「どの人でもだいたい同じ」になりやすい

今回の尺度では HT ≈ 0.18 なので、完全にダメではないが「IIO が強く成立している」ともいえない。

項目ごとの違反状況:どこで引っかかっているか

  • attractive / good.looking / sexy -- #vi = 0(違反なし): -- → 他の項目との順序が サンプル内では安定している

  • charming / handsome -- #vi = 1、#vi/#ac ≒ 0.11〜0.12: -- 比較した状況のうち約 1 割で、期待される項目順序が逆転する -- tmax が 2.15 で、#tsig = 1 なので、 --「統計的に有意と判定される逆転が 1 つある」

IIO を崩している“弱い箇所”は主に charming と handsome に集中している一方、他の3項目は順序がかなり安定している

backward.selection の意味:どの項目を削れば IIO がよくなるか

backward.selection は「IIO を損ねている項目を、後ろ向きに削りながらチェックする」手続きで、

  • step 1 で charming と handsome に 1 が付いている
  • → IIO をよくするには、このあたりを削る候補になる

  • step 2 では charming が NA(=すでに外された)、handsome は 0

  • → charming を外すと、残りの 4 項目では IIO が改善する

という読み方になる。

  • 尺度としてのまとまり(ItemH)自体は十分高い
  • IIO は「弱め」であり、とくに charming / handsome がやや不安定
  • 厳密な IIO を前提にするなら、charming を削るのが一案

まとめ

Mokken尺度分析でできること

「合計得点を“まともな順序尺度”として使ってよいかを、非パラメトリックIRT(Mokken尺度分析)でチェックする」

AISP

  • 大きな項目プールから、「互いにそこそこ強く関連している項目のかたまり(下位尺度候補)」を自動で抜き出す。
  • 何因子あるかは決めずに、データ駆動でクラスターを作る手続きである。

尺度係数 H(coefH)

  • 抜き出したクラスターごとに、「その項目集団が“同じ潜在特性”をそこそこ一貫して測れているか」を数値化して見る。
  • H が 0.3〜0.4以上なら「弱〜中程度の尺度性がある」とよく言われる。

単調性・IIO のチェック

  • 単調性:潜在特性が高くなるほど、各項目の「Yes(高得点)」になる確率が単調増加しているか。
  • IIO:潜在特性の水準にかかわらず、「答えにくい(平均得点が低い)項目」と「答えやすい項目」の難易度順が入れ替わらないか。

これが満たされていれば、合計得点を“順序尺度”として使うことの理屈付けができる。

  • AISP …「どの項目を一緒に束ねるか?」
  • H …「その束ね方はどのくらい一貫しているか?」
  • 単調性・IIO …「その束ねたものを合計得点として使ってよいか?」

を調べるための一連の手続きである。