uIRT_JPH {lazy.irt}R Documentation

1次元の特性を仮定した場合の項目パラメタの推定

Description

EM アルゴリズムを用いた周辺最尤解を Varadhan and Roland (2007) の lazy.accell::iSQUAREM を用いて 加速する方法が使われている。
English help file: (uIRT)

Usage

uIRT( Uc, U=NULL, items=NULL, groupvar=NULL, idvar=NULL
, ncat=NULL, type=NULL, itemname=NULL, DinP=1
, param=NULL, msn=NULL, fixeditems=NULL, baseform=1
, theta=NULL, thd=NULL, estmu=0, estsigma=0
, npoints=21, thmin=-4, thmax=4
, maxiter=200, eps=1e-7, epsd=1e-6
, maxiter2=20, eps2=1e-4, nstrict=9, maxiter22=5
, minp1=1e-1, maxabsparam=20
, SQUAREM=3, nSQUAREM=1, minalpha=-999, maxalpha=-1
, always=1, reset1=0, reset2=1
, print=2, plot=0, smallP=0, debug=0 )

Arguments

Uc

n x nitems+1(idvar) or +2(groupvar) 項目反応データフレーム
Uc[i,j] は受験生 i の項目 j への項目反応で 0 <= Uc[i,j] <= ncat[j] を満たすもの。これを compressed data と呼ぶ。 (多グループ、多フォームの場合の BILOG-MG の expanded format 形式)

U

n x sum(ncat)+1(idvar) or +2(groupvar) 多値項目を one-hot に 展開した項目反応データフレーム (BILOG-MG の expanded format 形式)

items

Not Yet Available

groupvar

グループ名を表す U または Uc の変数名

idvar

受験者名を表す U または Uc の変数名

ncat

nitems x 1 項目のカテゴリ数からなるベクトル or NULL.

type

nitems x 1 項目タイプからなるベクトル:
"Bn" | "G" | "PN" | "P"
NULL の場合は全て P であると仮定する。

itemname

nitems x 1 項目名からなるベクトル or NULL.

DinP

= 0 ロジスティク関数に D=1.7 を用いる。

param

nitems x max(ncat) 項目パラメタデータフレーム
初期値もしくは固定値を含むもので、部分的に与える場合には param$namecolname(Uc) を利用してマッチされる。

msn

nG x 3 各グループの特性値の分布の母数 (mean, std, n) の初期値 からなる行列

fixeditems

項目パラメタの値を param データフレームの値に 固定すべき項目名または番号からなるベクトル

baseform

特性値の分布を固定すべきグループの番号で msn[baseform,] に固定される。
固定項目の項目パラメタの値は、baseform の集団における値であること。

theta

npoints x 1 周辺最尤解のための離散の特性値 theta の値

thd

NOT used.

estmu

= 1 各グループの特性値の分布の平均値の推定を行う。

estsigma

= 1 各グループの特性値の分布の標準偏差の推定を行う。

npoints

区間 [thmin, thmax] における theta の個数

thmin

特性値 theta の最小値

thmax

特性値 theta の最大値

maxiter

最大繰り返し数

eps

周辺対数尤度 lmlh の改善率の最大値を用いた収束判定基準

epsd

各群の特性値の分布を推定する場合の msn の 変化量の絶対値の最大値を用いた収束判定基準

maxiter2

EM アルゴリズムの初期の\の m-step で用いられる ordinal_regsmn の繰り返し数の上限

eps2

EM アルゴリズムの初期の m-step で用いられる eps

nstrict

EM アルゴリズムの初期の定義

maxiter22

EM アルゴリズムの後期の m-step で用いられる ordinal_regsmn の繰り返し数の上限

minp1

項目パラメタ p1 (識別力)の最小値

maxabsparam

項目パラメタの絶対値の最大値

SQUAREM

= 3 : See the help of iSQUAREM in lazy.accel package.

nSQUAREM

when to star iSQUAREM

minalpha

= -999 : See the help of iSQUAREM in lazy.accel package.

maxalpha

= -1 : See the help of iSQUAREM in lazy.accel package.

always

= 0 : See the help of iSQUAREM in lazy.accel package.

reset1

= 1 : See the help of iSQUAREM in lazy.accel package.

reset2

= 2 : See the help of iSQUAREM in lazy.accel package.

print

= 1 結果を表示する

plot

= 1 推定された特性値の分布のプロット

smallP

= icrf の最小値

debug

= 1 途中経過の出力

Details

Uc[i,j] は受験生 i の項目 j への反応。ただし、 0 <= Uc[i,j] <= ncat[j] である。これを compressed data と呼ぶ。
U は各項目反応を one-hot encoding で展開した n x sum(ncat) の データフレーム.

U が与えられた場合、項目名は itemname で与えられる。 もしくは paste("Q",1:nitems,sep="") となる。
ncat は必須である。

