## ----setup, include = FALSE--------------------------------------------------- knitr::opts_chunk$set(collapse = TRUE, comment = "#>", fig.width = 6, fig.height = 4, message = FALSE) has <- function(p) requireNamespace(p, quietly = TRUE) ## ----fit---------------------------------------------------------------------- library(iop) data(bp) m <- iop(violence ~ loggdppc + parliament + disaster + major_oil + major_primary | loggdppc + parliament + disaster + major_oil + major_primary, data = bp, inflate = "bottom") ## ----predict-types------------------------------------------------------------ head(predict(m), 3) head(predict(m, type = "class"), 3) head(predict(m, type = "prob_outcome"), 3) summary(predict(m, type = "regime")) ## ----posterior---------------------------------------------------------------- post <- predict(m, type = "posterior") summary(post[bp$violence == "none"]) ## ----zeros-------------------------------------------------------------------- z <- predict(m, type = "zeros") head(cbind(z, total = rowSums(z), P_none = predict(m)[, "none"]), 3) colMeans(z) ## ----zeros-fd----------------------------------------------------------------- first_difference(m, "loggdppc", from = 7, to = 9, decompose = TRUE) ## ----newdata------------------------------------------------------------------ nd <- data.frame(loggdppc = c(6, 8, 10), parliament = 0, disaster = 0, major_oil = 0, major_primary = 0) p <- predict(m, newdata = nd, se.fit = TRUE) round(p$fit, 3) round(p$se.fit, 3) predict(m, newdata = nd, type = "inflated", se.fit = TRUE) ## ----fd----------------------------------------------------------------------- first_difference(m, "loggdppc", from = 7, to = 9) ## ----fd-stage----------------------------------------------------------------- first_difference(m, "loggdppc", from = 7, to = 9, stage = "outcome") first_difference(m, "loggdppc", from = 7, to = 9, stage = "inflation") ## ----fd-avg------------------------------------------------------------------- first_difference(m, "loggdppc", from = 7, to = 9, average = TRUE) first_difference(m, "major_oil", from = 0, to = 1, ci = "sim", R = 500) ## ----fd-plot------------------------------------------------------------------ fd <- first_difference(m, "disaster", from = 0, to = 3, newdata = data.frame(loggdppc = 8, parliament = 1, disaster = 0, major_oil = 0, major_primary = 0)) plot(fd, main = "Three disasters vs none, parliamentary democracy at log GDP 8") ## ----ame, fig.height = 5------------------------------------------------------ a <- ame(m, vars = c("loggdppc", "disaster", "major_oil")) a plot(a) ## ----ame-stage---------------------------------------------------------------- ame(m, vars = "loggdppc", stage = "inflation") ## ----dpqr--------------------------------------------------------------------- diord(0:2, eta = 0.3, tau = c(-0.5, 0.8), a = 0.4, k = 0) # P(y = j) at one profile piord("repression", object = m, newdata = bp[1:3, ]) # P(y <= repression) qiord(0.5, object = m, newdata = bp[1:3, ]) # median category table(riord(nrow(bp), object = m)) # one draw per observation ## ----broom, eval = has("broom")----------------------------------------------- broom::tidy(m, conf.int = TRUE)[1:4, ] broom::glance(m) ## ----texreg, eval = has("texreg")--------------------------------------------- m_op <- oprobit(violence ~ loggdppc + parliament + disaster + major_oil + major_primary, data = bp) texreg::screenreg(list(m_op, m), custom.model.names = c("Ordered probit", "ZiOP"), include.cutpoints = FALSE, digits = 3) ## ----modelsummary, eval = has("modelsummary") && has("broom"), results = "asis"---- modelsummary::modelsummary(list("Ordered probit" = m_op, "ZiOP" = m), output = "markdown", stars = TRUE, gof_map = c("nobs", "logLik", "AIC", "BIC")) ## ----classification----------------------------------------------------------- m_op <- oprobit(violence ~ loggdppc + parliament + disaster + major_oil + major_primary, data = bp) classification(m) c(`ordered probit` = classification(m_op)$brier, ZiOP = classification(m)$brier) ## ----dharma, eval = has("DHARMa")--------------------------------------------- sims <- simulate(m, nsim = 250) res <- DHARMa::createDHARMa(simulatedResponse = as.matrix(sims), observedResponse = m$y, fittedPredictedResponse = as.numeric(fitted(m) %*% (0:2)), integerResponse = TRUE) plot(res)