Skip to content

Repository files navigation

MFRM Design & Dimensionality Check

データ収集前のMonte Carlo設計、収集後の確認的次元性評価、総合点の探索的1因子対2因子診断、確定した1モデルの年度・フォーム間尺度連結を扱うR/Shinyアプリです。Rパッケージ TAM を使い、確認モードでは事前指定したQ候補を、探索モードではテキストを次元へ割り当てず自由傾き1因子・2因子MFRMを比較します。これは次元性や尺度不変性の一般的な証明ではありません。

コンセプト

本アプリは Design first を原則とし、次の順で使用します。

  1. Plan:受験者数、項目数、採点者数、採点回数、想定する次元構造、効果量をデータ収集前に定義する。
  2. Simulate:Monte Carloシミュレーションで指定次元候補の選択率、過小・過大選択、判定保留、判定不能率を評価する。
  3. Explore:Qが事前指定されていない場合、総合点を分解せず、テキスト別自由傾きから1因子対2因子を探索的に診断する。
  4. Freeze:探索標本とは別の確認標本を定め、Q候補、主比較、除外規則、標本の役割を固定する。
  5. Confirm:独立標本で、事前に固定したQ仮説を同じPCM/RSM・ファセット条件の下で比較する。
  6. Validate use:構造の相対支持とは別に、下位得点の追加価値、方法効果、公平性、外的妥当性、意思決定上の帰結を検証する。
  7. Recovery / Link:Recoveryは当てはめたモデルに条件付く監査用感度分析として行い、確認や公開許可とは切り離す。Linkは事前指定Q、独立標本、一意な適格モデル、選択モデルの絶対適合成果物を要求する条件付き研究用工程とし、人物得点の公開にはさらに利用価値・公平性・方法効果・運用等の全ゲートを要求する。

探索モードの結果はF1/F2の仮説生成に限定し、同じ標本で作った解を確認済み構造として扱いません。Reading/Writingなどの名称には、外部尺度、内容分析、独立標本による確認が必要です。

想定する利用者と表示方針

  • 初めてMFRMを使う大学院生には、主画面で「次元」「採点者ネットワーク」「シミュレーション誤差」を平易に説明し、技術設定を折りたたんで表示します。
  • 語学テストを扱う教員には、personを「受験者・学習者」、raterを「採点者・評定者」と表示し、最高得点、複数採点、共通受験者の意味が採点場面に対応するようにしています。
  • 専門研究者には、ADEMP、DGP、MCSE、Q行列、MML、PCM/RSM、BICなどの正式用語と、モデル境界、推定失敗、再現用設定を詳細欄・計画書・出力へ残します。

平易な表示は統計的判断を自動化するものではありません。「実行候補」は連結性と計画精度の初期条件を通過したという意味であり、内容妥当性、DGPの妥当性、標本サイズの十分性を保証しません。詳しい対象別の品質基準は docs/ui_ux_audit.md に記録しています。

主な機能は次のとおりです。

  • 観測データ不要の事前Monte Carlo設計シミュレーション
  • ADEMP(目的・DGP・標的・候補法・性能指標)に沿った事前設計票と方法文書
  • 受験者数、項目数、採点者数、受験者1人当たりの採点者数、カテゴリ数、欠測率の指定
  • 系統的リンク、共通リンク受験者、完全交差の採点割付と、連結性・ペア重複・負担診断
  • 複数の設計案を横並びで比較し、CSVへ保存・再読込・入力欄へ復元する設計台帳
  • 次元相関、項目難易度SD、採点者厳しさSD、ステップ構造の指定
  • between-item、within-item補償型、weakest-dimension非補償型DGP
  • 生成時の潜在次元数と当てはめる最大次元数を分離し、1Dから最大次元までの指定候補について過小・過大選択、判定保留、判定不能率を評価
  • 生成時と当てはめ時のPCM/RSMを独立指定し、カテゴリモデル誤指定もストレステスト
  • 項目・採点者・ステップ母数を反復間で固定する条件付き性能と、反復ごとに再抽出する平均性能を選択
  • 目標Monte Carlo SEに基づく反復数設計と、事前に定めた選択率・判定不能率基準の照合
  • 自己完結型の実行用Rスクリプト、固定乱数シード、並列化、途中再開
  • wide形式・long形式のCSV入力
  • 受験者ID、採点者などのファセット、項目、所属次元の指定
  • 名前付きQ仮説の追加・削除と、同一次元数の複数仮説の比較
  • エラー・警告・情報を同時表示する分析前プリフライト、収集後のファセット連結診断、候補別の項目‐次元割当て可視化
  • TAM::tam.mml.mfr() による1D・2D・3D…MFRMの同条件一括推定
  • MFRファセット設計を保持したTAM::tam.mml.2pl()による、総合点の自由傾き1因子対2因子診断
  • 2因子解のoblimin回転、F1/F2識別力パターン、因子相関、echelonアンカー感度、専用ブートストラップ
  • logLik、deviance、AIC、AICc、BICによる比較と、数値診断を通過しない候補の自動除外
  • 潜在分散・共分散・次元相関、EAP信頼性、収束履歴の表示
  • 選択多次元モデルのjoint posteriorによる次元別・プロフィール差の内部精度監査(外的妥当性・利用価値のPASSには不使用)
  • 評価者IDを仮名化した評価者×次元被覆、同一人物×項目内差、Helmert変換による評価者×項目の記述的感度監査(方法交絡のPASSには不使用)
  • 通常の尤度比検定を「境界未調整の参考値」として表示
  • 選択した隣接候補(1D vs 2D、2D vs 3D等)のパラメトリック・ブートストラップLRT
  • 候補別のRMSD、全体適合、Q3/adjusted Q3、局所依存ペアのオンデマンド診断
  • モデル推定・ブートストラップ・絶対適合診断の背景実行、取消、同一条件LRUキャッシュ
  • 適格な当てはめ済みモデルをDGPとする、事後の条件付きモデル回収シミュレーション
  • 計算不要の1D・2D・3D回復結果デモ、進行状況表示、KPIダッシュボード
  • schema 1.1.0のTAM-native参照校正ZIP、設計上のカテゴリ上限を含む意味的な共通項目照合、1候補への固定母数尺度連結
  • 全アンカー解放モデルによる探索的drift感度と、固定値・Q hash・警告を残す監査ZIP
  • 比較表、推定値、Q行列、診断、主張範囲、設定、厳格な許可リストで縮約したTAMモデルの監査可能なZIP出力

データ収集前の事前設計

起動時に最初に表示される「事前設計」タブでは、観測データを読み込まずに次を指定します。

  • 受験者数、項目数、採点者数、受験者1人当たりの採点者数
  • 最大得点、生成時のPCM/RSM、当てはめ時のPCM/RSM
  • 生成時の潜在次元数、当てはめる最大次元数、等相関構造
  • 項目難易度、採点者厳しさ、ステップ間隔と異質性
  • セル単位の欠測率
  • DGP構造と項目当たり要求次元数
  • 採点割付方式、共通リンク受験者数、採点者ネットワークの連結性・ペア重複と負担
  • 目標次元候補選択率、許容判定不能率、目標Monte Carlo SE
  • 項目・採点者・ステップ母数を反復間で固定するか、反復ごとに再抽出するか
  • 反復数、乱数シード、途中保存間隔、並列Rプロセス数

反復数は慣例的に固定せず、割合指標について sqrt(p(1-p)/R) で表されるMonte Carlo SEを基準にします。アプリは最悪条件 p = .50 と、指定した目標選択率・許容判定不能率について、計画MCSEと必要反復数を示します。既定の目標MCSE .025 では、最悪条件で400反復が必要です。

評定割付は次の3方式を選べます。

割付方式 用途 主な診断
系統的リンク 各受験者を複数採点者へ循環的に割り付ける 連結成分、採点者ペアの最少重複、直接リンク密度、負担CV
共通リンク受験者(採点者連結用) 多くの受験者を少数採点とし、一部を全採点者が採点する 共通リンク受験者数・割合、採点者ペアの最少重複、尺度連結、負担差
完全交差 全受験者を全採点者が採点する 最大の情報量と総採点負担

採点者ネットワークが分断される条件では実行ZIPを保存できません。連結していても計画MCSEを満たさない場合は、判断用ではなく「パイロット実行」と明示します。

ここでいう共通リンク受験者は、同じ受験者への評定を介して採点者間に比較可能な経路を作る設計上のリンクです。シミュレーションでは他の受験者と同じ能力分布から生成され、能力値は固定されません。項目困難度やstepを参照値へ固定する外部校正アンカーとは区別します。年度・試験フォーム間の外部尺度連結は、候補比較後に専用の「尺度を連結」タブで行います。採点者母数と受験者能力の固定には対応していません。

連結成分が1つであることは必要条件ですが、十分性の証明ではありません。採点者ペアの最少共通受験者数が1人なら、その人物の特異な応答や欠測にリンクが依存します。アプリは最少人数と中央値を記述しますが、固定的な合格閾値は置きません。内容代表性、能力範囲、欠測、不適合評定、必要精度をシミュレーション結果と測定計画に照らして判断してください。表示されるネットワーク診断は計画割付に基づくため、収集後の実効的なリンク診断を代替しません。

収集後は「データを確認」タブで、検証後に少なくとも1つの有効得点が残る受験者・ファセット・機会の採点単位だけを使い、連結成分、採点者ペアの最少・中央値重複、全水準共通受験者、直接リンク密度を再計算します。全項目欠測・無効値だけの行をリンクとして数えません。分断と単一受験者依存は警告として表示しますが、モデルを機械的に棄却する基準ではありません。

設計案を比較する

「設計案を保存して横並びで比較」では、現在の入力条件を最大50案まで台帳へ追加できます。比較の単位は1つのADEMP設計条件です。受験者数だけを変える、系統的リンクを共通リンク受験者へ変える、反復数を増やす、といった代替案を順に追加してください。

  1. 基本条件を入力し、設計案名を付けて「現在の設定を追加」を押します。
  2. 比較したい入力だけを変更し、別名で次の案を追加します。
  3. 表ではまず「判定」を確認します。採点者ネットワーク分断は実行停止、目標MCSEに対する反復数不足はパイロット扱いです。
  4. 実行候補に残った案について、採点者ペアの最少重複、共通リンク受験者割合、総採点数・想定得点セル数・採点者負担CV・直接リンク密度・MFRM推定回数を比較します。

行を選んで「選択案を画面へ戻す」と、その案の入力条件を復元できます。台帳の案は画面の入力を変更しても自動更新されないため、意図しない上書きは起こりません。CSV保存後は共同研究者との条件確認や、別セッションでの比較再開に使えます。読み込み時には全行を型変換・再検証し、CSVに保存された診断値を信用せず、現在のコードで連結性・負担・MCSE・計算量を再計算します。

「実行候補」は十分性の証明ではありません。停止条件を通過したことを表すスクリーニングです。負担が最小の案を機械的に選ばず、想定効果量、欠測、DGP、項目内容を実際の測定場面に照らして判断してください。

4次元以上ではTAMの準モンテカルロ積分を使うため、詳細設定のQMCノード数を1000以上にし、sfsmiscをインストールしてください。

選択できるDGP