Uc が与えられた場合、項目名は itemname または colnames(Uc) で与えられる。 ncatUc から計算される。

M-step における項目パラメタの推定と特性値の分布の推定には ordinal_reg_JPH と smn_JPH が 用いられている。

また、EM アルゴリズムを加速するために Varadhan and Roland (2007) の SQUAREM を利用するがその詳細は lazy.accell::iSQUAREM を参照 されたい。

Note on the iSQUAREM:
Try always=1 with maxalpha=-1 or less first.
Changing to reset1=1 and reset2=2 or increasing nSQUAREM may help.
If it seems not working, use always=0 with maxalpha=1 or less.
Changing to reset1=1 and reset2=2 may help.
If all of the above fail, be patient and use SQUAREM=0.

Value

A list of:

param: 推定された項目パラメタデータフレーム
msn: 推定された各グループの特性値の分布のパラメタ
theta: 推定に利用された特性値 theta の離散点からなるベクトル
thd: 特性値の分布(多項分布の確率)からなるベクトル
converged 収束しているか否か
lmlh: 最大化された対数周辺尤度
aic and bic: AIC と BIC
iter_hist: 繰り返し計算の履歴
H: 項目反応データが所与の場合の特性値の事後分布
NN: 特性値の離散点ごとの受験者数
EAP: 特性値の事後平均
poststd: 特性値の事後標準偏差
id: 受験生の Id

References

Varadhan, R. and Roland, C.(2007) Simple and Globally Convergent Methods for Accelerating the Convergence of Any EM Algorithm. Scandinavian Journal of Statistics, Vol. 35: 335-353.

Examples

#
####
#### 実際の利用に際しては \code{maxiter} を増加させること。
####
#
#
# 2値項目のみの例: single group analysis from compressed data: Uc
# generate 3PLM data
set.seed(1701)
Uc <- gendataIRT( 1, paramB2, npoints=500, thdist="rnorm", compress=1 )$U
Uc <- as.data.frame(Uc)

# 2PLM analysis
itemtype <- rep("B2",nrow(paramB2))
res1 <- uIRT( Uc, type=itemtype, maxiter=200 )

# 3PLM analysis
itemtype <- rep("B3",nrow(paramB2))
res1 <- uIRT( Uc, type=itemtype, maxiter=200 )


# 多値項目の場合: single group analysis from compressed data: Uc

# generate data
set.seed(1701)
Uc <- gendataIRT( 1, paramS1, npoints=500, thdist="rnorm"
                    , compress=1 )$U
Uc <- as.data.frame(Uc)
itemtype <- paramS1$type
res1 <- uIRT( Uc, type=itemtype, maxiter=20 )

# convert compressed data to uncompressed data: U
temp=dummy_expand( Uc )
U=data.frame( temp$U )
ncat=temp$ncat
rm(temp)
res2 <- uIRT( U=U, ncat=ncat, type=itemtype, maxiter=20 )

# should be identical
Print(res1$param, res2$param)


# 項目パラメタの固定
paramF <- paramS1[2:3,]; fixeditems=c("Q2","Q3")
res1 <- uIRT( Uc, type=itemtype, maxiter=20, param=paramF
         , fixeditems=fixeditems )


# 多群(多グループ、多母集団)の例
set.seed(1701)
indata1 <- gendataIRT( 1, paramS1, npoints=500, thdist="rnorm"
                     , compress=1 )$U
indata1 <- as.data.frame(indata1,row.names=NULL)
indata1 <- data.frame(group="G1",indata1, stringsAsFactors=0
,row.names=NULL)
indata2 <- gendataIRT( 1, paramS1, npoints=500, thdist="rnorm", compress=1
                     , thmean=1, thstd=1 )$U
indata2 <- as.data.frame(indata2,row.names=NULL)
indata2 <- data.frame(group="G2",indata2, stringsAsFactors=0
,row.names=NULL)
indata12 <- rbind(indata1,indata2)
itemtype <- paramS1$type
# This will not converge: increase maxiter.
res1 <- uIRT( indata12, groupvar="group", type=itemtype, maxiter=10
, baseform=1, estmu=1, estsigma=1, minalpha=-2, SQUAREM=3, plot=1 )


# U 行列に試行数と各カテゴリへの反応数を与える場合の例
set.seed(1701)
npoints=2000
param=paramS2
nitems=nrow(param)
ncat=param$ncat
Nmat=matrix(sample(1:9,npoints*nitems,replace=1),npoints,nitems)
pmiss=0.2
for( j in 1:nitems ){
  Nmat[sample(1:npoints,npoints*pmiss),j]=0
}
temp <- gendataIRT( 1, param, Nmat=Nmat, npoints=npoints
                    , thdist="rnorm", compress=0 )
ncat=temp$ncat
UN <- as.data.frame(temp$U)
res3 <- uIRT( U=UN, ncat=ncat, maxiter=20 )


# @keywords internal

[Package lazy.irt version 0.1.6 ]