uIRT_JPH {lazy.irt} | R Documentation |
EM アルゴリズムを用いた周辺最尤解を
Varadhan and Roland (2007) の lazy.accell::iSQUAREM
を用いて
加速する方法が使われている。
English help file: (uIRT)
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 )
Uc |
n x nitems+1(idvar) or +2(groupvar) 項目反応データフレーム |
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 項目タイプからなるベクトル: |
itemname |
nitems x 1 項目名からなるベクトル or NULL. |
DinP |
= 0 ロジスティク関数に D=1.7 を用いる。 |
param |
nitems x max(ncat) 項目パラメタデータフレーム |
msn |
nG x 3 各グループの特性値の分布の母数 (mean, std, n) の初期値 からなる行列 |
fixeditems |
項目パラメタの値を |
baseform |
特性値の分布を固定すべきグループの番号で msn[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 |
各群の特性値の分布を推定する場合の |
maxiter2 |
EM アルゴリズムの初期の\の m-step で用いられる
|
eps2 |
EM アルゴリズムの初期の m-step で用いられる eps |
nstrict |
EM アルゴリズムの初期の定義 |
maxiter22 |
EM アルゴリズムの後期の m-step で用いられる
|
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 途中経過の出力 |
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)
で与えられる。
ncat
は Uc
から計算される。
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.
A list of:
param: 推定された項目パラメタデータフレーム msn: 推定された各グループの特性値の分布のパラメタ theta: 推定に利用された特性値 theta の離散点からなるベクトル thd: 特性値の分布(多項分布の確率)からなるベクトル converged 収束しているか否か lmlh: 最大化された対数周辺尤度 aic and bic: AIC と BIC iter_hist: 繰り返し計算の履歴 H: 項目反応データが所与の場合の特性値の事後分布 NN: 特性値の離散点ごとの受験者数 EAP: 特性値の事後平均 poststd: 特性値の事後標準偏差 id: 受験生の Id
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.
#
####
#### 実際の利用に際しては \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