DGP 有効能力 目的
between-item 項目に割り当てた1次元の能力 現在の確認的MFRMと整合する基準条件
within-item補償型 項目が要求する能力の平均 高い能力が低い能力を補える条件
within-item非補償型 項目が要求する能力の最小値 最も弱い能力が反応を制約する結合条件

非補償型は、要求次元の最小能力をPCM/RSMの隣接カテゴリlogitへ入れる weakest-dimension conjunctive DGP として明示的に定義しています。「非補償型MIRT」全般を代表するものではありません。

当てはめる候補は、現在のTAMによるbetween-item固定傾きMFRMです。したがってwithin-item DGPを選んだ場合は、生成に使う潜在変数数を「真の観測次元数」とは呼びません。主目的は自動的に モデル誤指定への頑健性 となり、生成構造を単純化した候補系列がどの次元ラベルを選び、どの程度破綻するかを評価します。

生成時の潜在次元数と当てはめる最大次元数は別に指定します。たとえば生成2次元・最大候補3次元なら1D/2D/3Dを比較できるため、低次元候補だけでなく高次元候補の誤選択も観測できます。各次元数には、項目順から決まる入れ子Q候補が1つだけあります。同一次元数の競合Q、利用者独自の真のQ、Q誤指定の網羅的評価はこの事前設計UIの対象外です。

母数を「反復間で固定」にすると、基本seedから生成した1組の項目困難度・採点者厳しさ・カテゴリ境界へ条件付けた性能です。実行ZIPにはその実現値をCSVで残します。「反復ごとに再抽出」にすると、指定した母数分布にわたる平均性能を評価します。どちらも項目・採点者母集団への万能な一般化を保証しません。

生成時と当てはめ時のカテゴリモデルは独立にPCM/RSMを選べます。最高得点が1の二値データではPCMとRSMは同値です。判定不能率は、生成失敗、またはいずれかの候補の推定失敗・数値的不適格によりBIC選択できなかった反復数を、成否にかかわらず全要求反復数で割った複合指標です。

「模擬データを1セット確認」で固定した乱数シードのwide CSVを生成できます。本番の反復計算は「設計実行ZIPを保存」し、展開先で実行します。

Rscript run_design_simulation.R
# ワーカー数を実行時に変更
Rscript run_design_simulation.R --workers=4

完了時のmfrm_design_results.zipを「事前設計」タブへ戻すと、指定次元ラベル候補の選択率、低次元・高次元候補の選択、BIC判定保留、判定不能、候補適格率、ΔBICを表示します。各次元数につき候補Qは1つなので、事前設計ではモデルID回収率と次元ラベル回収率を別KPIとして重複表示しません。これは指定したBIC規則のoperating characteristicsであり、一般的な統計的識別可能性や古典的検出力ではありません。

方法論的根拠

  • Morris, White, & Crowther (2019) のADEMPに従い、目的、DGP、標的、比較法、性能指標を先に分離します。doi:10.1002/sim.8086
  • Siepe et al. (2024) に従い、反復数の根拠、Monte Carlo不確実性、非収束、コードと設定の再現性を明示します。doi:10.1037/met0000695
  • DeMars, Shapovalov, & Hathcoat の評定割付研究に基づき、単一評定が多い場合の共通リンク受験者と、採点者ネットワークの連結性を診断します。
  • Uto (2021) の多次元generalized MFRM研究を踏まえ、受験者数・項目数・採点者数・次元数を設計因子とし、次元選択だけでなく推定精度を今後の拡張対象にします。doi:10.1007/s41237-021-00144-w

設計実行ZIPには、これらの項目を固定した ADEMP_protocol.txtCLAIMS_AND_LIMITATIONS.txt、ライセンス、版情報を同梱します。母数固定時は実現した項目・ステップ・採点者母数もCSVで残します。事前登録、方法節の下書き、共同研究者との設計確認に使用できます。

起動方法

配布形態

現時点では、これはインストール可能なRパッケージではなく、source型のShinyプロジェクト(Type: Project)です。R CMD check適合や公開APIを主張せず、リポジトリを取得して依存パッケージを復元し、プロジェクトルートから起動します。ソフトウェア論文・公開リリース前には、仮の著者情報を実情報へ置き換え、CITATION、永続URL、fresh restore検証、公開CIを整備する必要があります。

参照環境はR 4.6.0とrenv.lockに固定しています。新しい環境では最初に次を実行します。

install.packages("renv")
renv::restore(prompt = FALSE)
renv::status(dev = TRUE)

dev = TRUEDESCRIPTIONSuggestsにあるtest/smoke依存も照合します。project-local libraryはGitへ保存せず、renv.lock.Rprofilerenv/activate.Rrenv/settings.jsonだけを追跡します。

renvを使わない手動導入は次のとおりです。4次元以上の準モンテカルロ積分にはsfsmiscも必要です。

install.packages(c(
  "shiny", "bslib", "DT", "htmltools", "TAM", "CDM",
  "GPArotation", "digest", "jsonlite", "openssl", "mirai", "promises", "later",
  "sfsmisc", "testthat"
))

最低要件はShiny 1.11.0、bslib 0.7.0、mirai 2.7.0、openssl 2.4.2、TAM 4.3-25、CDM 8.3-14です。探索モードの回転にはGPArotationが必要です。

プロジェクトのルートで実行します。

shiny::runApp(".")

または、ターミナルから次を実行します。

Rscript run_app.R

最初は分析目的と内蔵データシナリオを選び、「デモを読み込む」で一連の操作を確認できます。wide/longは別の「入力形式」で選択します。

  • ほぼ1D:3潜在変数の相関を.92として、BICで1Dが支持されやすいデータ
  • 2D優勢:第2・第3領域がほぼ同一で、2Dが支持されやすいデータ
  • 3D優勢:3領域が分離し、3Dが支持されやすいデータ

確認モードでは人物ID、ファセット、項目、2D・3DのQ行列が自動設定され、「例をDL」から1D・2D・3Dデモを取得できます。

探索モードの内蔵例は、300名、5テキスト、各人2テキスト、全10冊子ペア×30名、0–6点、教師10名に固定し、生成構造を1F/2F、採点割付を次の3種類から選びます。

採点割付 受験者×テキスト答案 評定数 アプリの経路
1答案1名 600 600 通常の自由負荷1F/2F
20%だけ二重採点 600 720 3つの手順確認後、条件付きで1/2構成因子+5答案残差因子
全答案を10名全員 600 6,000 3つの手順確認後、条件付きで1/2構成因子+同じ構造の5答案残差因子

探索モードの「例をDL」には、選択条件のwide/long CSV、600答案の割付表、得点記入前テンプレート、列マッピング、解釈上の制限を収録します。乱数seedは固定されています。

入力形式

wide形式

1行を1評定機会、項目を列として配置します。同じ人物に複数の評定行がある場合、人物IDを繰り返します。

person_id,rater,occasion,I01,I02,I03,I04
P001,R01,A,1,0,1,0
P001,R03,B,1,1,1,0
P002,R02,A,0,0,1,1

