1.2 Verwendete Software

Um Code-Beispiele (und Output) übersichtlich zu halten werden einige R-Packages und Hilfsfunktionen verwendet, die hier kurz beschrieben werden um Code in späteren Abschnitten nachvollziehbar zu halten.
Siehe dazu auch Anhang ??.

1.2.1 R-Packages

Zur Reproduktion der Beispiele sind insbesondere die folgenden R packages notwendig, die durch den angegebenen Code installiert werden, sofern sie nicht bereits verfügbar sind:

# Data transformation / modelling
if (!("dplyr" %in% installed.packages())) install.packages("dplyr")
if (!("purrr" %in% installed.packages())) install.packages("purrr")
if (!("broom" %in% installed.packages())) install.packages("broom")

# Plots
if (!("ggplot2" %in% installed.packages())) install.packages("ggplot2")

# Modelling
if (!("lmtest" %in% installed.packages())) install.packages("lmtest")
if (!("msme" %in% installed.packages())) install.packages("msme")
if (!("VGAM" %in% installed.packages())) install.packages("VGAM")
if (!("gamlss" %in% installed.packages())) install.packages("gamlss")

# Data (and maybe modelling)
if (!("COUNT" %in% installed.packages())) install.packages("COUNT")

# Output formatting (for RMarkdown/pandoc markdown documents)
if (!("pander" %in% installed.packages())) install.packages("pander")
if (!("kableExtra" %in% installed.packages())) install.packages("kableExtra")

Siehe auch Anhang ?? zu verwendeten Packages.

1.2.2 Funktionen

Weiterhin werden einige Hilfsfunktionen im Laufe des Dokuments verwendet, die primär der Abkürzung und/oder der Formatierung des Outputs dienen:

#' Simple descriptive stats for count variables
#' @param x A count variable, presumed to be a non-negative integer.
#' @param digits Number of digits to round statistics to.
#' @return Nichts, nur print output.
describe_counts <- function(x, digits = 2) {
   require(kableExtra)
   
   tibble::tibble(
      n = length(x),
      missing = sum(is.na(x)),
      mean = round(mean(x, na.rm = TRUE), digits),
      var = round(var(x, na.rm = TRUE), digits),
      range = paste0("[", paste0(range(x, na.rm = TRUE), collapse = ", "), "]")
   ) %>%
   setNames(c("N", "Missing", "Mittelwert", "Varianz", "Range")) %>%
   kable(booktabs = TRUE, escape = FALSE, linesep = "") %>%
   kable_styling(position = "center", protect_latex = TRUE)
}
# Example usage
# Define random count variable...
x <- rpois(100, 5)

# ...with some missings
x[sample(100, 10)] <- NA

# A basic summary
describe_counts(x)
N Missing Mittelwert Varianz Range
100 10 5.12 5.57 [0, 10]

Die Pearson-Dispersionsstatistik (eingeführt in Abschnitt 2.2, Definition 2.5):

#' Pearson-Dispersion
#' @param model Ein `glm`-Objekt mit Methoden für `resid()` und `df.residual`-Komponente
#' @param type Entweder 'pearson' (default) oder 'deviance'.
#' @return Invisible: Liste mit chi^2-Statistik, Freiheitsgraden und Dispersion.
#'         Printed: Formatiertes output.
dispersion <- function(model, type = "pearson") {
  chisq <- sum(resid(model, type = type)^2)
  disp  <- chisq / model$df.residual
  
  invisible(list(chi2 = chisq, df = model$df.residual, dispersion = disp))
  cat(sprintf("X-squared(%i) = %.2f\n%s Dispersion = %.3f", model$df.residual,  
              chisq, chartr("pd", "PD", type), disp))
}

Der Lagrange Multiplier Test:

#' Lagrange Multiplier Test according to Hilbe (2014)
#' @param model A `glm` or similiar object.
#' @return Chi^2 statistic and corresponding p-value in a list of class "htest".
lagrange_test <- function(model) {
   mu     <- predict(model, type = "response")
   n_ybar <- length(model$y) * mean(mu)
   mu2    <- mean(mu^2) * length(model$y)
   chisq  <- (mu2 - n_ybar)^2 / (2 * mu2)
   names(chisq) <- "X-squared"
   pval   <- pchisq(chisq, df = 1, lower.tail = FALSE)
   df <- 1
   names(df) <- "df"
  
   rval <- list(
      statistic = chisq, parameter = df, p.value = pval,
      alternative = "Data is overdispersed", 
      method = "Lagrange Multiplier Test", 
      data.name = deparse(mod$call)
   )
   
   class(rval) <- "htest"
   rval
}