In some cases users might like to return the probability of a response on a given item. For example, given a fixed set of item parameters, return the probabilities at varying levels of theta to produce custom probability plots.
The probability of responding correctly to a dichotomous item under Rasch-like models (e.g., 1PL models) is often expressed as:
\[\begin{equation} p(x_{ni} = 1)=\frac{exp(\theta_{n} - \delta_{i})}{1 + (\theta_{n} - \delta_{i})} (\#eq:slm) \end{equation}\]
Imagine the item parameters of a single item represented as:
library(conquestr)
<- matrix(c(0, 0, 0, 1, 1, 0), ncol =3, byrow=TRUE)
myItemcolnames(myItem)<- c("k", "d", "t")
print(myItem)
#> k d t
#> [1,] 0 0 0
#> [2,] 1 1 0
Then the probability of scoring 0 and 1 on this item, at = 0.5:
<- simplep(0.5, myItem)
myProbsprint(myProbs)
#> [,1]
#> [1,] 0.6224593
#> [2,] 0.3775407
A simple ICC can be drawn:
<- list()
myProbsList<- seq(-4, 4, by = 0.1)
myThetaRangefor(i in seq(myThetaRange)){
<- pX(x = 1, probs = simplep(myThetaRange[i], myItem))
myProbsList[[i]]
}plot(unlist(myProbsList))
In the case of polytomously scored items, the probability model can be generalised:
\[\begin{equation} p(X_{ni} = x)=\frac{exp\sum\limits_{k=0}^{x}(\theta_{n} - (\delta_{i} + \tau_{ik}))}{\sum\limits_{j=0}^{m}exp(\sum\limits_{k=0}^{j} (\theta_{n} - (\delta_{i} + \tau_{ik})))} (\#eq:pcm) \end{equation}\]
An item can them be represented such that:
library(conquestr)
<- matrix(c(0, 0, 0, 1, 1, -0.2, 2, 1, 0.2), ncol =3, byrow=TRUE)
myItemcolnames(myItem)<- c("k", "d", "t")
print(myItem)
#> k d t
#> [1,] 0 0 0.0
#> [2,] 1 1 -0.2
#> [3,] 2 1 0.2
Then the probability of scoring 0, 1 and 2 on this item, at = 0.5:
<- simplep(0.5, myItem)
myProbsprint(myProbs)
#> [,1]
#> [1,] 0.4742264
#> [2,] 0.3513155
#> [3,] 0.1744581
A simple ICC can be drawn:
<- list()
myProbsList<- seq(-4, 4, by = 0.1)
myThetaRangefor(i in seq(myThetaRange)){
<- simplep(myThetaRange[i], myItem)
myProbsList[[i]]
}<- (matrix(unlist(myProbsList), ncol = 3, byrow = TRUE))
myProbsplot(myThetaRange, myProbs[,1])
points(myThetaRange, myProbs[,2])
points(myThetaRange, myProbs[,3])
abline(v = c(myItem[2, 2], sum(myItem[2, 2:3]), sum(myItem[3, 2:3])))
The expected score for the an item can be calculated at a given value of theta. Taking an aribitary set of items, it is possible therefor to calculate the test expected score.
library(conquestr)
<- list()
myItems1]]<- matrix(c(0, 0, 0, 1, 1, -0.2, 2, 1, 0.2), ncol =3, byrow=TRUE)
myItems[[2]]<- matrix(c(0, 0, 0, 1, -1, -0.4, 2, -1, 0.4), ncol =3, byrow=TRUE)
myItems[[3]]<- matrix(c(0, 0, 0, 1, 1.25, -0.6, 2, 1.25, 0.6), ncol =3, byrow=TRUE)
myItems[[4]]<- matrix(c(0, 0, 0, 1, 2, 0.2, 2, 2, -0.2), ncol =3, byrow=TRUE)
myItems[[5]]<- matrix(c(0, 0, 0, 1, -2.5, -0.2, 2, -2.5, 0.2), ncol =3, byrow=TRUE)
myItems[[for(i in seq(myItems)){
colnames(myItems[[i]])<- c("k", "d", "t")
}print(myItems)
#> [[1]]
#> k d t
#> [1,] 0 0 0.0
#> [2,] 1 1 -0.2
#> [3,] 2 1 0.2
#>
#> [[2]]
#> k d t
#> [1,] 0 0 0.0
#> [2,] 1 -1 -0.4
#> [3,] 2 -1 0.4
#>
#> [[3]]
#> k d t
#> [1,] 0 0.00 0.0
#> [2,] 1 1.25 -0.6
#> [3,] 2 1.25 0.6
#>
#> [[4]]
#> k d t
#> [1,] 0 0 0.0
#> [2,] 1 2 0.2
#> [3,] 2 2 -0.2
#>
#> [[5]]
#> k d t
#> [1,] 0 0.0 0.0
#> [2,] 1 -2.5 -0.2
#> [3,] 2 -2.5 0.2
<- list()
expectedResfor(i in seq(myThetaRange)){
<- 0
tmpExpfor(j in seq(myItems)){
<- simplef(myThetaRange[i], myItems[[j]])
tmpE<- tmpExp + tmpE
tmpExp
}<- tmpExp
expectedRes[[i]]
}
plot(myThetaRange, unlist(expectedRes))