**
****
**Bones: latent trait model

for multiple ordered

categorical responses

The concept of skeletal age (SA) arises from the idea that individuals mature at different rates: for any given chronological age (CA), the
*average
* SA in a sample of individuals should equal their CA, but with an inter-individual spread which reflects the differential rate of maturation. Roche et al (1975) have developed a model for predicting SA by calibrating 34 indicators (items) of skeletal maturity which may be observed in a radiograph. Each indicator is categorized with respect to its degree of maturity: 19 are binary items (i.e. 0 = immature or 1 = mature); 8 items have 3 grades (i.e. 0 = immature; 1 = partially mature; 2 = fully mature); 1 item has 4 ordered grades and the remaining 6 items have 5 ordered grades of maturity. Roche
*et al.
* calculated threshold parameters for the boundarys between grades for each indicator. For the binary items, there is a single threshold representing the CA at which 50% of individuals are mature for the indicator. Three-category items have 2 threshold parameters: the first corresponds to the CA at which 50% of individuals are either partially or fully mature for the indicator; the second is the CA at which 50% of individuals are fully mature. Four and five-category items have 3 and 4 threshold parameters respectively, which are interpreted in a similar manner to those for 3-category items. In addition, Roche
*et al.
*calculated a discriminability (slope) parameter for each item which reflects its rate of maturation. Part of this data is shown below. Columns 1--4 represent the threshold parameters (note the use of the missing value code NA to `fill in' the columns for items with fewer than 4 thresholds); column 5 is the discriminability parameter; column 6 gives the number of grades per item.

Thissen models the above data using the logistic function. For each item

logitQ

where d

The

BUGS

{

for (i in 1 : nChild) {

theta[i] ~ dnorm(0.0, 0.001)

for (j in 1 : nInd) {

# Cumulative probability of > grade k given theta

for (k in 1: ncat[j] - 1) {

logit(Q[i, j, k]) <- delta[j] * (theta[i] - gamma[j, k])

}

}

# Probability of observing grade k given theta

for (j in 1 : nInd) {

p[i, j, 1] <- 1 - Q[i, j, 1]

for (k in 2 : ncat[j] - 1) {

p[i, j, k] <- Q[i, j, k - 1] - Q[i, j, k]

}

p[i, j, ncat[j]] <- Q[i, j, ncat[j] - 1]

grade[i, j] ~ dcat(p[i, j, 1 : ncat[j]])

cumulative.grade[i, j] <- cumulative(grade[i, j], grade[i, j])

}

}

}

We note a couple of tricks used in the above code. Firstly, the variable p has been declared as a 3-way rectangular array with the size of the third dimension equal to the maximum number of possible grades (i.e.5) for all items (even though items 1--28 have fewer than 5 categories). The statement

grade[i, j] ~ dcat(p[i, j, 1 :ngrade[j]])

is then used to select the relevant elements of p[i,j, ] for item

Results

A 1000 update burn in followed by a further 10000 updates gave the parameter estimates