get_stanine {lazy.dnc}R Documentation

スタナインと分割点の計算

Description

スタナインと分割点の計算

Usage

get_stanine(
  score,
  freq = NULL,
  ncat = 9,
  boundCn = NULL,
  maxscore = 100,
  print = 0,
  plot = 0
)

Arguments

score

得点ベクトル (素点ベクトルまたは度数分 (score, freq) の得点)

freq

度数分布の度数または NULL

ncat

段階数 9, 10 または 11

boundCn

標準正規分布上の境界値(ncat を指定する場合は不要)

maxscore

満点

print

= 1 で要約を出力、= 2 で詳細を出力

plot

= 1 で変換表のグラフを出力

Details

入力に関して
' score が素データの場合は freq は不要。
(score, freq) の対で得点の度数分布を与えることも可能。

分割点に関して
boundCnncat=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 とする。 (これが分位点に相当する。)

Value

以下のものからなるリスト ncat 段階数 9 または 11
ctable 変換表(欠測得点の補間済)
bp 各段階の分割点等(欠測得点の補間済)
bp_raw 各段階の分点(欠測得点の補間無し)
stat 各段階の確率等

素データからの場合は以下を追加
ctable_raw 素データへスタナインを追加したもの

References

前川眞一 (2019) 得点の段階表示と Stanine 大学入試センター 研究開発部リサーチノート RN-19-01.

前川眞一 (2021) スタナインに関するメモ - 分位点差縮小法との関係と得点分布の再現に関して - 大学入試センター 研究開発部リサーチノート RN-21-06.

Examples


# データの生成
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"])


[Package lazy.dnc version 0.0.1 ]