于鈴玉, 曹 蕾, 張婉婷, 李佳偉
(長春工業(yè)大學 數(shù)學與統(tǒng)計學院, 吉林 長春 130012)
對于項目反應模型,從連接函數(shù)角度來看,常用的連接函數(shù)有l(wèi)ogistic和probit;從參數(shù)角度來看,有單參數(shù)、雙參數(shù)和三參數(shù)的項目反應模型,并且它們均可以用logistic和probit連接函數(shù)。Leventhal Brian C等[1]、張雪[2]、張國紅[3]、Bolsinova M等[4]項目反應模型的連接函數(shù)為logistic連接函數(shù)。Lu J等[5]、Bolsinova M等[6]項目反應模型是probit連接函數(shù)。
文中首先介紹了單參數(shù)、雙參數(shù)和三參數(shù)的項目反應模型。其次,分別采用連接函數(shù)logistic和probit對單參數(shù)、雙參數(shù)和三參數(shù)的項目反應模型進行計算并比較。應用了DIC和LPML兩個模型方法,DIC小說明模型好,LPML大說明模型好。最后,在實證研究部分,通過計算每個模型的DIC值和LPML值得出結(jié)論,當連接函數(shù)為logistic的雙參數(shù)模型最好,因為DIC值最小,同時LPML值最大。由于貝葉斯計算項目反應模型存在一定困難,鏈特別長,所以針對實證研究的程序是由nimble包編寫的,nimble包的語法結(jié)構(gòu)類似于WinBUGS和JAGS,但是比WinBUGS和JAGS更靈活,因為編程時用C++代碼,所以運算速度快[7]。
被試者用i(i=1,2,…,N)表示,題目用j(j=1,2,…,J)表示。Yij表示第i個人對第j道題目的回答,Yij=1表示回答正確;Yij=0表示回答錯誤。假定θi為第i個人的能力參數(shù),用單參數(shù)的logistic連接函數(shù)表示第i個人答對第j個題目的概率為[8]
用雙參數(shù)的logistic連接函數(shù)表示第i個人答對第j個題目的概率為
pij=P(Yij=1|θi,aj,bj)=
用三參數(shù)的logistic連接函數(shù)表示第i個人答對第j個題目的概率為
pij=P(Yij=1|θi,aj,bj,cj)=
式中:aj、bj、cj----分別表示項目j的區(qū)分度參數(shù)、難度參數(shù)和偽猜測參數(shù)。
假定aj(j=1,2,…,J)相互獨立,bj(j=1,2,…,J),cj(j=1,2,…,J)相互獨立,且假設它們的先驗logaj~N(0,1),bj~N(0,1),cj~Beta(4,12)。
此外,還可用單參數(shù)的probit連接函數(shù)表示第i個人答對第j個題目的概率為[9]
pij=P(Yij=1|θi,bj)=Φ(θi-bj),
用雙參數(shù)的probit連接函數(shù)表示第i個人答對第j個題目的概率為
pij=P(Yij=1|θi,aj,bj)=
Φ(ajθi-bj),
用三參數(shù)的probit連接函數(shù)來表示第i個人答對第j個題目的概率為
pij=P(Yij=1|θi,aj,bj,cj)=
cj+(1-cj)Φ(ajθi-bj),
式中:Φ----正態(tài)累積分布函數(shù)。
對于單參數(shù)的連接函數(shù)logistic模型,假設yi=(yi,1,yi,2,…,yi,J)′,第i個人反應部分的似然函數(shù)為
雙參數(shù)的連接函數(shù)logistic模型的似然函數(shù)為
(1)
三參數(shù)的連接函數(shù)logistic模型的似然函數(shù)為
f(yi|θi)=cj+
當單參數(shù)的連接函數(shù)為probit模型時,第i個人反應部分的似然函數(shù)為
雙參數(shù)的連接函數(shù)為probit模型的似然函數(shù)
三參數(shù)的連接函數(shù)為probit模型的似然函數(shù)
f(yi|θi)=cj+
根據(jù)Linden W[10]的思想進行局部獨立性假設,令
γ=(a1,a2,…,aJ;b1,b2,…,bJ;θ1,θ2,…,θN)′。
我們以連接函數(shù)為logistic的雙參數(shù)項目反應模型為例進行計算,利用式(1)得到N個人的聯(lián)合似然函數(shù)為
γ的后驗分布為
(2)
式中:m(y)----正則化常數(shù)(normalizing constant),
π(aj)----aj的先驗;
π(bj)----bj的先驗;
π(θi)----θi的先驗。
它們具體的先驗在前面部分已給出。
文中用到的模型選擇方法為DIC準則和LPML。由于DIC可以在多元模型的固定或隨機部分不同的模型之間進行選擇,而不必指定模型參數(shù)的數(shù)量。DIC是由Spiegelhalter D J等[11]提出的,它是一種可以用來模型擬合以及模型復雜性測量的方法,DIC準則是在偏差的后驗分布基礎上建立的,其函數(shù)表達式為:
PD----有效參數(shù)的個數(shù);
另一個評估模型相對擬合效果的方法是基于Chen M H等[13]、Gelfand A E等[14]的思想,通過采用條件預測縱坐標(Conditional Predictive Ordinate, CPO)指標計算LPML,設
則CPO的蒙特卡羅估計為如下形式
式中:r----MCMC算法的第r次迭代,r=1,2,…,R;
R----總迭代次數(shù)。
LPML值越大,表明所選擇的模型效果越好。
采用國際學生評估項目2015年數(shù)據(jù)(PISA)。數(shù)據(jù)中有548(N=548)個學生,每個人回答16(J=16)道題的考試,計算機會自動記錄并存儲被試者答題正確與否。基于單參數(shù)、雙參數(shù)和三參數(shù)的項目反應模型,進行30 000次迭代,燒掉前25 000次。被試者答對題目正確與否的部分數(shù)據(jù)見表1。
表1 被試者答對題目正確與否的數(shù)據(jù)
res6 <- read.csv("res61.csv", header=FALSE)
res6=as.matrix(res6)
N=length(res6[,1])
J=length(res6[1,])
nitem=rep(J,N)
cuni=cumsum(nitem)
id=cuni-nitem
item_index=matrix(,N,J)
for (i in 1:J)
{item_index[,i]=i}
y=rep(0,J*N)
for (i in 1:N){
y[((i-1)*J+1):(i*J)]=res6[i,]
}
velocity=rep(1,N*J)
irt<-nimbleCode({
for (j in 1:J){
for(i in 1:N){
y[id[i]+j]~dbern(prob[id[i]+j])
prob[id[i]+j]<-c[j]*velocity[id[i]+j]+(1-c[j]*velocity[id[i]+j])*(exp(a[j]*velocity[id[i]+j]*theta[i]-b[j]*velocity[id[i]+j])/(1+exp(a[j]*velocity[id[i]+j]*theta[i]-b[j]*velocity[id[i]+j])))
}
a[j]~dlnorm(0, sdlog=1)
b[j]~dnorm(0, sd=1)
c[j]~dbeta(4,shape1 = 12)
}
for (i in 1:N){
theta[i]~dnorm(0,1)
}
})
data <- list( y =y)
constants <- list(J=J,N = N,id=id,nitem=nitem,velocity=velocity)
inits <- list(theta=rep(0,N),a=rep(0.5,J),b=rep(0,J),c=rep(0.1,J))
jointmodel <- nimbleModel(irt,
data = data,
constants = constants,
inits = inits,
check = FALSE)
mcmc.out2<- nimbleMCMC(model = jointmodel,
niter = 30000, nchains = 1, nburnin =25000,thin=1,monitors = c('a','b','c','theta'), summary = TRUE,WAIC = TRUE,setSeed = 10)
第一部分程序中的N表示考生人數(shù),J表示題目數(shù)量,為了讓模型的維度一致,方便編程,所以引入了velocity[id[i]+j],應用nimble包,先寫出三參數(shù)logistic模型,然后給出參數(shù)服從的分布以及初值,其中,項目區(qū)分度參數(shù)logaj~N(0,1),猜測參數(shù)bj~N(0,1),迭代了30 000次,燒掉了前25 000次。
linsam=read.csv(file='res_only_logistic_sam_lin1.csv')[,-1]
loglisampler=rep(0,nusample)
prob<- cij+(1-cij)*(exp(aijtheta-bij)/(1+exp(aijtheta-bij)))
coran=which(y==1)
loglikelir= sum(log(prob[coran]))+sum(log(1-prob)[-coran])
loglikelir=(-2)*loglikelir
bigtheta3= bigzeta3=rep(0,cuni[N])
cpoi=matrix(rep(0,N*5000),5000)
probb=matrix(rep(0,nusample*cuni[N]),nusample)
loglisampler=rep(0,nusample)
for (k in 1:5000){
aj<-as.numeric(linsam[k,1:16])
bj<-as.numeric(linsam[k,17:32])
cj<-as.numeric(linsam[k,33:48])
theta<- as.numeric(linsam[k,49:(49+N-1)])
bij=rep(bj,N)
aijtheta=c(t(outer(theta,aj,FUN="*")))
cij=rep(cj,N)
for (qq in 1:(N-1)){
beg1=cuni[qq]+1
end1=cuni[qq+1]
bigtheta3[beg1:end1]=rep(theta[qq+1],nitem[qq+1])
}
beg1=1
end1=nitem[1]
bigtheta3[beg1:end1]=rep(theta[1],nitem[1])
probb[k,]<- cij+(1-cij)*(exp(aijtheta-bij)/(1+exp(aijtheta-bij)))
for (i in 1:(N-1))
{ beg1=cuni[i]+1
end1=cuni[i+1]
aa=which(y[beg1:end1]==1)
bb=probb[k,beg1:end1]
cpoi[k,i+1]=1/(prod(bb[aa])*prod(1-bb[-aa]))
}
beg1=1
end1=nitem[1]
aa=which(y[beg1:end1]==1)
bb=probb[k,beg1:end1]
cpoi[k,1]=1/(prod(bb[aa])*prod(1-bb[-aa]))
loglisampler[k]= sum(log(probb[k,][coran]))+sum(log(1-probb[k,])[-coran]) }#k
loglisampler=(-2)*loglisampler
EDEr1=mean(loglisampler);
PDICr1=EDEr1-loglikelir
DICr1=loglikelir+2*PDICr1
LPML<- sum(log(1/apply(cpoi,2,mean)))
第二部分程序是為了計算三參數(shù)logistic模型的DIC、PD和LPML值,linsam是讀取第一部分產(chǎn)生的項目反應模型的MCMC,loglikelir是計算這個模型的似然函數(shù),最后通過for循環(huán)計算DIC、PD和LPML值。
不同情況下的DIC、PD和LPML值見表2。
表2 不同情況下的DIC、PD和LPML值
表中通過比較這幾種情況的DIC值和LPML值發(fā)現(xiàn),連接函數(shù)為logistic的雙參數(shù)項目反應模型的DIC值最小,LPML值最大,模型表現(xiàn)最好。單參數(shù)的項目反應模型的DIC值都較大,模型表現(xiàn)不好。三參數(shù)的項目反應模型比雙參數(shù)項目反應模型增加了偽猜測參數(shù),正常情況下,DIC值應該增加32左右,但結(jié)果增加了100多,所以增加偽猜測參數(shù)的項目反應模型表現(xiàn)也不好。
基于國際學生評估項目2015年數(shù)據(jù)(PISA),采用單參數(shù)、雙參數(shù)和三參數(shù)的項目反應模型分別進行建模,同時在單參數(shù)模型、雙參數(shù)模型和三參數(shù)模型下,分別考慮logistic連接函數(shù)和probit連接函數(shù),通過計算6種模型的DIC值和LPML值得出結(jié)論,連接函數(shù)為logistic雙參數(shù)項目反應模型的DIC值最小,并且LPML值最大,此模型表現(xiàn)最好。