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 C.
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 C 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.47 | 5.67 | [1, 14] |
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
}