確認モードでは次を指定します。

  • 受験者ID列
  • 1つ以上のファセット列
  • 2つ以上の項目応答列
  • 名前付き比較候補(例:2D_A_BC2D_B_AC3D_Theory
  • 各候補モデルの次元数・次元名と、項目ごとの所属次元

探索モードでは、受験者ID列、1つ以上のファセット列、5つ以上のテキスト総合点列、採点規準の最高点を指定します。次元名・次元列・項目所属は指定しません。例えば5テキストから生じる10組(5C2)は受験冊子の組合せであり、次元分割の10候補ではありません。A–B受験者はAとBの関連、A–C受験者はAとCの関連を提供し、A、B、CはいずれもF1/F2の両方へ負荷できます。要約課題が0–6点なら最高点を6とし、範囲外得点は推定前に停止します。

内蔵デモでは理論Qが自動設定されます。一方、ユーザーCSVでは項目順によるQを黙って確定しません。全項目の所属を指定し、「すべてのQ仮説が分析前の理論仮説を表すことを確認しました」にチェックした場合だけ実行可能になります。「列順で仮配置」は編集開始を補助する機能であり、確認的仮説そのものではありません。

year年度formフォームなどの列は、項目応答の自動候補から除外します。これらの列を置くだけで年度・フォーム間の尺度が連結されるわけではありません。

確認後に候補ID、次元名、項目所属を変更すると、確認チェックは自動的に解除されます。変更後のQ仮説を再確認してから実行してください。

long形式

1行を1得点として配置します。

person_id,rater,occasion,item_id,score,dimension
P001,R01,A,I01,1,Language
P001,R01,A,I02,0,Language
P001,R01,A,I03,1,Reasoning

確認モードでは、人物ID、項目ID、得点、候補モデルの次元列、ファセットを指定します。例えば dimension_2Ddimension_3D を同時選択すると、1D・2D・3Dを比較します。次元列名が候補IDになり、同じ次元数の列も別のQ仮説として扱えます。TAMがMFR展開行の区切りに使うため、wideの項目列名とlongの項目IDにハイフン - またはコロン : は使用できず、fit前の入力検証で明示的に停止します。

探索モードでは、人物ID、項目ID、総合点、ファセットだけを指定し、次元列は指定しません。5テキスト以上が必要です。同じ人物・ファセット・項目の組み合わせが繰り返される場合、行識別列を追加してもTAMの分析セルは分離されません。同一採点者による同一答案の反復評定は現版では停止し、反復を扱う別モデルまたは事前に定めた1セル1得点への整理を求めます。行識別列は反復を独立化せず、年度・フォーム間尺度リンクにも使いません。アプリ内部でTAM用のwide応答行列へ変換します。

得点と欠測

  • 得点は 0, 1, ..., K の整数とします。
  • 最小カテゴリは必ず0にします。
  • 欠測は空欄、NAN/A. のいずれかで指定できます。
  • 人物IDとファセットには欠測を使用できません。
  • CSVはUTF-8、UTF-8 BOM、Shift-JIS/CP932に対応します。
  • CSV読込時に全列を文字列として保持するため、001 のような人物IDの先頭ゼロも保持されます。

分析前プリフライト

「モデル設計」タブでは、TAMを実行する前に次の状態をまとめて表示します。

  • 全体状態:分析不可、分析可能・要確認、分析可能
  • 1Dを含む候補別の割当て数、次元別項目数、人物接続性
  • 未割当て、複数割当て、空次元、次元当たりの項目不足
  • 欠損ID、long形式の重複観測、非数値・非整数・負の得点
  • 無変動項目、未使用・低頻度カテゴリ、疎な人物・項目・ファセット水準
  • 次元間の共通受験者数、4次元以上のQMC設定、RSMのカテゴリ構造

エラーは実行を停止します。警告と情報は実行を停止しませんが、推定の安定性や解釈への影響を確認してください。項目30観測、カテゴリ5観測、次元間30共通人物などの初期値はスクリーニング用の目安であり、標本サイズの十分性やモデルの妥当性を保証する基準ではありません。

プリフライト、サイドバーの準備状態、実行ボタンは同じ判定結果を使用します。Q行列と接続性の詳細表は、プリフライト下部の「詳細診断」から確認できます。

モデル仕様

収集後分析には、混在させない2つのモデル系列があります。

  • 確認モード:各候補の項目–次元対応を分析前にone-hot Q行列として指定し、固定傾きMFRMを比較します。
  • 探索モード:各テキストの総合点についてF1/F2への傾きを自由推定し、1因子・2因子MFRMを比較します。テキストを2群へ分割しません。

探索モードの標的は総合点間の共分散構造が1因子で足りるか、2因子が必要かです。テキスト特性によるDIF、群間バイアス、採点者バイアスの検定ではありません。

確認モードのQ候補

以下のbetween-item Q説明は確認モードだけに適用され、探索モードのF1/F2自由負荷には適用されません。

多次元候補は、各項目が1つの次元だけに所属する between-item型 に限定しています。3Dから2Dへの統合方法は一意ではないため、A|B+CB|A+CC|A+Bのような同じ2次元数の複数仮説を別IDで登録できます。

同一次元数の候補や、2D→3Dが入れ子の細分化になっていない候補でもAIC/BICによる比較は可能ですが、それらの間ではLRTとブートストラップLRTを実行しません。各高次元候補について、直前に小さい次元数の真の細分化モデルだけをLRT対象にします。

1次元モデルでは、全項目を1つの一般次元へ負荷させます。

Q1 <- matrix(1, nrow = ncol(resp), ncol = 1)

2D・3D等のモデルでは、候補ごとに指定したone-hot Q行列を使用します。全モデルで以下は同一です。

  • 応答データと欠測パターン
  • 人物ID
  • ファセット
  • formulaA
  • constraint = "cases"
  • 積分法、ノード数、乱数seed

多次元モデルでは、TAM 4.3-25での設計行列生成を安定させるため、ndim = ncol(Q) を明示しています。

探索モードの自由負荷

探索モードはdesignMatrices.mfr()で項目・step・採点者ファセットを展開し、元テキスト単位の傾き等値制約を置いてtam.mml.2pl()GPCM.groups(二値なら2PL.groups)を推定します。2因子では単位分散・直交座標と1つのechelonゼロ負荷で回転を同定し、全テキストを識別アンカーとして入れ替えます。この内部ゼロは座標制約であり、内容上のゼロ負荷でもReading/Writingへの割当てでもありません。表示するoblimin回転後には、そのテキストも両因子へ負荷し得ます。

5テキストの2因子解は共分散構造として実質1自由度のほぼ飽和モデルです。通常のχ² LRTは第2因子が帰無仮説下で未同定になるため表示せず、TAM 4.3-25が多次元slope-group数を過少計上する点を補正したAIC/BICと、同じアンカー探索を再現する専用パラメトリック・ブートストラップを併記します。BICも正則モデルの通常近似を厳密には満たさないため、単独で真の因子数を確定しません。

探索モードでは「採点者ID列」を明示選択します。これはその他のファセット列へ自動的に1回だけ加わり、教師の厳しさ、同一答案の複数採点、教師ネットワークの判定に使われます。同じ教師は全行で同じIDにします。列名推測は初期候補だけであり、未選択のまま分析しません。

同一答案に複数評定がある場合、採点者数は厳しさ推定を支えますが、潜在指標を5テキストから増やしません。全答案が複数評定されている場合も、(1) 採点計画と採点者割付を得点・答案品質・不一致を見る前に固定した、(2) 異なる教師が互いの得点を見ずに採点した、(3) 複数行が改稿・再受験ではなく同じ版の答案への評定である、という3点を利用者が確認した場合だけ、各テキストの同一答案評定が共有する答案残差因子 (U_t) を加えます。そのうえで1構成因子 + 5U2構成因子 + 同じ構造の5U を比較し、U負荷は候補ごとに再推定します。(U_t) は構成因子および他の (U) と直交し、構成因子数やテキスト指標数には数えません。BICの標本数は評定数や答案数ではなく300名です。

6/7次元QMC積分になるため、ノード数1,000以上が必要です。1,000は実行下限であり精度保証ではありません。TAM 4.3-25のQMCは固定Halton列であり、seedを変えてもrandomized replicateにはなりません。最終報告前に同じ決定論的point constructionで1,000対2,000以上を比較し、devianceとBIC方向を確認します。負荷は別の記述的な母数感度として確認し、この比較だけから母数安定性を主張しません。識別アンカー感度とブートストラップを含む本番設定は長時間を要し得るため、小さい反復数で動作確認してからバッチ環境で実行します。

一部答案だけが再評定されている場合は、第1条件をさらに厳しくし、再評定答案とすべての追加採点者を初回得点・答案品質・不一致を見る前にテキスト/冊子内で無作為または事前規則により決め、その規則が答案固有の質・潜在能力・未モデル化群と関連しないことを確認します。未確認、得点依存の再評定、同一教師の重複、答案同一性が不明な場合は停止します。この確認はデータから検証した結果ではないため、事前選出表・教師割付・盲検記録をアプリ外に保管します。最初の行、平均に近い評定、都合のよい採点者を自動選択しません。

答案残差モデルの安全側の実行下限として、複数評定答案が各テキスト10件未満なら停止し、10–19件なら警告します。10件は理論上の識別境界ではありません。全観測教師の複数採点ネットワークが非連結なら停止します。この連結条件は本アプリの保守的な実行要件であり、識別・十分な精度の必要十分条件ではありません。連結していても、可能教師ペア数、共有0答案ペア数、共有ありペア密度、橋ペア数を示します。共有答案数の最小・中央値・最大は「共有が1件以上あるペア内」だけの集計と明記し、全可能ペア(0件を含む)は repeated_rater_edge_weights.csv に保存します。共有1答案のペアを除いた連結性または橋ペアが脆弱なら、総合判定を保留します。

内蔵の20%二重採点デモは、120答案を120名へ1答案ずつ分散し、全10冊子ペアで各テキスト6答案ずつ、各テキスト合計24答案を再評定します。通常評定60件+追加評定12件で各教師72件とし、各テキスト内でも10名の教師が共通答案で1つの連結成分になる割付です。ただし、デモを読み込んでも3つの利用者確認は自動で入りません。

constraint = "cases" は、候補比較と全アンカー解放感度モデルで各潜在次元の受験者分布平均を0として尺度を同定します。特定の参照採点者や項目を0に固定する方式ではありません。「尺度を連結」では、意味キーから再構成した項目・stepの xsi.fixed を渡し、対象集団の潜在平均を参照尺度上で推定できるよう beta.fixed = FALSE を明示します。

二値データでは、モデル式は自動的に次の形になります。

~ item + rater

多値データでは選択に応じて、項目別ステップまたは共通ステップを使用します。

~ item + item:step + rater  # PCM
~ item + step + rater       # RSM

参照年度・フォームへの尺度連結

「尺度を連結」タブは、候補Qの探索やBIC順位づけを行う場所ではありません。理論、事前計画、候補比較を踏まえて確定した 1つのbetween-item固定傾きPCM/RSM MFRM を、1つの参照年度・フォームの外部尺度へ条件付きで直接つなぐ現行ワークフローです。

初心者向けの基本手順は次の5段階です。

  1. 参照校正ZIPを保存する:参照データも1つの年度・実施/フォームへ事前抽出したうえで候補比較を完了し、数値診断を通過した1モデル、尺度ID・版、参照年度/フォーム、固定候補の共通項目を確定します。抽出元は、外部固定値を持たない、単一群・潜在回帰なし・各次元の潜在平均を0に固定した参照fitに限定し、既に連結したfitからの連鎖リンクを拒否します。保持されたyear/form列は対象側と同じく単一値・欠損・入力ラベルとの整合を検査し、複数値や欠損があれば保存を止めます。列がない場合は利用者確認に依存します。現行UIは参照ラベルをZIPへ記録し、「参照尺度として確定した」という確認を保存前に要求しますが、その確認時刻・attestation自体は参照ZIPへ保存しません。schema 1.1.0では、項目位置だけ、または独立なitem/step母数に加え、各項目のcategory_maxを保存します。これは標本の観測最大値ではなく、採点規準で許される設計上の最高カテゴリです。ただしTAMは観測応答から項目別カテゴリ構造を作るため、設計上の最高カテゴリが1項目でも参照データに未観測なら保存を停止します。採点者母数は書き出しません。
  2. 対象フォームと照合する:対象データを1つの年度・実施/フォームへ事前抽出し、事前指定Qと設計上のカテゴリ上限を準備して参照ZIPを読み込みます。内部のxi番号は再利用せず、項目ID・次元・category_max・stepを現在のTAM設計行列へ意味的に対応づけます。設計上の最高カテゴリが対象データのいずれかの項目で未観測なら、宣言値だけで同じTAMカテゴリ構造を作れないため停止します。保持された年度/フォーム列に複数値・欠損がある場合や入力ラベルと一致しない場合も停止します。その列がない場合、単一実施単位への抽出は利用者の確認に依存します。同一実施内の複数評定機会は、それだけでは複数年度・フォームを意味しません。参照フォームにしかない項目は「未使用」となり、対象フォームの新規項目は自由推定されます。
  3. 5項目を確認して1候補を固定推定する:対象モデルの事前指定、共通項目の内容・採点基準・カテゴリ運用の同一性、参照校正誤差を伝播しないこと、単一年度・フォームへの事前抽出、平均採点者driftと潜在平均の交絡を確認します。5つの確認は参照ZIP、対象データ、候補、固定範囲、PCM/RSM、設計上のカテゴリ上限、対象ラベルから作る設定識別子(signature)に結び付き、いずれかを変えると解除されます。これは電子署名や発行者認証ではなく、確認対象の状態を記録するfingerprintです。判断根拠の自由記述や外部資料はZIPに保存しないため、研究記録として別に保管します。各次元をitem-locationアンカーが被覆することを確認し、共通項目の固定値を xsi.fixed へ渡します。固定後はindexと値だけでなく、I1I1:step1等の意味ラベルも実fitと照合します。固定モデルは beta.fixed = FALSE とし、対象集団の潜在平均・分散を参照尺度上で推定します。
  4. 全アンカー解放感度を読む:同じ対象データ・Q・推定設定で全アンカーを解放し、constraint = "cases" の平均0モデルを当てはめます。項目位置は次元内の中央値シフトで原点を合わせて参照値との差を示します。これは探索的drift感度であり、DIFや不変性の自動判定ではありません。1項目だけの次元では差が原点調整により0になるため、安定性の証拠として読めません。
  5. 監査ZIPを保存する:参照・対象の別々のQ SHA-256、意味的対応表、実際にTAMへ渡した xsi.fixed、次元別被覆、単一実施単位の検査、5つの確認と時刻、固定/解放モデルの潜在分布・数値診断・警告、制限文、sessionInfo()を保存します。元応答、行単位ファセット、人物ID、RDS、実行コードは既定で含めません。人物得点は確認decision contractが尺度運用を許可し、利用者も明示的に選んだ場合だけ固定モデル分を追加します。

参照Qと対象Qのhashが同一である必要はありません。異なるフォームでは、次元名と順序、PCM/RSM、formulaA、TAM版、全体の得点範囲、および 共通アンカー項目の次元割当てと設計上のcategory_max を照合します。現行UIで検証しているのは、項目、PCM/RSMのstep、採点者等を加算的な主効果として置く1PL式です。item:raterrater:step等の追加交互作用は、facet水準とcontrastを校正schemaに保存していないため、UI・R APIともfail-closedで拒否します。カテゴリの方向・ラベル・欠測コードの同一性はhashから判定できないため、利用者が内容・採点規準とともに確認します。参照Q hashは校正元の来歴、対象Q hashは今回適用したモデルとして別々に記録します。

現行ワークフローは参照校正値を誤差のない定数としてhard fixingします。参照側のSEは監査用に保存しますが、対象年度の標準誤差へは伝播しません。したがって結果は、参照校正誤差、リンク誤差、アンカー選択不確実性を含まない条件付き推定です。潜在平均・分散の表は点推定だけで、対象標本由来またはリンク由来のSE・信頼区間も表示しません。また、採点者母数を外部固定せず対象内で中心化するため、参照・対象間の平均採点者厳しさの一様な差は潜在平均の位置差と分離できません。潜在平均の年度比較には、採点運用の同等性または別途の採点者尺度連結に関する外部根拠が必要です。詳細は docs/calibration_anchors.md を参照してください。

探索から確認へ進む場合

探索モードでF1/F2仮説を作り、確認モードへ進む場合は、次の順序を推奨します。

  1. 標本を分ける:可能なら人物単位で探索標本と確認標本に分けます。同じ人物の複数評定を別標本へ分散させません。
  2. 複数の探索証拠を作る:自由傾き1因子・2因子の補正情報量規準、専用ブートストラップ、解釈可能性、アンカー感度に加え、単一評定データでは原テキスト単位の残差PCARとmean-adjusted Q3を表示します。PCAR/Q3は記述的な仮説生成であり、p値や自動因子数決定規則ではありません。
  3. 斜交回転を主結果にする:教育・心理測定の下位能力は相関し得るため、因子相関を許す回転を用います。
  4. 内容判断を加えてQ仮説へ変換する:負荷量・PCAR・Q3だけで機械的に所属を決めず、項目内容と因子相関を確認します。交差負荷項目は除外・改訂するか、所属の異なる別Q候補を作ります。評価者主効果を調整しても、評価者×テキスト/観点交互作用は残差構造と分離されていません。
  5. Qと主比較をFreezeする:探索結果画面で全項目を手動割当てし、内容根拠、1D対主候補、PCM/RSM、反復設定をcanonical JSONへ固定します。v1は実行可能な主比較を曖昧にしないため、1Dと比較する主候補を1つだけ収録します。Freeze IDはSHA-256による改変検知であり、作成者認証、信頼できる時刻、事前登録、別標本を証明しません。
  6. 確認的MFRMで再評価する:新しいセッションで確認データより先にFreeze JSONを読み込み、独立確認標本の項目集合と完全照合します。Freeze後のQ・候補・主比較・推定設定の変更は停止します。
  7. 帰結を別に検証する:指定した多次元モデルの支持と、下位得点を返す追加価値は別問題です。外的妥当性、公平性・DIF、方法効果、意思決定上の利益を別ゲートで評価します。
  8. 探索判断を記録する:因子数の決め方、PCAR/Q3の定義、回転法、所属判断、除外項目、標本分割、探索結果からの変更を報告します。

確認モードの結果画面は、選択モデルが一意な場合に限り、次元別の直接観測項目数、TAMのEAP信頼性、人物別joint posteriorから求めた事後SD、および全次元対のプロフィール差について内部精度を集計します。プロフィール差の信頼性は、モデル上の差得点分散に対する平均事後分散から算出する、モデル条件付きの記述量です。全次元対は事後的な組合せであり、事前固定した公開プロフィールではありません。Q、項目・校正母数、モデル選択の不確実性も含みません。この内部監査は常に集計値のみを出力し、EAP信頼性が高くても subscore_use をPASSにしません。独立な外的基準に対して、固定した総合得点をbaselineとするout-of-sampleの実質的改善と、提案する分類・フィードバックの利益/害を別途検証する必要があります。

subscore_useをPASSにできる外的帰結経路は、自由記述の査読記録から分離されています。まず、選択モデル、Q SHA-256、項目・facet・潜在分布を含む採点仕様SHA-256、外的基準、target population、固定総合得点baseline、追加するK-1個のプロフィールcontrast、共通learner・前処理・tuning grid、外側/内側fold、欠測規則、実行コード、minimum practical improvement、同時片側CI、意思決定効用、害上限をcanonical planへ固定します。外部登録メタデータを結合した後、外的標本の各独立clusterがouter testへ正確に1回だけ入り、outer test caseがinner割当へ混入せず、公開された採点・recipe・learner・前処理・tuning・欠測・utility rule・実行コードhashが固定planと一致することを検査します。baselineとaugmentedは同じ対象・外的基準・learnerでpaired評価し、lower-is-betterのlossをbaseline loss − augmented lossへ統一します。予測改善と効用改善は、cluster数をほぼ均衡させた5個以上のouter fold平均に対するNadeau–Bengio型補正t近似を用い、共有training dataによる依存を単純なcluster数の自由度として扱いません。PASSにはmultiplicity調整後の片側CI下限が事前固定した改善幅をともに上回る必要があります。害は、augmentedで害率が悪化した独立clusterの割合に対する片側Clopper–Pearson上限で判定するため、観測悪化0件でも有限標本の上限を0とは置きません。さらにfold安定性・被覆・欠測感度・手続監査も通ることが必要です。p値、Nが大きいこと、AUC・一致率・κ・NRI、内部EAP信頼性だけでは解除されません。

R APIではbuild_subscore_external_validation_plan()register_subscore_external_validation_plan()build_subscore_external_validation_artifact()build_subscore_external_evidence_package()subscore_external_evidence_package_to_json()の順で集計JSONパッケージを作成します。package schema 1.2.0では、build_subscore_external_evidence_package(..., signing_key = <Ed25519 private key>)により、domain-separated canonical payloadへdetached Ed25519署名を付けられます。秘密鍵は外部評価者のoffline署名環境に置き、Shiny配備先やZIPへ保存しません。配備者は起動前に、独立経路で確認した公開鍵SPKI SHA-256を環境変数MFRM_SUBSCORE_TRUSTED_KEY_SHA256へカンマ区切りで設定します。失効させる鍵はMFRM_SUBSCORE_REVOKED_KEY_SHA256へ同じ形式で設定し、両方にあるfingerprintは失効側が常に優先されます。両snapshotはプロセス起動時に固定され、変更の反映にはShinyの再起動が必要です。JSONに同梱された公開鍵や自己申告fingerprintだけをtrust-on-first-useしません。

PASSだけでなくHOLD/FAILの成果物も保存・取込できますが、subscore_useをPASSに昇格できるのは、artifact自体がPASS、完全schemaの受理記録が一致し、署名が暗号学的に正しく、公開鍵fingerprintが配備者allowlistに一致し、かつ失効denylistにない場合だけです。未署名package、allowlist外の鍵、明示的に失効した鍵によるpackageは監査用に保存しつつHOLDとなり、失効鍵はVERIFIED_REVOKEDとして署名検証成功と信頼拒否を区別します。署名不正・鍵交換・payload改変は取込拒否となり、直前の保存済み状態を上書きしません。Shinyは解析後にこのJSONを最大2 MiBで取り込み、現在の解析signature、選択モデル、Q、採点仕様、plan、binding nonce、成果物、受理記録、署名、package hashを再照合します。完全な署名packageとローカル鍵policy snapshotを保持し、報告時にもallowlist・denylist・複合policyのSHA-256を再照合します。このsnapshotは評価時刻、失効情報の取得時刻、信頼できる時刻、鍵の有効期限を証明しません。個人ID、cluster ID、外的基準値、人物別予測、fold所属は公開成果物へ含めず、それらをprivate ledgerのSHA-256へ拘束します。ただし、このhashは匿名化ではなく、nonceも一回限りのchallengeではありません。同じ有効packageの再取込は同じ証拠を再結合できるため、署名だけをanti-replayや最新版保証とはみなしません。

重要な信頼境界として、この公開JSONはnested OOFを再実行する検証器ではなく、評価者が作成したmanifestと集計値の厳格な整合性envelopeです。VERIFIED_TRUSTED署名が保証するのは、起動時鍵policyでallowlist登録かつ非失効の鍵の保有者がそのpayloadを署名したことと、署名後にpayloadが変わっていないことです。失効は署名者申告時刻に遡って救済せず、現行operator snapshotで該当する全packageを安全側にHOLDとします。一方、この機構には信頼できる署名時刻、鍵の期間制約、失効情報の鮮度保証はありません。private ledgerを含まないため、held-out outcomeを見て予測を作っていないこと、各fitが宣言したtraining IDsだけを使ったこと、utility/harm値が凍結ruleから正しく生成されたこと、原データや集計値が真実であることをShiny単独では再計算できません。署名された登録メタデータも、registryの時刻・receiptを第三者が認証したことにはなりません。したがって信頼済み鍵の署名後も、必要に応じてregistry receipt照会またはprivate実行監査が別に必要です。またjoint augmented learnerの改善は、各下位得点が個別に有用であることを自動的には示しません。この成果物が対象にできるのは記録されたretrospectiveなcriterion/intended-useだけで、operational_use、高リスク単独利用、前向き・因果的な利益は常に別評価です。

同じ人物×同じ項目キーを異なる評価者が採点した行があれば、評価者IDをRATER_###へ置換し、キー内の符号付き評価者差と評価者×次元の割付・ネットワークを記述します。これは答案水準を差し引く感度情報ですが、確認モードには同じ版の答案、事前固定割付、相互盲検を確認する入力がないため、それらを自動的に成立済みとはみなしません。加法的MFRMへitem:raterを単純追加せず、生の評価者×次元平均も能力調整済みの交互作用証拠として扱いません。項目内容が宣言次元にネストされるため、評価者×項目と評価者×次元の分離には、検証済みの交互作用モデルと十分に交差・連結した採点計画が必要です。したがってこの感度表も method_confounding をPASSにしません。

アプリはMFRファセットを保持するため、tam.fa()を直接使わず、MFR展開後の応答とファセット設計行列をtam.mml.2pl()へ渡します。主表示には oblimin回転 を使います。

回転 因子間相関 用途
oblimin 許す アプリの主結果として識別力パターンと因子相関を読む
geominQ / promax 許す 現行UI外の追加感度分析
varimax 0に固定 因子が独立であるという強い理論的根拠がある場合に限定

回転にはGPArotationを使用します。

install.packages("GPArotation")

回転は同じ因子数の解の軸と解釈を変える処理であり、通常、そのモデルの尤度やAIC・BICは変えません。因子の順序と符号は任意なので、項目内容に基づいて解を対応付けます。

自由傾き探索モデルは、確認モードのtam.mml.mfr()固定傾きPCM/RSMとは別のモデル族です。したがって探索結果を確認的Q候補と同じBICランキングへ混在させず、専用の1因子対2因子比較として扱います。

探索で作ったQを同じ標本で確認すると適合は楽観的になります。独立標本を確保できない場合は結論を探索的と明記し、人物単位の標本分割、交差検証、または別標本による再現性確認を行ってください。

現行アプリは、同一セッションの探索と確認で使用された人物IDをsession-local salt付きSHA-256 tokenで照合します。1名でも重複すれば確認ラベルを解除し、same_sample_exploratory_followup_mfrmとして記録します。照合履歴と、人物得点を選ばない既定の監査ZIPには、生の人物IDや対応表を保存しません。同一セッションに探索履歴がないだけでは独立標本を証明しないため、確認標本の非重複attestationは既定で未確認です。チェック時には解析signature、時刻、自己申告者種別、申告内容を監査表へ残しますが、これはアプリ外の探索履歴を独立に検証した証明ではありません。

確認モードは、構造の相対証拠、標本独立性、数値積分のnode-count感度、評価者×観点等の方法交絡、下位得点の追加価値、公平性、運用範囲を別ゲートとして管理します。状態はPASSHOLDFAILNOT_ASSESSEDNOT_RUNです。欠落・未評価をPASSとはみなしません。numerical_stabilityは、全候補を事前固定した2つの決定論的node-count cellで再推定し、両cellで数値適格性、完全な候補順位、一意なBIC winner、winnerとrunner-upの最小BIC差2以上、BIC支持強度bandが不変の場合だけPASSになります。QMCではTAMの固定Halton列を使い、seedを固定したままnode数だけを変えます。seed変更は独立なrandomized QMC反復とみなしません。

専用validatorは、事前Q集合→suite候補→fit済みQと次元、準備済み応答・facet・PID→fitのresp_orig・facet・PID→PID×facet行からTAMの人物×facet応答行列への割当てを連結します。さらに、TAM 4.3.25が展開した完全な実効control list、対応対象のtam.mml.mfr() call profile(constraint = "cases"、unit weight、単一group、切片のみの潜在design、潜在平均0、利用者指定の固定xsi・分散やxsi priorなし)を検査します。A/B/展開Q/xsi.constrは準備済み入力からdesignMatrices.mfrまたはdesignMatrices.mfr2で再生成して完全一致を要求し、se.B/AXsi/AXsi_/B.fixed.estimatedも代数的に再構築します。項目ごとの観測最大カテゴリが異なる場合の構造的NA・0・省略Qセルに加え、mfr2が内部生成する構造的xsi.fixedを再生成された位置だけで許容し、推定xsi数と構造的固定xsi数を分離して99・SE 0 sentinelまで照合します。TAM 4.3.25のmfr2が1列Qをvectorへdropする既知の経路では、1次元参照モデルだけ数学的に同値なQ = NULL(全項目1)を渡し、fit後Qを宣言済み1次元Qへ照合します。fit証拠は、順序まで固定した完全な1行19列のraw TAM IC(n, deviance, loglike, logprior, logpost, Nparsxsi, NparsB, Nparsbeta, Nparscov, np, Npars, ghp_obs, AIC, AIC3, BIC, aBIC, CAIC, AICc, GHP)、非負devianceを含む全IC代数、非有限行を黙って除去しない完全なraw deviance history、xsi ID・推定値・非負の標準誤差と母数数、有限で対称な潜在共分散、EAP reliability、elapsed timeまでをfail-closedに結びます。TAMのraw history末尾は最終post-update devianceと同じ評価時点ではないため両者を同値とはみなさず、historyは全行の有限性・反復番号・反復数・最終2点の収束、最終fit値はraw ICとの厳密一致として別々に検査します。基準fitではcompare_mfrm_suite()の完全なR objectもserialized SHA-256で結び、AICc・EAP reliability表・elapsed time・診断・LRTを含む事後改変を拒否します。必須要素の欠落・追加・重複・並べ替え、不一致、非有限値、custom属性、schema/runtime/versionの相違、現行resultとの不一致があればPASSや報告を許可しません。R・platform・TAM・sfsmisc・Matrix・BLAS/LAPACK identityも基準fitと感度fitで一致する必要があります。

これらの厳格な結合は成果物の取り違えや部分的改変を検出するためのもので、numerical_stability = PASSが許可する主張は2つの決定論的node-count cellに対する相対的な候補選択方向の安定性だけです。推定法・積分法全体の妥当性や普遍的な精度、絶対的適合・局所依存、devianceの絶対的同値性、各項目・facet・分散・相関・人物得点・分類の安定性、真の次元構造、あるいは下位得点の信頼性・妥当性・追加価値を保証しません。解析signature・判定時刻・査読者の自由記述だけでは解除できません。method_confoundingfairnessoperational_useは、必要な正式成果物schemaとvalidatorが実装・検証されない限りHOLDのままです。また、用途・組織・有効期間・運用監視に結び付いた署名付きgovernance artifactが実装されるまで、callerが指定するhigh_stakes_authorized = TRUEはR APIでも拒否します。

補償型・非補償型

確認的分析で使うTAMの多次元線形予測子は、潜在次元の寄与を加算する 補償型 のモデル族です。ただし確認的候補はone-hot Qによるbetween-item型に限定しているため、各項目の線形予測子に入る潜在能力は1次元だけです。したがって、別次元の高い能力が、その項目に割り当てられた次元の低い能力を補うことはありません。この制約下では、補償性の違いは個々の項目反応には実質的に現れません。

「事前設計」では、within-item補償型とweakest-dimension非補償型を データ生成条件 として選択できます。ただし非補償型を当てはめて母数推定する機能ではありません。総得点を作れば次元間の強み・弱みが集約上相殺されることがありますが、それは非補償型の項目反応モデルを推定していることを意味しません。

比較結果の読み方

比較表では次を定義しています。

ΔBIC = 各モデルのBIC − 候補中の最小BIC
  • 0:BIC最良モデル
  • < 2:最良モデルと実質的に区別しにくい
  • 2–6:弱い支持
  • 6–10:中程度の支持
  • 10以上:強い支持

これは相対的な目安です。AIC・BICだけで次元性を断定せず、次元相関、潜在SD、信頼性、収束診断、項目内容も合わせて判断してください。

推奨対象となるモデル

BIC順位とΔBICは、次の数値診断を通過した候補だけに付与します。生の情報量規準は監査用に残しますが、不適格候補は自動推奨から除外されます。

  • 最大反復へ到達していない
  • devianceと情報量規準が有限で、最終deviance変化が安定している
  • 潜在共分散行列が半正定値で、境界分散・近特異性がない
  • 多次元候補の潜在次元間相関の最大絶対値が.95未満で、実質的な次元分離がある
  • TAMの推定不能値99、非有限SE、致命的警告がない
  • 入れ子高次元モデルのdevianceと自由度差が低次元モデルに対して適切である

適格候補の最良・次点ΔBICが2未満なら、BIC最小候補は表示しますが結論は「候補を明確に区別できない」とします。n <= k + 1の候補ではAICcを定義できないため表示しません。

通常の尤度比検定に関する注意

TAMの anova() は低次元・高次元モデル間の通常のχ²差検定を計算できます。しかし、低次元帰無モデルは高次元共分散行列の特異な境界に位置するため、通常のWilksのχ²近似は厳密には保証されません。

本アプリでは通常χ²のp値を参考値として表示し、推奨結果としてパラメトリック・ブートストラップLRTを用意しています。ブートストラップp値は次で計算します。

p = (1 + 帰無分布で観測ΔDeviance以上となった回数) / (有効反復数 + 1)

探索的な確認には199回以上、最終報告には999回以上を推奨します。有効反復数、失敗数、Monte Carlo標準誤差、二項信頼区間、最小p値分解能を必ず確認してください。有効反復が100回未満、有効反復率が90%未満、失敗反復をすべて非超過/超過と置いた範囲が.05をまたぐ場合、または95%二項区間が.05をまたぐ場合、アプリは単一p値を表示・判定に使用しません。

現行UIでモデル推定後に選ぶ隣接ペアのブートストラップは、事後選択された感度分析です。複数のQ候補をBICで見てから検定ペアを決めた場合、そのp値は候補選択を含む手順全体の.05を校正しません。運用上のPASSには、主比較を分析前に固定した外部受理記録(primary_comparison_prespecified = TRUE、分析時刻以前のprimary_comparison_frozen_at、解析signature、比較ID、成果物SHA-256)が必要です。複数候補からの選択自体を推論対象にする場合は、「候補fit→選択→検定」の全手順を再標本化するか、独立標本で確認します。現行Shiny UIはこの外部受理記録を作成・取込しません。

絶対適合と局所依存

モデル比較後、「診断」→「絶対適合・局所依存」で候補を1つ選び、オンデマンドで計算します。

  • CDM::IRT.itemfit():一般化項目単位のMD、RMSD、bias-corrected RMSD、MAD
  • TAM::tam.modelfit():一般化項目ベースのSRMR、SRMSR、MADaQ3、Q3/adjusted Q3要約、局所依存候補

MFRMでは元項目が項目×ファセットセルの「一般化項目」へ展開されます。画面の元項目別RMSDは、一般化項目の値を観測数で加重集約した記述値であり、元項目に対する独立な適合度検定ではありません。セルχ²の合計も記述値であり、自由度やp値を伴う検定には使用できません。一般化項目ペアが20,000を超える場合、二乗オーダーのtam.modelfit()を省略し、RMSDだけを計算します。

Q3表は、Q3とadjusted Q3が有限で、ペアの共通観測数が20以上の一般化項目ペアだけを対象にします。除外数、適格ペア数、共通観測数を併記し、同一元項目内のファセットセル同士か、異なる元項目間かを区別します。TAMのQ3ペアp値は、疎な一般化項目ペアの実際の共通観測数と検定上の標本サイズが一致しないため、画面にもZIPにも出力しません。上位ペアは「局所依存候補」の記述的スクリーニングであり、確定的な検定ではありません。

探索モードは、数値適格な1構成因子自由傾きMFRMについて、TAMのWLE応答確率からカテゴリ得点0…Kの期待値・分散を再構成し、生残差と標準化残差を元テキスト単位へ畳んだ人物×テキスト行列を作ります。自由傾きfitではTAMの汎用IRT.residuals()が傾き付きBをカテゴリ値として扱うため、その出力を流用しません。Q3は生残差のpairwise相関、画面のQ3*全適格なテキストペアのQ3非加重平均を各Q3から引いたmean-adjusted Q3 です。PCARは標準化残差のpairwise相関行列を固有分解します。WLEによる人物推定が誘発する残差依存を単純な列別置換では再現できないため、置換95%点や固有値カットオフは表示しません。全ペアの共通人物数30未満、非有限相関、pairwise相関行列の非PSDは修復せずHOLDにします。非PSDまたは疎情報HOLDではPCAR負荷と正固有値比率を表示・出力せず、最小固有値と相関行列を状態付き監査値としてだけ残します。.20等の経験則をp値・自動判定には使いません。

特に2-of-5冊子のように全人物の観測テキスト数が最大2の場合、人物WLEの推定に使った同じ2応答から残差を作るため、極端な負の残差相関と非PSDのpairwise行列が生じ得ます。この条件はHOLD_SPARSE_PERSON_INFORMATIONとし、Q3*も通常の局所依存証拠ではなく弱い記述的感度情報に留め、Freezeの残差証拠へ昇格させません。PCAR/Q3を仮説生成へ使う計画では、共通アンカーまたは人物当たりの観測テキスト数を増やす必要があります。

同じ人物×テキストに複数評定がある場合、現行のTAM WLE残差APIは答案残差因子を含む多次元fitへ適用できないため、PCAR/Q3探索をNOT_ASSESSEDにします。評定を別人物のように数えたり単純平均で疑似的に独立化したりしません。確認候補を当てはめた後の「絶対適合・局所依存」Q3は、一般化項目セル単位の別診断です。

Freeze JSON v1は、人物ID、人物token、応答、ファセット値、アップロード元ファイル名を含まないallowlistです。ただし項目名・次元名・自由記述は識別的であり得ます。また、人物集合commitmentはsession-local saltによる非可搬hashだけで、別セッション間の非重複照合には使えません。そのためv1の信頼状態はSELF_ATTESTEDSESSION_ORDER_ONLYportable sample overlap = NOT_ASSESSEDのままで、Freezeだけでは確認ラベルを解除しません。強い確認主張には外部署名/信頼できる時刻証明と、別管理鍵または安全な外部台帳による標本照合が必要です。

TAM 4.3-25で実測したところ、tam.Q3()residuals()は多次元モデルに対して1次元限定エラーとなります。本アプリは多次元でも動作する上記2 APIを使用し、警告、非有限指標、API失敗を隠さず表示します。構造的欠測によりSRMR等がInf/NAになる場合は「算出不能」と表示し、標準的なCFAのカットオフを適用しません。絶対適合指標や局所依存だけで次元数を選ばず、BIC、収束診断、次元相関、内容的妥当性と併せて判断してください。

背景処理・取消・キャッシュ

時間のかかる3処理はshiny::ExtendedTaskmiraiの専用dispatcher付き別Rプロセスで実行するため、計算中もShinyセッションは応答を続けます。実行ボタンは処理中に無効化され、経過時間と取消ボタンを表示します。待ち行列またはジョブpayloadの上限に達した場合はShinyをブロックせず、再実行可能な警告を返します。

クリック時点のデータ、Q、設定、設定fingerprintをワーカーへ渡します。実行中に設定が変わった場合は取消を要求し、間に合わず完了してもfingerprint不一致の結果を画面へ適用しません。成功結果だけを処理種別ごとに最大3件のセッション内LRUキャッシュへ保存し、同じ設定の再実行では再推定せず復元します。キャッシュはアプリ再起動後には残りません。

事後の条件付き回復シミュレーション

確認的比較後の「回復シミュレーション」では、Shiny上で長い反復計算を実行しません。画面では実行用ZIPの生成だけを行い、ローカルまたは計算サーバー上のRで実行した結果ZIPを再読込して可視化します。これはデータ収集前の事前設計とは異なります。

まず結果画面を試す

「デモ結果を表示」では、TAM推定や反復計算を行わず、固定された200反復分の説明用結果を即時表示します。1次元に近い構造、2次元が明瞭な構造、3次元が明瞭な構造を切り替えられます。2D・3Dデモには同一次元数の別Q仮説も含まれるため、モデルID回収率と次元回収率の違いを確認できます。これは画面操作用の固定結果であり、現在読み込んでいるデータの分析結果ではありません。

結果画面では、モデルID回収率、次元回収率、BIC判定保留率、判定不能率、反復失敗率、全候補完了率を最初に表示します。その下で混同行列、95% Wilson区間、ΔBIC分布、候補別の適格率を確認できます。画面上の列名と主要率は日本語・パーセント表示です。

自分の分析で実行する

  1. 観測分析で数値診断を通過した候補から、データ生成に使う基準モデルを選びます。
  2. 反復数、基本乱数シード、途中保存間隔、並列Rプロセス数を指定します。反復数は「動作確認20回」「標準200回」「報告用1,000回」から選び、数値欄で上書きできます。
  3. 「実行コード一式をZIPで保存」を選び、任意の場所へ展開します。
  4. 展開先で次を実行します。
Rscript run_recovery_simulation.R
# ワーカー数を実行時に変更する例
Rscript run_recovery_simulation.R --workers=4
  1. 中断した場合は同じコマンドを再実行します。仕様fingerprintが一致するチェックポイントだけが再利用されます。
  2. 完了時に作成される結果ZIPをShinyへ戻します。形式バージョン、シミュレーション・分析設定の識別子、表間のID・反復整合性を検証した後、完全一致回収率(モデルID単位)、次元回収率、判定保留、推定失敗、候補不適格率、ΔBIC分布を表示します。

これは、観測データへ当てはめた点推定値をDGPとし、受験者数、観測デザイン、欠測パターンを固定した conditional fitted-model recovery です。未知の交差負荷、局所依存、採点者交互作用、パラメータ不確実性、別標本サイズを含む一般的な検出力分析ではありません。主要な回収率は全要求反復を分母とし、同一次元数の別Q仮説を完全一致IDでは区別します。

実行用ZIPには人物ID、元の得点、人物得点を含めません。推定に必要なパラメータ、項目ラベルを内部識別子へ置換したQ、並べ替えた0/NA観測パターンだけをwhitelist方式で収録します。ただし推定済みパラメータと観測パターンは分析派生物なので、匿名データや再識別不能なデータとはみなさず適切に保管してください。結果ZIPにも模擬応答や完全なTAM fitは保存せず、反復・候補別の要約指標だけを収録します。

解釈上の制限

  • 収集後分析は、事前指定Qの確認的MFRM候補系列と、別系列の自由傾き1因子対2因子探索診断に限定されます。
  • 多次元モデルが支持されても、多次元性が一般的に証明されたことにはなりません。
  • 多次元モデルが支持されない場合も、1次元性の証明にはなりません。標本サイズ、各次元の項目数、共通受検者数による検出力不足があり得ます。
  • tam.mml.mfr() はファセットモデル内で項目傾きを自由推定しません。次元間の潜在SD差が大きい場合、適合改善が次元別の識別力差を吸収している可能性があります。
  • within-item・非補償型は事前設計のDGPとして扱いますが、その専用モデルの当てはめと母数回収は対象外です。
  • 事前設計の候補は各次元数につき1つの決定的な入れ子Q経路です。任意のQ行列、同一次元数の競合Q、項目所属誤りを網羅しません。
  • 事前設計は現時点で次元候補選択を対象とし、項目・採点者・人物母数のbias、RMSE、区間被覆率を評価しません。
  • 基準DGPは等相関正規能力、固定傾き、加算的採点者厳しさ、独立セルMCAR、局所独立を仮定します。drift、halo、MNAR、評定者交互作用への一般化はできません。
  • 自由傾き探索モデルは固定傾き確認的MFRMとは別のモデル族で、同じランキング表には混在させていません。
  • 探索モードのF1/F2は、外部根拠なしにReading/Writingとは命名できません。因子の順序・符号も任意です。
  • 総合点の1F支持は技能過程が1つという証明ではありません。ReadingとWritingが全テキストへほぼ同じ比率で寄与すれば、2技能でも総合点共分散は実質1Dになり得ます。逆に2Fは内容・方法効果でも生じ得ます。
  • 探索MFRMは観測した5テキストと教師を固定ファセットとして扱います。結果はこの課題・採点運用に条件付きで、テキスト母集団・教師母集団への一般化を直接推定しません。
  • 全答案か一部答案かを問わず、上記3条件を確認した複数採点だけで、探索モデルはテキスト別答案残差因子を追加します。得点依存の再評定選択、相互盲検でない採点、改稿・再受験、採点者×テキスト交互作用、採点者別カテゴリ閾値はこの答案残差因子だけでは扱えません。
  • 5テキストの2因子解はほぼ飽和です。補正BICと専用ブートストラップも真の因子数や内容上の次元名を証明しません。
  • 潜在回帰、多母集団モデル、標本ウェイトは、この初版のUIでは扱いません。
  • 外部校正による尺度連結は、候補比較に適用せず、事前指定した1候補・1対象年度/フォームへだけ適用します。
  • 参照校正ZIPは、外部固定値を持たないconstraint = "cases"の1PL・単一群・潜在回帰なしfitからだけ作成します。元応答、formulaA、Q、次元数、カテゴリ数をfitから再検証できない場合も停止します。既に連結したfitの再出力、共同校正、連鎖リンクは扱いません。
  • 尺度連結の1実行は、事前抽出した1つの参照年度・実施/フォームと1つの対象年度・実施/フォームの組を扱います。参照・対象とも保持された年度・フォーム列を検査し、列がない場合は利用者確認に依存します。参照確定確認の時刻・attestationは参照ZIPへ保存しません。
  • schema 1.1.0は共通アンカー項目の設計上のcategory_maxを機械的に照合しますが、TAMが宣言値ではなく観測応答からカテゴリ構造を作るため、設計上の最高カテゴリが1項目でも未観測なら参照保存・対象適用を停止します。カテゴリの意味、方向、ラベル、欠測コードの同一性は自動保証しません。
  • 尺度連結で検証済みのformulaAは、項目・PCM/RSM step・採点者等の加算的な主効果です。item:rater等の追加交互作用を持つ任意式や、手製bundleの任意の部分step集合を「完全な項目構造の固定」として一般化しません。
  • UIからの参照保存は既存の数値適格性ゲートを必須にします。低水準R APIはfit構造・母数の有限性を厳格に検査しますが、custom A/B、標本ウェイト、prior、意図的に改変されたRオブジェクトの由来を認証するものではなく、参照fitの収束品質を独立の包括的検定として再実行しません。
  • 設計上の最高カテゴリは全項目で観測必須ですが、中間カテゴリすべての出現は一律の停止条件にしていません。未観測の中間カテゴリは入力警告・数値診断と参照fitの推定可能性を確認します。
  • 尺度連結の参照値は誤差のない定数として扱います。参照校正誤差、リンク誤差、アンカー選択不確実性は対象側の標準誤差へ伝播しません。
  • 全アンカー解放モデルとの差は探索的なitem/step drift感度であり、測定不変性やDIFの検定ではありません。平均採点者driftと潜在平均の交絡は解消しません。採点者固定、複数年度の同時校正、連鎖リンクには対応していません。

結果ZIPと個人情報

確認モードの結果ZIPには、比較表、完全なQ、候補別接続診断、モデル除外理由、TAM警告・console、deviance履歴、実行済みの絶対適合・局所依存表、分析ファミリー、主張範囲、設定、sessionInfo()、厳格な許可リストで縮約したcompactモデルを収録します。2つの決定論的node-count cellを実行した場合は、公開用の数値安定性artifact、plan、候補・run別集約診断、deviance範囲、pairwise ΔBIC範囲を収録しますが、これらを再構成するprivate compact run_evidenceはメモリ内結果だけに保持し、完全fitが応答や識別子を露出し得るためZIPへ公開しません。外的帰結パッケージを受理した場合は、plan、集約OOF sufficient statistics、fold別手続監査、summary、制限文、受理した正確な署名付きcanonical package JSON、署名状態・SPKI fingerprint・allowlist/revocation/複合policy digestを記録したsubscore_external_signature_trust.csvも収録しますが、private prediction ledger、秘密鍵、allowlist・denylist本体は収録しません。

探索モードの結果ZIPには、1F/2F比較、回転後・回転前負荷、F1/F2相関、再パラメータ化アンカー診断、テキスト対ごとの一意な共通受験者数、検出採点計画、採点者別負担、採点者×テキスト件数、テキスト別複数採点数、教師ネットワーク、0件を含む全教師ペア別共有答案数、数値診断、警告、実行できた場合の専用ブートストラップを収録します。さらにdecision_summary.csvdecision_gates.csvanalysis_manifest.csvで、総合状態、監査用の観測共分散方向、構成概念名NOT_IDENTIFIED、公平性・DIFNOT_ASSESSED、運用範囲RESEARCH_ONLYを別々に保存します。CLAIMS_AND_LIMITATIONS.txtは主張禁止範囲を明記し、FINAL_SHA256SUMS.csvはZIP内payloadの最終SHA-256を保存します。候補モデルの一つでも数値不適格なら、適格候補内のBIC最小値は監査用に残しても最終選択を確定しません。答案残差調整を使用した場合は、1F・2Fで別々に推定したテキスト別答案残差負荷と線形予測子上の分散寄与も収録します。複数評定では repeated_rating_attestation.csv に3項目別の利用者確認、確認時刻、確認revision、確認対象のbasis署名、採点者IDを含む列マッピング、対象答案数を保存します。部分複数評定では互換用の partial_repeat_attestation.csv も保存します。これは手順をアプリが検証した証明ではなく、外部の選出表・教師割付・盲検記録と照合する監査索引です。採点者ID値はモデル投入前に RATER_### へ仮名化し、対応表を出力しません。列名・テキスト名・その他ファセットの名称・値は残り得るため共有前に確認します。CSVの式開始文字は CSV_TEXT_ENCODING.txt の規則で可逆hex化します。負荷の符号は任意で、二乗値は分散割合・ICC・信頼性・評定者間一致度ではありません。Q割当て表と人物得点は収録しません。Reading得点・Writing得点は生成せず、A–B受験者のA点をReading、B点をWritingへ変換することもありません。回転依存の個人別F1/F2得点も表示・出力しません。

どちらのZIPもprivacy_manifest.txtに除外方針を記録します。利用者指定の入力ファイル名は出力せず、既知の人物IDとファセット水準はvalidation warning、TAM warning・console、bootstrap error、診断メッセージから伏せます。compact TAM RDSは上位許可リスト内の数値・論理値だけを保持し、文字列、入れ子object、names/dimnames、任意属性を除きます。ただし項目名・次元名・その他の利用者指定ラベルや分析派生値、外部受理記録の判定者名・自由記述根拠は残り得るため、共有前の内容確認が必要です。

確認モードの人物得点には人物IDが含まれるため、既定では表示もZIP収録もしません。明示的な選択、7つのdecision gate、Qの事前指定、標本非重複、単一best_id、bootstrap、絶対適合・局所依存がすべて通っても、それだけでは解除しません。現行package 1.2.0が検証するのは、固定総合得点に追加したK-1コントラスト集合の共同予測・効用・害であり、各次元得点の個別増分価値ではないため、この成果物によるsubscore_useのPASSは全次元のperson_scores.csvを認可しません。個別得点の出力は、各出力得点に対応する事前固定・multiplicity調整済みの増分妥当性と帰結schemaを将来実装するまで安全側に停止します。

重要な実装境界として、現行Shiny UIはsubscore_useについて、外部で作成済みの厳格なJSONエビデンスパッケージだけを取込みできます。planやprivate OOF ledger自体の作成・解析はR APIまたは独立解析環境で行います。従来型の8文字列だけの自由記述record、内部精度表、任意のartifact_sha256文字列はsubscore_useを解除できません。numerical_stabilityも自由記述では解除できず、入力・候補集合・2つの決定論的node-count cell・各runをidentity-bound hashで結んだ専用成果物が必要です。method_confoundingfairnessoperational_useには現行版で受理可能な正式成果物schemaがなく、R APIへ自由記述recordを直接渡してもPASSにはならずHOLDです。bootstrap主比較とabsolute-fitだけは、それぞれの専用artifact・identity・受理記録validatorを通る場合に限って評価できます。通常UIだけを利用し、有効な外的帰結JSONを取り込まない場合、subscore_useは安全側のHOLDNOT_ASSESSEDです。探索モードでは人物得点の選択自体を提供しません。この選択にかかわらず、compactモデルには人物ID、生応答、元応答、行別ファセット、人物事後分布を含めません。項目・ファセットの利用者指定ラベル、外部登録ID、判定者名・根拠は成果物に残り得るため、共有前に確認してください。分析後に設定を変更して結果がstaleになった場合、再実行するまで外的成果物の取込やZIP保存はできません。

尺度連結の監査ZIPも、元応答・行単位ファセット・人物ID・RDS・実行コードを既定では含めません。警告・console中の既知人物IDと採点者等の既知ファセット水準を伏せ、表計算ソフトで式として解釈され得る文字列は可逆なUTF-8 hex表現へ変換します。ただし項目名、次元名、尺度名、年度・フォーム名などの利用者指定ラベルと分析派生値は残るため、監査ZIPを「匿名化済み」「再識別不能」とはみなしません。人物得点はdecision contract通過後に選択した場合だけ固定モデルの人物IDを含みます。共有前に内容を確認し、適切なアクセス制御下で保管してください。

読み込む参照校正ZIPは、既知の5ファイルだけを許可し、entry名、path traversal、重複、圧縮前後のサイズ、schema、checksumを検査します。これは不正・破損archiveに対する防御であって、マルウェア検査、発行者認証、内容妥当性の保証ではありません。参照bundleと結果ZIPのSHA256SUMS.csvはmanifestとpayloadの不一致を検出しますが、manifestごと置換した第三者を識別するデジタル署名ではありません。

テスト

Rscript tests/testthat.R
Rscript scripts/smoke-design-offline.R
Rscript scripts/smoke-background-jobs.R
Rscript scripts/smoke-shiny-background.R
Rscript scripts/smoke-recovery-offline.R

GitHub Actionsはcommit、nightly、releaseの3 laneに分かれます。通常laneはapp sourceと full suite、nightlyは4 smokeと通常skipされるslow real-fit combine、releaseはさらに 全lock recordの数値version一致を検査します。各stepのexit code、UTC、runtime、logは artifactへ保存されます。trigger、runner、timeout、保持期間、security boundaryは docs/ci_validation_lanes.mdを参照してください。 初回hosted baselineのrun URLとartifact digestは docs/hosted_validation_baseline_20260729.md、 tag/GitHub Release前の確認手順は docs/release_checklist.mdに記録しています。 0.7.0の残るG0–G7 gateは 0.7.0 release readiness milestone のIssue #4–#10で追跡し、CI成功だけでscientific/security/governance gateを解除しません。

# CIと同じstep分離・証跡形式で通常laneをローカル実行
Rscript scripts/run-ci-lane.R --lane=commit

探索的1F/2F診断のストレステスト

300名・5テキスト・各人2テキスト・10採点者の要約課題については、探索専用runnerを使用します。既存の確認的Qシミュレーションや条件付き回復シミュレーションとは別系列です。 テキストを次元へ分割しないモデル、1F/2F方向の意味、5テキスト近飽和、10採点者の役割は300名×5テキストの具体例に具体化しています。実行・判断・修復の根拠は、事前固定R20実行protocolR20 decision ledger推定器repair planstress test report長期検証roadmapを一組として参照してください。

# 冊子切断、未確認二重採点、採点者chain/非連結を高速検査
Rscript scripts/run-exploratory-stress.R --mode=gate

# 5テキストと6テキストの代表条件を実際のTAMで推定(長時間)
Rscript scripts/run-exploratory-stress.R --mode=pilot --workers=4 \
  --replicates=1 --anchor-mode=screening_one

# B設計4信号のrep 1–5を現行schemaで実行
Rscript scripts/run-exploratory-stress.R --mode=pilot --workers=4 --chunk-size=4 \
  --scenarios=F6_2F_NO_ANSWER_RESIDUAL_N450,F6_2F_MODERATE_RHO10_NO_ANSWER_RESIDUAL_N450,F6_2F_SIMPLE_RHO35_NO_ANSWER_RESIDUAL_N450,F6_2F_VERY_STRONG_NO_ANSWER_RESIDUAL_N450 \
  --replicates=5 --anchor-mode=screening_one \
  --output=stress-results/f6-b-signal-curve-r5-final-20260723

# 結果閲覧前に固定したrep 6–20を別成果物として追加
Rscript scripts/run-exploratory-stress.R --mode=pilot --workers=3 --chunk-size=3 \
  --scenarios=F6_2F_NO_ANSWER_RESIDUAL_N450,F6_2F_MODERATE_RHO10_NO_ANSWER_RESIDUAL_N450,F6_2F_SIMPLE_RHO35_NO_ANSWER_RESIDUAL_N450,F6_2F_VERY_STRONG_NO_ANSWER_RESIDUAL_N450 \
  --replicate-start=6 --replicates=15 --anchor-mode=screening_one \
  --output=stress-results/f6-b-signal-curve-r0006-r0020-final-20260723

# 署名・source・runtime・seed・範囲を再検証してrep 1–20を無再推定で結合
Rscript scripts/combine-exploratory-stress-ranges.R \
  --input=stress-results/f6-b-signal-curve-r5-final-20260723 \
  --input=stress-results/f6-b-signal-curve-r0006-r0020-final-20260723 \
  --output=stress-results/f6-b-signal-curve-r20-combined-final-20260723

# scenario集合の異なるtop-upから共通2セルだけを選ぶ場合は明示する
Rscript scripts/combine-exploratory-stress-ranges.R \
  --input=stress-results/f6-b-signal-curve-r5-final-20260723 \
  --input=stress-results/f6-b-signal-curve-r0006-r0020-final-20260723 \
  --input=stress-results/f6-b-practical-positive-r0021-r0100-final-20260723 \
  --scenarios=F6_2F_SIMPLE_RHO35_NO_ANSWER_RESIDUAL_N450,F6_2F_VERY_STRONG_NO_ANSWER_RESIDUAL_N450 \
  --output=stress-results/f6-b-practical-positive-r100-combined-final-20260723

# 事前固定した非連続sentinelは全replication番号を明記した場合だけ結合可能
Rscript scripts/combine-exploratory-stress-ranges.R \
  --input=stress-results/f6-b-app-exact-sentinel-r0006-final-20260723 \
  --input=stress-results/f6-b-app-exact-sentinel-r0011-final-20260723 \
  --input=stress-results/f6-b-app-exact-sentinel-r0016-final-20260723 \
  --input=stress-results/f6-b-app-exact-sentinel-r0020-final-20260723 \
  --replications=6,11,16,20 \
  --output=stress-results/f6-b-app-exact-sentinel-r0006-r0020-combined-final-20260723

# R100-Aコマンドは意図的に未提示。修復後source、未使用seed、凍結scenario・KPI・閾値を
# protocolへ署名してから生成する。現推定器ではBLOCKEDのため実行しない

catalogには、厳密1F、中程度/弱い2F、比例負荷の2技能、5・6テキストの答案固有残差なし正指定対照、低相関・ほぼ単純構造の明瞭な2F陽性対照、因子相関.90/.95、N=150/300/450/600、均衡/不均衡/切断冊子、MCAR/能力依存MNAR、採点者×テキスト交互作用、採点者分散、カテゴリ上限不一致、部分/全複数採点を含めています。潜在得点傾向に依存して部分二重採点答案を選ぶ条件は、3確認が真でも選出仮定が破られた場合の意図的な感度条件であり、観測済み一次得点による再採点選出そのものでも、推奨採点計画でもありません。

6テキストでは、交差負荷の大きさと因子相関を分離した2×2信号校正も行います。中程度交差負荷/ほぼ単純構造と、因子相関.35/.10を交差し、真の共通共分散固有値比lambda2/lambda1を約.159、.271、.408、.693へ段階化します。生成時の目標比と実現比はmanifest・反復・集計に保存し、単なる「弱い/強い」という名前だけで条件を比較しません。

6テキストの情報設計校正ブロックは、次の3水準と、1F・中程度2F・明瞭な2Fの3生成構造を交差した9セルです。pair overlapは均衡配置における1テキスト対あたりの共通受験者数です。

水準 N 1人あたりのテキスト数 総答案数 1テキストあたりの答案数 pair overlap
A(現状型) 300 2 600 100 20
B(人数増) 450 2 900 150 30
C(冊子内overlap増) 300 3 900 150 60

BとCは総答案数と各テキストの答案数を揃え、独立受験者を増やす設計と、同一受験者内のテキスト間リンクを増やす設計を同じ採点量で比較します。Cは各受験者が3テキストへ解答するため、A・Bより受験負担が大きく、Nとoverlapを数学的に完全分離した主効果ではなく実務的な配分方略の比較です。全員2テキストを固定した均衡配置では、平均pair overlapは N / choose(テキスト数, 2) で決まり、N・テキスト数・overlapを独立には操作できません。

5テキストでは2因子共分散構造が近飽和になるため、最終best_idは設計上保留です。Nや冊子overlapを増やせば数値精度は改善し得ますが、観測変数が5つであることによる近飽和性は解消しません。主KPIは暫定BIC方向、1F/2Fの数値適格率、ΔBIC、因子分離、回転不変な共通共分散誤差・部分空間角、理由別保留です。識別アンカーが不安定な反復は表示用BIC方向と正答率から除き、保留前の方向をraw_bic_directionとして別保存します。6テキスト条件は最終選択規則を校正する補助条件で、実際の5テキスト運用と取り違えません。6テキスト・N=300では15冊子対あたり20名、N=450では30名です。また、生成に2技能を用いても全テキストの負荷比が比例すれば、総合点に現れる共分散は1Dです。この条件で1F方向となることは回収失敗ではありません。

出力にはrun_manifest.csv、実効既定値を展開したscenario_manifest.csvtask_plan.csvsource_manifest.csvruntime_manifest.csvreplicate_results.csvscenario_summary.csv、長形式のmetric_summary.csvFINAL_SHA256SUMS.csvCLAIMS_AND_LIMITATIONS.txtを含めます。metric_summary.csvはnumerator、全要求反復denominator、plug-in MCSE、worst-case MCSE、Clopper–Pearson exact区間を保存し、0/RやR/Rを不確実性0とは扱いません。各チャンクは署名付きcheckpointへ保存され、同じコマンドと出力先なら未完了taskだけを再開します。コード、seed、シナリオ、反復範囲、maxitersnodes、anchor mode、chunk size、R/TAM依存鎖、RNG kind、BLAS/LAPACKのいずれかが異なる既存出力は混合しません。base seedは1–1,073,741,823で、既存シナリオを移動しない固定seed_slot×絶対replication番号から生成用の奇数seedと適合用の偶数seedを一意に割り当てます。--replicate-start=6 --replicates=15はrep 6–20を生成し、通常のR=20 planの同じ行とseedが一致します。top-upは範囲ごとに別ディレクトリへ保存し、結合scriptが各入力全体のconfig、静的manifest、最終checksum、COMPLETE、task/seed、現行source、runtimeを読み取り専用で再検証します。既定ではscenario集合と連続範囲の完全一致を要求します。異なるscenario集合から共通セルだけを選ぶには--scenarios、非連続sentinelには全番号を列挙した--replicationsが必要で、どちらも由来・選択を派生成果物へ記録します。履歴的なschema 1.4.0/runner 1.3.0成果物は、seedが一致しても現行schema 1.5.0/runner 1.4.0成果物と正式な一つの性能系列へpoolしません。異常終了後にlockが残った場合は、同じhostの所有PIDが終了したことを確認してから--clear-stale-lock=trueを指定します。稼働中PIDまたは別hostのlockは自動解除しません。

通常テストには決定論的generator、安全装置、集計、checkpoint再開・改変拒否を置き、多数反復、全アンカー、高次元QMC、ネストしたブートストラップは外部batchで実行します。割合は失敗反復を除外せず、全要求反復を無条件分母にします。pilot --replicates=1や各条件R=5は配管・数値故障を見つけるための試走であり、偽陽性率、検出率、モデル選択性能の推定ではありません。0/5や5/5も性能が0%/100%であることを示しません。

R20は結果を見る前に固定したprotocolとdecision ruleによる故障探索です。R100-Sはscreening_oneで修復対象と開発futilityを調べる系列であり、実アプリ性能の合格判定には用いません。推定器修復後のR100-Aは、開発に未使用のseedを使い、実アプリと同じapp_exact_allでrelease候補を評価する別系列です。単一アンカーのR20/R100-Sと、全アンカーのR100-A/R400はpoolしません。現推定器による独立R400はBLOCKED_PENDING_ESTIMATOR_REPAIRです。推定器修復とR100-A合格後にコード・依存・DGP・primary endpoint・多重性規則・受入閾値を凍結してから、重ならない事前固定seedで一度だけ実行します。途中結果を繰り返し判定する場合は通常95%区間を各lookで流用せず、事前固定のalpha spendingを用います。詳細は長期検証roadmap推定器repair planに記載しています。

探索fitの既定maxiterは500です。一次fitが数値診断を通らない場合、同じEM制御のまま上限だけを2倍(最低500)にして再試行します。構成因子の最大負荷ベクトル長5以上は境界警告、6以上は準完全分離または有限最尤解不在を疑ってBIC比較を停止します。この長さは2Fの直交回転に不変で、答案残差負荷は別指標として保存し、未校正の閾値6を流用しません。閾値5/6は少数反復のstressから得た暫定的な運用境界であり、追加反復で偽警告率を校正します。良性に見える遅い収束の事前選出4本のうち、2,500反復へ追加実行した2本では新規収束が得られず計算時間だけが増えたため、自動の第3段retryは採用していません。反復上限へ到達した有限解を収束済みとは扱わず、診断表とstress出力に再試行の有無・除外理由を残します。

テストには、wide/long変換、先頭ゼロID、異常得点、名前付き複数Q、候補別接続、ユーザーCSVの明示Q確認、数値適格性ゲート、実際のTAM 1D/2D/3D推定、絶対適合API、LRUキャッシュ、短いブートストラップ、個人得点opt-inを含むダウンロード生成が含まれます。尺度連結では、schema 1.1.0・checksum、設計上のcategory_maxと最高カテゴリ未観測時の停止、意味キーからxiへの対応、固定後のsemantic label照合、参照Qと異なる対象Q、新規項目の自由推定、参照fitの非連鎖・単一群・潜在回帰なし・平均0制約、単一年度/フォーム範囲、5つの確認と設定signature、beta.fixed = FALSE、全アンカー解放感度、監査ZIPと個人情報境界を確認します。PCM item-stepとRSM common-stepは、実際のTAM固定fitまで通す統合テストを含みます。事前設計テストはMCSE、系統的リンク・共通リンク人物・完全交差、分断検出、ADEMP設計票、複数設計案CSVの往復と診断値の再計算を確認します。背景処理の2本のsmoke scriptは別PID実行、Shinyとの接続、取消までを確認します。smoke-recovery-offline.Rは人物ID・元得点を除いた実行用ZIPを生成し、runner実行、結果ZIP検証、checkpoint再開時の同一性までを確認します。

探索モードの専用テストには、300名・5テキスト・全10冊子ペア×30名・0–6点GPCM、wide/long一致、600/720/6,000評定の3採点計画、明示採点者ID、自由負荷1F/2F実推定、実TAMによる部分/全複数採点の1/2構成因子+5答案残差因子の起動・負荷抽出・帰無生成時の欠測保持、Q・母数計数、5テキスト近飽和保留、全複数採点の未確認停止と3確認後6/7次元経路、確認basis・revisionのリセット、各テキスト24答案・教師ネットワーク強度、全答案10名採点でもテキスト重複人数が増えないこと、モデル化できない重複セル、観測カテゴリ上限差、非有限負荷の安全な診断、探索ZIPにQ・人物得点を含めず採点計画・確認監査を残すことを含みます。

ファイル構成

app.R                       Shiny UI・server
R/data_validation.R         CSV、wide/long変換、Q・デザイン検証
R/preflight_diagnostics.R   非停止型プリフライト、候補・項目・カテゴリ要約
R/model_fit.R               TAM推定、収束診断、ブートストラップ
R/exploratory_factor.R      総合点の自由負荷1F/2F探索診断
R/exploratory_stress.R      統合型要約課題のストレスDGP・KPI・runner本体
R/calibration_anchor.R      外部校正schema、意味的xi対応、同定検査
R/calibration_io.R          データ専用の参照校正ZIP入出力・checksum検証
R/calibration_results.R     固定/全解放モデルの尺度連結要約・感度表
R/calibration_reporting.R   尺度連結の監査ZIP・privacy manifest
R/model_compare.R           AIC/BIC、LRT参考値、次元相関、解釈
R/confirmatory_decision_contract.R  確認ゲートと得点公開契約
R/hypothesis_freeze.R       探索仮説のcanonical Freeze成果物
R/consequence_validation.R  下位得点・方法交絡の内部集計監査
R/external_consequence_validation.R 外的帰結plan・artifact・JSON契約
R/plots.R                   可視化
R/reporting.R               ZIPレポート生成
R/absolute_fit.R            RMSD、全体適合、Q3、局所依存
R/background_jobs.R         背景ワーカーへ渡す不変ジョブ
R/result_cache.R            セッション内LRUキャッシュ
R/design_simulation.R       事前設計DGP、模擬データ、実行用ZIP
R/simulation_export.R       行単位IDを除いたテンプレートと実行用ZIP
R/simulation_results.R      結果ZIPの検証、集計、回収率可視化
R/recovery_demo_results.R   計算不要の1D・2D・3D説明用結果
R/recovery_ux.R             プリセット、進行状態、KPI定義
R/sample_data.R             再現可能なデモデータ
docs/literature_basis.md    Zotero先行研究と実装要件の対応表
docs/calibration_anchors.md 外部校正アンカーと年度・フォーム間リンク仕様
docs/adversarial_release_roadmap_20260725.md  敵対的検証と公開・運用の横断ゲート
docs/adversarial_release_workplan_20260725.csv  優先度・owner・依存・証拠を持つ実行台帳
docs/known_issues_20260725.md  現在のrelease blockerと解除条件
docs/test_baseline_20260728.csv  現行テスト・スモークの機械可読基準線
docs/runtime_baseline_20260728.csv  現行R・主要依存・RNG・BLASの実行環境基準線
docs/ci_validation_lanes.md  commit・nightly・release CI契約と証跡schema
docs/repository_policy.md     Git追跡境界と外部artifact保管方針
docs/renv_restore_verification_20260728.md  lockfileのproject library再構築証跡
scripts/                    事前設計・背景処理・事後runnerの実環境smoke test
scripts/run-exploratory-stress.R  署名・checkpoint付き探索stress CLI
tests/testthat/              単体・統合テスト
www/styles.css              画面スタイル

参考資料

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages