Skip to content


Switch branches/tags

Latest commit

changed a URL and updated many manuals tests from \dontrun to \donttest

Git stats


Failed to load latest commit information.
Latest commit message
Commit time

stm: An R Package for the Structural Topic Model


Vignette: Here

Authors: Molly Roberts, Brandon Stewart and Dustin Tingley

Please email all comments/questions to bms4 [AT]

CRAN Version Build Status Downloads Total Downloads


This repository will host the development version of the package. It is also available on CRAN. It implements variational EM algorithms for estimating topic models with covariates in a framework we call the Structural Topic Model (stm).

The package currently includes functionality to:

  • ingest and manipulate text data
  • estimate Structural Topic Models
  • calculate covariate effects on latent topics with uncertainty
  • estimate a graph of topic correlations
  • create all the plots used in our various papers

Other Resources

Have a large text corpus or need a language we don't provide support for? See our sister project txtorg

See other materials at

Installation Instructions

Assuming you already have R installed (if not see, to install the CRAN version, simply use:


You can install the most recent development version using the devtools package. First you have to install devtools using the following code. Note that you only have to do this once

if(!require(devtools)) install.packages("devtools")

Then you can load the package and use the function install_github


Note that this will install all the packages suggested and required to run our package. It may take a few minutes the first time, but this only needs to be done on the first use. In the future you can update to the most recent development version using the same code.

Getting Started

See the vignette for several example analyses. The main function to estimate the model is stm() but there are a host of other useful functions. If you have your documents already converted to term-document matrices you can ingest them using readCorpus(). If you just have raw texts you will want to start with textProcessor().

To Developers

Up until September 2016 we've primarily been doing development in private in a separate github repository. As we have gotten several great pull requests from the community, we are in the process of shifting development over here- primarily in the development branch.