AMA {lazy.dnc} | R Documentation |
加算モデルによる分析 Additive Model Analysis (暫定版)
AMA(
Test = NULL,
AncTest = NULL,
Appl = NULL,
YearAD = 2021,
YearJ = NULL,
minnobs = 1,
omit13 = 0,
scaleA = 1,
print = 1,
outfile = NULL,
ScoreOLD = NULL
)
Test |
選択科目名のベクトル。 |
AncTest |
アンカーテスト名のベクトル、または NULL 。 |
Appl |
志願者マスターデータフレーム |
YearAD |
西暦。 |
YearJ |
(未使用) |
minnobs |
分析とする集団の最少人数。 |
omit13 |
= 1 にすると1科目のみまたは3科目以上選択している集団を除く。 |
scaleA |
= 0 にするとアンカーテストを 100 点満点に換算しない。 |
print |
= 3 にすると統計量の詳細を出力 |
outfile |
要約を出力するテキストファイル名 |
ScoreOLD |
(未使用) |
Appl
で指定される志願者マスターデータフレームは、
"S1MKUBN", "S1CODE", "S1SCORE"
等のカラム名(変数名)を持っていること。
そのため、csv で提供される志願者マスターを読み込んだ際には
convert_colnames
関数を利用してカラム名を変更する必要がある。
(Examples セクションを参照のこと。)
Test
は 全角文字で以下の選択科目のテスト名を指定する。
ただし、教科を跨いだ科目の指定は出来ない。
物理、化学、生物、地学 日本史、世界史、地理 倫理、政経、現社、倫政
AncTest
は全角文字で以下のアンカー科目のテスト名を指定する。
アンカー科目を利用しない場合は NULL とする。
国語、数学1、数学2、英語R、英語L
なお、出力結果には、選択科目集団の名前はこれらの漢字のテスト名を用いて、 各テストの名前はこれらの漢字に対応する以下のローマ字のテスト名で表示される。
物理 Phys、化学 Chem、生物 Bio、地学 EarthS 日本史 JapanH、世界史 WorldH、地理 Geo 倫理 Ethics、政経 PolEco、現社 ModSoc、倫政 EthPol 国語 JPN、数学1 MATH1、数学2 MATH2、英語R ENG-R、英語L ENG-L
minnobs
や omit13
に関しては Examples セクションを参照のこと。
なお、minnobs
が大きすぎる場合には、分析から除外される選択科目集団が
多くなり、その結果、デザイン行列の階数が列数を下回ることになる場合が生じる。
その場合には
"*** Insufficient Data to estimate the parameters. ***"
と表示されるので、アンカー科目の利用が必須となる。
出力結果
出力の最後の方に出る以下のものが主要結果となる。
パラメタの推定値 線型モデルのパラメタの推定値 集団の学力の推定値 weighted の列が alpha パラメタ テストの易しさの推定値 zero-sum が beta パラメタ 選択科目の平均点 この部分に観測得点とモデルの予測値の平均点が出ている。 最大得点差 dif が最大得点差、pair がそれを観測したテスト対名
上記の imputed の値が加算モデルによる補完後のテストの最大難易度差の推定値 となっている。
上記の要約が作業ディレクトリ に outfile
という名称の
テキストファイルとして出力される。
outfile=NA
の場合のファイル名は
ローマ字教科名 和暦(西暦) yyyy-mm-dd_hh_mm_ss.txt
となる。
outfile=NULL
の場合はテキストファイルは出力されない。
以下の統計量からなるリスト(現在整理中)
$ YearJ : chr 和暦(ローマ字) $ YearAD : num 西暦 $ Kyoka : chr 教科名(ローマ字) $ KyokaJ : chr 教科名(漢字) $ Test : chr 選択科目名(漢字) $ AncTest : chr アンカー科目名(漢字) $ minnobs : num $ omit13 : num $ scaleA : num $ nG0 : int 全集団数 $ nT0 : int 全テスト数 $ nG2 : int 分析に用いられた集団数 $ nT2 : int 分析に用いられた選択科目数 $ nA : int アンカー科目数 $ nrowX : int ディザイン行列の列数 $ GroupName : chr 集団名(漢字) $ TestName : chr 選択科目名(ローマ字) $ AncTestName: chr アンカー科目名(漢字) $ nparam : num モデルのパラメタの数 $ rank : int ディザイン行列の階数 $ nfree : num nrowX-nparam $ np2 : num 各集団の受験者数 $ betahat : num モデルのパラメタの推定値 (non-fullrank model) $ b : num モデルのパラメタの推定値 (zero-sum) $ testdif : num テストの易しさ (zero-sum beta) $ groupablty : Named num 集団の学力 (zero-sum alpha) $ groupabltyw: Named num 集団の学力 (重み付き alpha) $ muw : num 補完済平均点を計算するための定数 $ obs_mean : Named num 観測された平均点 $ imp_mean : Named num 補完済み平均点 $ maxdifm : Named num 最大平均点差 $ locmaxdifm : Named chr 最大平均点差が生じる科目対 $ msp : num 選択科目の統計量 $ np : num 選択科目の受験者数 $ meanp : num 選択科目群ごとの平均点 $ stdp : num 選択科目群ごとの標準偏差 $ mspA : num アンカー科目の統計量 $ meanpA : num 選択科目群ごとのアンカー科目の平均点 $ stdpA : num 選択科目群ごとのアンカー科目の標準偏差 $ npA : num 選択科目群ごとのアンカー科目の受験者数 $ Cmat0 : num 素点間の積率相関係数 $ CmatP : num 平均点間の積率相関係数 $ CmatS : num 平均点間のスピアマンの順位相関係数 $ CmatK : num 平均点間のケンドールの順位相関係数 $ npAll* : num 分析で用いられる選択科目群の人数 $ meanspAll* : num 分析で用いられる選択科目群のごとの平均点 $ X : num ディザイン行列 X $ y : num 基準変数 y (群ごとの各選択科目の平均点) $ nobs : num 各群の人数 $ yhat : num モデルの予測値 $ maxady : num データとモデルの予測値の差の絶対値の最大値 $ rmse : num データとモデルの予測値の差の RMSE $ rmsew : num データとモデルの予測値の差の重み付き RMSE $ alphasumw : num 重み付き alpha の推定値 $ alphasum : num zero-sum alpha の和 (=0) $ betasum : num zero-sum beta の和 (=0) $ maxadbb : num zero-sum と non-fullrank を用いた場合の予測値の差 (=0) $ maxadbb2 : num zero-sum と 重み付き alpha を用いた場合の予測値の差 (=0)
上記のうち、* が付いたものが加算モデルへの入力データとなっている。
meanspAll から、説明変数行列 X と基準変数ベクトル y を定義し、
npALL を重みとして最小2乗解を算出しているが、その、一般逆行列を用いた解が
betahat、それに zero-sum の制約を入れたものが b である。
前川眞一 (2019) 加算モデルを用いた 選択科目における集団の学力と試験の難易度の分離 大学入試センター 研究開発部リサーチノート RN-20-06.
前川眞一 (2020) 成績データから見たセンター試験
大学入試センター 「センター試験」をふり返る 第2部 論考4
https://www.dnc.ac.jp/research/nyugakusha_chyosasitsu/houkoku.html
# 必要なパッケージの読み込み
library(lazy.dnc)
# library(lazy.mat)
# library(lazy.tools)
#
# 圧縮されたテストデータ FakeShiganm_UTF8.zip の読み込み。
# lazy.dnc パッケージをインストールすると
# system.file( "FakeShiganm_UTF8.zip", package="lazy.dnc" )
# が作られる。
# この中には UTF-8 でコーディングされた FakeShiganm_UTF8.csv が入っている。
# 以下のコードは、この .zip ファイルを直接 read.csv で読み込むためのもの。
#
# 実際の利用場面では、圧縮されていない Shift-JISのファイルを
# 読み込む事になると思われるが、その場合は以下のようにすること:
#
# con <- file( "eex_shiganmR6A.csv", encoding="SJIS" )
# appl <- read.csv( con, stringsAsFactors=0, header=TRUE )
#
appl <- read.csv(
unz( system.file( "FakeShiganm_UTF8.zip", package="lazy.dnc" )
, "FakeShiganm_UTF8.csv" )
, stringsAsFactors=0, header=TRUE )
# データフレームのカラム名の変更
# 以下の共通フォーマット志願者マスターのカラム名を用いる。
#
cnameORG <- colnames(appl)
appl <- convert_colnames(appl)
# 必要とあれば KEY を付加する。
appl$KEY <- paste(appl$TestSite, appl$ID, sep="")
# 西暦の指定。
YearAD <- 2024
# 理科の 3 科目の分析:アンカーテスト無し。
Test <- c("物理", "化学", "生物")
AncTest <- NULL
res_Rika3_0 <- AMA( Test, AncTest, appl, YearAD )
# 理科の 3 科目の分析:アンカーテストは、国語、英語R、数学1
Test <- c("物理", "化学", "生物")
AncTest <- c("国語", "英語R","数学1")
res_Rika3_0A <- AMA( Test, AncTest, appl, YearAD )
# 理科の 3 科目の分析:アンカーテスト無し、2科目選択者のみ
Test <- c("物理", "化学", "生物")
AncTest <- NULL
res_Rika3_2 <- AMA( Test, AncTest, appl, YearAD, omit13=1 )
# 理科の 3 科目の分析:アンカーテストは、国語、英語R、数学1、
# 2科目選択者のみ
Test <- c("物理", "化学", "生物")
AncTest <- c("国語", "英語R","数学1")
res_Rika3_2A <- AMA( Test, AncTest, appl, YearAD, omit13=1 )
# 理科の 4 科目の分析
Test <- c("物理", "化学", "生物", "地学")
AncTest <- NULL
res_Rika4_0 <- AMA( Test, AncTest, appl, YearAD )
# 地歴の 3 科目の分析;アンカーテスト無し
Test <- c("日本史", "世界史", "地理")
AncTest <- NULL
res_Chireki_0 <- AMA( Test, AncTest, appl, YearAD )
# 地歴の 3 科目の分析;アンカーテスト有り
Test <- c("日本史", "世界史", "地理")
AncTest <- c("国語", "英語R","数学1")
res_Chireki_0A <- AMA( Test, AncTest, appl, YearAD )
# 公民の 3 科目の分析:アンカーテスト無し
Test <- c("現社", "倫理", "政経")
AncTest <- NULL
res_Komin_0 <- AMA( Test, AncTest, appl, YearAD )
# 公民の 3 科目の分析:アンカーテスト無し、30 人以下の集団は除く。
Test <- c("現社", "倫理", "政経")
AncTest <- NULL
res_Komin_1 <- AMA( Test, AncTest, appl, YearAD, minnobs=30 )
# 公民の 3 科目の分析:アンカーテスト有り
Test <- c("現社", "倫理", "政経")
AncTest <- c("国語", "英語R","数学1")
res_Komin_0A <- AMA( Test, AncTest, appl, YearAD )
# 公民の 4 科目の分析:アンカーテスト無し
Test <- c("現社", "倫理", "政経","倫政")
AncTest <- NULL
res_Komin4_0 <- AMA( Test, AncTest, appl, YearAD )