get_stanine {lazy.dnc} | R Documentation |
スタナインと分割点の計算
get_stanine(
score,
freq = NULL,
ncat = 9,
boundCn = NULL,
maxscore = 100,
print = 0,
plot = 0
)
score |
得点ベクトル (素点ベクトルまたは度数分 (score, freq) の得点) |
freq |
度数分布の度数または NULL |
ncat |
段階数 9, 10 または 11 |
boundCn |
標準正規分布上の境界値(ncat を指定する場合は不要) |
maxscore |
満点 |
print |
= 1 で要約を出力、= 2 で詳細を出力 |
plot |
= 1 で変換表のグラフを出力 |
入力に関して
'
score
が素データの場合は freq は不要。
(score, freq)
の対で得点の度数分布を与えることも可能。
分割点に関して
boundCn
は ncat=9
すなわち、スタナインの場合には
-1.75 -1.25 -0.75 -0.25 0.25 0.75 1.25 1.75
ncat=10
の場合には、2.25 が加わり、
ncat=11
の場合には、-2.25 も加わる。
アルゴリズムに関して
この関数は、cdf を利用して得点を段階化する方法を用いている。
分割点の確率から分位点を計算し、それで得点を分割する方式では無い。
score
の cdf の分割点(確率)ならびにそれを利用したスタナインは
以下のようにして求められる。
# boundCn に対応する確率 cumP=round(pnorm(boundCn),2) # cut 関数による cdf の切断 s9 <- as.numeric( cut( cdf, c(-99,cumP,1),labels=1:ncat ) )
スタナインが計算されたら、その各段階ごとに、素得点 の最大値と最小値を
もとめて、それらを各段階の分割点 bp
とする。
(これが分位点に相当する。)
以下のものからなるリスト
ncat 段階数 9 または 11
ctable 変換表(欠測得点の補間済)
bp 各段階の分割点等(欠測得点の補間済)
bp_raw 各段階の分点(欠測得点の補間無し)
stat 各段階の確率等
素データからの場合は以下を追加
ctable_raw 素データへスタナインを追加したもの
前川眞一 (2019) 得点の段階表示と Stanine 大学入試センター 研究開発部リサーチノート RN-19-01.
前川眞一 (2021) スタナインに関するメモ - 分位点差縮小法との関係と得点分布の再現に関して - 大学入試センター 研究開発部リサーチノート RN-21-06.
# データの生成
set.seed(1701)
n <- 100
# 満点の指定
# maxscore <- 200
maxscore <- 100
# 正規分布乱数
score_raw <- round( rnorm( n,maxscore/2, 0.133*maxscore ) )
# データを区間 [0,maxscore] に入れる。
if( any(score_raw < 0 | score_raw > maxscore) )
score_raw <- score_raw[-which(score_raw < 0 | score_raw > maxscore)]
# 欠測得点の生成
locz <- sample(0:maxscore,10, replace=FALSE)
score_raw <- score_raw[-locz]
# n に足りない部分を一様乱数で補う。
if( length(score_raw) < n )
score_raw <- c( score_raw, round( runif(n-length(score_raw)
, 0, maxscore) ) )
# 度数分布の計算
freq <- table(score_raw)
score <- as.numeric(names(freq))
freq <- as.numeric(unclass(freq))
# 度数分布の欠測部分の補完
score0 <- numeric(maxscore+1)
score0[score+1] <- score
freq0 <- numeric(maxscore+1)
freq0[score+1] <- freq
freq <- freq0
score <- score0
# 段階数
ncat <- 9
# 素データからの計算
st2 <- get_stanine( score_raw, ncat=ncat, print=2, plot=0 )
bp2 <- st2$bp_raw
ctable2 <- st2$ctable
# 度数分布からの計算
st1 <- get_stanine( score, freq, ncat=ncat, print=2, plot=0 )
bp1 <- st1$bp_raw
ctable1 <- st1$ctable
# 結果の比較(同一になるはず)
# 度数分布より
print(st1$bp)
print(st1$bp_raw)
print(st1$stat)
# 素データより
print(st2$bp)
print(st2$bp_raw)
print(st2$stat)
# 個人の値
head(st2$ctable_raw)
tail(st2$ctable_raw)
freq_raw <- table(st2$ctable_raw[,"s9"])
cbind(freq_raw, freq_freq=st1$stat[,"freq_st9"])