Learn R Programming

edstan (version 1.0.6)

irt_stan: Estimate an item response model with Stan

Description

Estimate an item response model with Stan

Usage

irt_stan(data_list, model = "", ...)

Value

A stanfit-class object.

Arguments

data_list

A Stan data list created with irt_data.

model

The file name for one of the provided .stan files, or alternatively, a user-created .stan file that accepts data_list as input data. The ".stan" file extension may be omitted. Defaults to either "rasch_latent_reg.stan" or "pcm_latent_reg.stan".

...

Additional options passed to stan. The usual choices are iter for the number of iterations and chains for the number of chains.

Details

The following table lists the models inlcuded in edstan along with the associated .stan files. The file names are given as the model argument.

ModelFile
Raschrasch_latent_reg.stan
Partial creditpcm_latent_reg.stan
Rating Scalersm_latent_reg.stan
Two-parameter logistic2pl_latent_reg.stan
Generalized partial creditgpcm_latent_reg.stan
Generalized rating Scalegrsm_latent_reg.stan

Three simplified models are also available: rasch_simple.stan, pcm_simple.stan, rsm_simple.stan. These are (respectively) the Rasch, partial credit, and rating scale models omitting the latent regression. There is no reason to use these instead of the models listed above, given that the above models allow for rather than require the inclusion of covariates for a latent regression. Instead, the purpose of the simplified models is to provide a straightforward starting point researchers who wish to craft their own Stan models.

See Also

See stan, for which this function is a wrapper, for additional options. See irt_data and labelled_integer for functions that facilitate creating a suitable data_list. See print_irt_stan and print.stanfit for ways of getting tables summarizing parameter posteriors.

Examples

Run this code
# List the Stan models included in edstan
folder <- system.file("extdata", package = "edstan")
dir(folder, "\\.stan$")

# List the contents of one of the .stan files
rasch_file <- system.file("extdata/rasch_latent_reg.stan",
                          package = "edstan")
cat(readLines(rasch_file), sep = "\n")

if (FALSE) {
# Fit the Rasch and 2PL models on wide-form data with a latent regression

spelling_list <- irt_data(response_matrix = spelling[, 2:5],
                          covariates = spelling[, "male", drop = FALSE],
                          formula = ~ 1 + male)

rasch_fit <- irt_stan(spelling_list, iter = 300, chains = 4)
print_irt_stan(rasch_fit, spelling_list)

twopl_fit <- irt_stan(spelling_list, model = "2pl_latent_reg.stan",
                      iter = 300, chains = 4)
print_irt_stan(twopl_fit, spelling_list)


# Fit the rating scale and partial credit models without a latent regression

agg_list_1 <- irt_data(y = aggression$poly,
                       ii = labelled_integer(aggression$description),
                       jj = aggression$person)

fit_rsm <- irt_stan(agg_list_1, model = "rsm_latent_reg.stan",
                    iter = 300, chains = 4)
print_irt_stan(fit_rsm, agg_list_1)

fit_pcm <- irt_stan(agg_list_1, model = "pcm_latent_reg.stan",
                    iter = 300, chains = 4)
print_irt_stan(fit_pcm, agg_list_1)


# Fit the generalized rating scale and partial credit models including
# a latent regression

agg_list_2 <- irt_data(y = aggression$poly,
                       ii = labelled_integer(aggression$description),
                       jj = aggression$person,
                       covariates = aggression[, c("male", "anger")],
                       formula = ~ 1 + male*anger)

fit_grsm <- irt_stan(agg_list_2, model = "grsm_latent_reg.stan",
                     iter = 300, chains = 4)
print_irt_stan(fit_grsm, agg_list_2)

fit_gpcm <- irt_stan(agg_list_2, model = "gpcm_latent_reg.stan",
                     iter = 300, chains = 4)
print_irt_stan(fit_grsm, agg_list_2)
}

Run the code above in your browser using DataLab