Data Science, Machine Learning und KI
Kontakt

Die Kreuzvalidierung ist eine weit verbreitete Technik zur Bewertung der Generalisierbarkeit eines Machine-Learning-Modells. Hier bei STATWORX diskutieren wir oft über Evaluationsmetriken und darüber, wie wir sie effizient in unseren Data-Science-Workflow einbauen können. In diesem Blog-Beitrag stelle ich die Grundlagen der Kreuzvalidierung vor, gebe Hinweise zur Optimierung ihrer Parameter und zeige, wie man sie auf effiziente Weise von Grund auf selbst erstellen kann.

Grundlagen der Modellbewertung und Kreuzvalidierung

Die Kreuzvalidierung ist eine Technik zur Evaluation von Machine Learning-Modellen. Die zentrale Intuition hinter dieser Modellevaluierung besteht darin, herauszufinden, ob das trainierte Modell verallgemeinerbar ist, d. h., ob die Vorhersagekraft, die wir beim Training beobachten, auch bei ungesehenen Daten zu erwarten ist. Wir könnten das Modell direkt mit den Daten füttern, für die es entwickelt wurde, d. h. die es vorhersagen soll. Aber auch dann gibt es für uns keine Möglichkeit, zu wissen oder zu überprüfen, ob die Vorhersagen zutreffend sind.

Natürlich möchten wir eine Art Benchmark der Generalisierbarkeit unseres Modells haben, bevor wir es in die Produktion überführen. Daher besteht die Idee darin, die vorhandenen Trainingsdaten in einen tatsächlichen Trainingsdatensatz und einen Holdout-Testdatensatz aufzuteilen, die nicht zum Training verwendet wird und als „ungesehene“ Daten dient. Da dieser Testdatensatz Teil der ursprünglichen Trainingsdaten ist, haben wir eine ganze Reihe von „richtigen“ Ergebnissen, die wir überprüfen können. Zur Bewertung der Modellleistung kann dann eine geeignete Fehlermetrik wie der Root Mean Squared Error (RMSE) oder der Mean Absolute Percentage Error (MAPE) verwendet werden. Bei der Wahl der geeigneten Bewertungsmetrik ist jedoch Vorsicht geboten, da es Tücken gibt (wie in diesem Blogbeitrag meines Kollegen Jan beschrieben).

Bei vielen Algorithmen für Machine Learning können Hyperparameter angegeben werden, z. B. die Anzahl der Bäume in einem Random Forest. Die Kreuzvalidierung kann auch zum Tuning der Hyperparameter eines Modells genutzt werden, indem der Generalisierungsfehler verschiedener Modellspezifikationen verglichen wird.

Allgemeine Ansätze zur Modellevaluation

Es gibt Dutzende Techniken zur Modellevaluierung, die immer einen Kompromiss zwischen Varianz, Verzerrung und Rechenzeit darstellen. Bei der Bewertung eines Modells ist es wichtig, diese Kompromisse zu kennen, da die Wahl der geeigneten Technik in hohem Maße von der Problemstellung und den beobachteten Daten abhängt. Ich werde dieses Thema behandeln, nachdem ich zwei der gebräuchlichsten Techniken zur Modellevaluierung vorgestellt habe: den Train-Test-Split und die k-fache Kreuzvalidierung.

Bei der ersten Methode werden die Trainingsdaten nach dem Zufallsprinzip in eine Trainings- und eine Testeinheit aufgeteilt (Abbildung 1), wobei in der Regel ein großer Teil der Daten als Trainingsset beibehalten wird. In der Literatur werden am häufigsten Verhältnisse von 70/30 oder 80/20 verwendet, wobei das genaue Verhältnis von der Größe der Daten abhängt.

Der Nachteil dieses Ansatzes ist, dass diese einmalige zufällige Aufteilung dazu führen kann, dass die Daten in zwei sehr unausgewogene Teile aufgeteilt werden, was zu verzerrten Schätzungen des Generalisierungsfehlers führt. Dies ist besonders kritisch, wenn man nur über begrenzte Daten verfügt, da einige Merkmale oder Muster vollständig im Testteil landen könnten. In einem solchen Fall hat das Modell keine Chance, sie zu lernen, und seine Leistung wird möglicherweise unterschätzt.

train-test-split

Eine robustere Alternative ist die sogenannte k-fache Kreuzvalidierung (Abbildung 2). Hier werden die Daten gemischt und dann nach dem Zufallsprinzip in k Teilmengen aufgeteilt. Der Hauptvorteil gegenüber dem Train-Test-Split besteht darin, dass jede der k Partitionen iterativ als Testdatensatz (d. h. Validierungsmenge) verwendet wird, wobei die verbleibenden k-Teile in dieser Iteration als Trainingsdaten dienen. Dieser Vorgang wird k Mal wiederholt, sodass jede Beobachtung sowohl in den Trainings- als auch in den Testdaten enthalten ist. Die entsprechende Fehlermetrik wird dann einfach als Mittelwert aus allen k Iterationen berechnet und ergibt den Kreuzvalidierungsfehler.

Dabei handelt es sich eher um eine Erweiterung des Train-Test-Splits als um eine völlig neue Methode: Das heißt, das Train-Test-Verfahren wird k Mal wiederholt. Wenn k z.B. so niedrig wie k=2 gewählt wird, erhält man zwar nur zwei Sets. Aber auch dieser Ansatz ist dem Train-Test-Split immer noch überlegen, da beide Teile iterativ für das Training ausgewählt werden, sodass das Modell die Chance hat, aus allen Daten zu lernen und nicht nur eine zufällige Teilmenge davon. Daher führt dieser Ansatz in der Regel zu robusteren Leistungsschätzungen.

k-fold-cross-validation

Wenn man die beiden Abbildungen oben vergleichtt, sieht man, dass eine Aufteilung von Training und Test mit einem Verhältnis von 80/20 einer Iteration einer 5-fachen (d.h. k=5) Kreuzvalidierung entspricht, bei der 4/5 der Daten für das Training und 1/5 für die Validierung zurückbehalten werden. Der entscheidende Unterschied ist, dass bei der k-fachen Kreuzvalidierung die Validierungsmenge in jeder der k Iterationen verschoben wird. Beachte, dass eine k-fache Kreuzvalidierung robuster ist als die einfache Wiederholung der Aufteilung von Training und Test k Mal: Bei der k-fachen Kreuzvalidierung wird die Aufteilung einmal vorgenommen und dann durch die Partitionen iteriert, wohingegen bei der wiederholten Aufteilung von Training und Test die Daten k-mal neu aufgeteilt werden, wodurch möglicherweise einige Daten beim Training ausgelassen werden.

Wiederholte CV und LOOCV

Es gibt viele Varianten der k-fachen Kreuzvalidierung. Man kann zum Beispiel auch eine „wiederholte Kreuzvalidierung“ durchführen. Die Idee dahinter ist, dass sobald die Daten einmal in k Partitionen aufgeteilt wurden, diese Aufteilung für das gesamte Verfahren gilt. Auf diese Weise besteht nicht die Gefahr, dass wir zufällig einige Teile ausschließen. Bei der Repeated CV wiederholst du diesen Prozess des Mischens und der zufälligen Aufteilung der Daten in k Teilmengen eine gewisse Anzahl von Malen. Anschließend kannst du den Durchschnitt über die resultierenden Kreuzvalidierungsfehler der einzelnen Durchgänge bilden, um eine globale Leistungsschätzung zu erhalten.

Ein weiterer Spezialfall der k-fachen Kreuzvalidierung ist die „Leave One Out Cross-Validation“ (LOOCV), bei der du k = n setzt. Das heißt, du verwendest in jeder Iteration eine einzige Beobachtung aus deinen Daten als Validierungsteil und die restlichen n-1 Beobachtungen als Trainingsmenge. Das klingt zwar nach einer sehr robusten Version der Kreuzvalidierung, aber von dieser Methode wird im Allgemeinen aus zwei Gründen abgeraten:

  • Erstens ist sie in der Regel sehr rechenintensiv. Für die meisten Datensätze, die beim angewandten Machine Learning verwendet werden, ist es weder erstrebenswert noch umsetzbar, das Modell n-1 Mal zu trainieren (obwohl es für sehr kleine Datensätze nützlich sein kann).
  • Zweitens: Selbst wenn man die Rechenleistung (und Zeit) hätte, um diesen Prozess durchzuführen, ist ein weiteres Argument, das von Kritiker:innen von LOOCV aus statistischer Sicht vorgebracht wird, dass der resultierende Kreuzvalidierungsfehler eine hohe Varianz aufweisen kann. Das liegt daran, dass das „Validierungsset“ nur aus einer einzelnen Beobachtung besteht, und je nach Verteilung deiner Daten (und möglichen Ausreißern) kann diese erheblich variieren.

Generell sollte man beachten, dass die Leistung von LOOCV sowohl in der wissenschaftlichen Literatur als auch in der breiteren Machine Learning Community ein etwas kontroverses Thema ist. Daher empfehle ich, sich über diese Debatte zu informieren, wenn man in Erwägung zieht, LOOCV zur Schätzung der Generalisierbarkeit eines Modells zu verwenden (siehe z. B. hier) und ähnliche Beiträge auf StackExchange). Wie so oft könnte die Antwort lauten: „Es kommt darauf an“. Bedenke auf jeden Fall den Rechenaufwand von LOOCV, der kaum von der Hand zu weisen ist (außer du hast einen winzigen Datensatz).

Der Wert von k und der Kompromiss zwischen Verzerrung und Varianz

Wenn k=n nicht (unbedingt) die beste Wahl ist, wie findet man dann einen geeigneten Wert für k? Es stellt sich heraus, dass die Antwort auf diese Frage auf den berüchtigten Bias-Variance Trade-Off hinausläuft. Warum ist das so?

Der Wert für k bestimmt, in wie viele Partitionen die Daten unterteilt werden und damit auch die Größe (d.h. die Anzahl der Beobachtungen, die in jedem Teil enthalten sind). Wir wollen k so wählen, dass ein ausreichend großer Teil unserer Daten in der Trainingsmenge verbleibt – schließlich wollen wir nicht zu viele Beobachtungen verschenken, die zum Trainieren unseres Modells verwendet werden könnten. Je höher der Wert von k ist, desto mehr Beobachtungen werden bei jeder Iteration in die Trainingsmenge aufgenommen.

Nehmen wir zum Beispiel an, wir haben 1.200 Beobachtungen in unserem Datensatz, dann würde unser Trainingssatz bei k=3 aus \frac{k-1}{k} * N = 800 Beobachtungen bestehen, aber mit k=8 würde es 1.050 Beobachtungen umfassen. Je mehr Beobachtungen für das Training verwendet werden, desto eher approximiert man die tatsächliche Leistung des Modells (so als ob es auf dem gesamten Datensatz trainiert worden wäre) und desto geringer ist die Verzerrung – oder Bias – der Fehlerschätzung im Vergleich zu einem kleineren Teil der Daten. Doch mit zunehmendem k nimmt die Größe der Validierungspartition ab, und die Fehlerschätzung reagiert in jeder Iteration empfindlicher auf diese wenigen Datenpunkte, wodurch die Gesamtvarianz steigen kann. Im Grunde genommen geht es darum, zwischen den „Extremen“ des Train-Test-Splits einerseits und LOOCV andererseits zu wählen. Die folgende Abbildung veranschaulicht schematisch (!) die Bias-Variance Performance und den Rechenaufwand der verschiedenen Kreuzvalidierungsmethoden.

bias-variance-tradeoff

 

Als Faustregel gilt: Mit höheren Werten für k nimmt die Verzerrung ab und die Varianz zu. Konventionell gelten Werte wie k=5 oder k=10 als guter Kompromiss und sind daher in den meisten Fällen des Machine Learning zum Quasi-Standard geworden.

„These values have been shown empirically to yield test error rate estimates that suffer neither from excessively high bias nor from very high variance.“

James et al. 2013: 184

Wenn du dich nicht besonders für den Prozess der Kreuzvalidierung interessierst, sondern ihn einfach in deinen Data Science Workflow integrieren willst (was ich dir sehr empfehle!), solltest du einen dieser Werte für k wählen und es dabei belassen.

Implementierung der Kreuzvalidierung in

Apropos Integration der Kreuzvalidierung in deinen täglichen Arbeitsablauf – welche Möglichkeiten gibt es da? Glücklicherweise ist die Kreuzvalidierung ein Standardwerkzeug in beliebten Paketen für Machine Learning, wie z. B. dem Paket caret in R. Hier kannst du die Methode mit der Funktion trainControl festlegen. Im folgenden Skript trainieren wir einen Random Forest mit 10-facher Kreuzvalidierung auf dem iris Datensatz.

library(caret)

set.seed(12345)
inTrain <- createDataPartition(y = iris[["Species"]], p = .7, list = FALSE)

iris.train <- iris[inTrain, ]
iris.test <- iris[- inTrain, ]

fit.control <- caret::trainControl(method = "cv", number = 10)

rf.fit <- caret::train(Species ~ .,
                       data = iris.train,
                       method = "rf",
                       trControl = fit.control)

Wir definieren unsere gewünschte Kreuzvalidierungsmethode in der Funktion trainControl, speichern die Ausgabe im Objekt fit.control und übergeben dieses Objekt dann an das Argument trControl der Funktion train. Du kannst die anderen in diesem Beitrag vorgestellten Methoden auf ähnliche Weise definieren:

# Leave-One-Out Cross-validation:
fit.control <- caret::trainControl(method = "LOOCV", number = 10)

# Repeated CV (remember to specify the number of repeats!)
fit.control <- caret::trainControl(method = "repeatedcv", number = 10, repeats = 5)

Die altmodische Art: Die k-fold Kreuzvalidierung von Hand implementieren

Data Science-Projekte können jedoch schnell so komplex werden, dass die vorgefertigten Funktionen in Machine Learning-Paketen nicht mehr geeignet sind. In solchen Fällen musst du den Algorithmus – einschließlich der Kreuzvalidierungstechniken – von Hand implementieren, zugeschnitten auf die spezifischen Projektanforderungen. Ich möchte dir ein provisorisches Skript zeigen, mit dem du eine einfache k-fache Kreuzvalidierung in R von Hand implementieren kannst (wir gehen das Skript hier Schritt für Schritt an; den gesamten Code findest du auf GitHub).

Daten simulieren, Fehlermetrik definieren und k festlegen

# devtools::install_github("andrebleier/Xy")
library(tidyverse)
library(Xy)

sim <- Xy(n = 1000,
          numvars = c(2,2),
          catvars = 0,
          cor = c(-0.5, 0.9),
          noisevars = 0)

sim_data <- sim[["data"]]

RMSE <- function(f, o){
  sqrt(mean((f - o)^2))
}

k <- 5

Wir beginnen damit, die benötigten Pakete zu laden und einige Simulationsdaten mit 1.000 Beobachtungen mit dem Paket Xy() zu simulieren, das mein Kollege André entwickelt hat (siehe seinen Blogbeitrag über Regressionsdaten mit Xy simulieren). Da wir eine Art Fehlermaß zur Bewertung der Modellleistung benötigen, definieren wir unsere RMSE-Funktion, die ziemlich einfach ist: Der RMSE ist der Root Mean Squared Error, also die Wurzel aus dem Mittelwert des quadrierten Fehlers, wobei der Fehler die Differenz zwischen den gefitteten (fitted; f) und den beobachteten (observed; o) Werten ist – man kann die Funktion so ziemlich von links nach rechts lesen. Zuletzt geben wir unser k an, das im Beispiel auf den Wert 5 gesetzt ist und als einfacher Integer gespeichert wird.

Aufteilung der Daten

set.seed(12345)
sim_data <- mutate(sim_data,
                   my.folds = sample(1:k,
                                     size = nrow(sim_data),
                                     replace = TRUE))

Als nächstes unterteilen wir unsere Daten in k folds. Hierfür fügen wir den Daten eine neue Spalte hinzu,my.folds: Wir ziehen eine Stichprobe (mit Zurücklegen) von 1 bis zum Wert von k, in unserem Fall also 1 bis 5, und fügen jeder Zeile (Beobachtung) in den Daten zufällig eine dieser fünf Zahlen hinzu. Bei 1.000 Beobachtungen sollte jede Zahl etwa 200 Mal zugewiesen werden.

Training und Validierung des Modells

cv.fun <- function(this.fold, data){

  train <- filter(data, my.folds != this.fold)
  validate <- filter(data, my.folds == this.fold)

  model <- lm(y ~ NLIN_1 + NLIN_2 + LIN_1 + LIN_2,
              data = train)

  pred <- predict(model, newdata = validate) %>% as.vector()

  this.rmse <- RMSE(f = pred, o = validate$y)

  return(this.rmse)
}

Anschließend definieren wir „cv.fun“, das Herzstück unseres Kreuzvalidierungsverfahrens. Diese Funktion benötigt zwei Argumente: this.fold und data. Auf die Bedeutung von this.fold werde ich gleich zurückkommen, für den Moment setzen wir es einfach auf 1. Innerhalb der Funktion teilen wir die Daten in eine Trainings- und eine Validierungspartition auf, indem wir sie nach den Werten von my.folds und this.fold unterteilen: Jede Beobachtung mit einem zufällig zugewiesenen my.folds-Wert abweichend von 1 (also etwa 4/5 der Daten) geht in das Training. Alle Beobachtungen mit einem my.folds-Wert gleich 1 (die restlichen 1/5) bilden die Validierungsmenge. Zur Veranschaulichung passen wir dann ein einfaches lineares Modell mit dem simulierten Ergebnis und vier Prädiktoren an. Beachte, dass wir dieses Modell nur auf die train-Daten anwenden! Dann verwenden wir dieses Modell, um unsere Validierungsdaten vorherzusagen. Da wir für diese Teilmenge der ursprünglichen Trainingsdaten wahre Ergebnisse haben (darum geht es ja!), können wir unseren RMSE berechnen und ihn zurückgeben.

Iterieren durch die Foldings und Berechnen des CV-Fehlers

cv.error <- sapply(seq_len(k),
                   FUN = cv.fun,
                   data = sim_data) %>%
  mean()

cv.error

Zum Schluss verpacken wir den Funktionsaufruf von cv.fun in eine sapply()-Schleife – hier passiert die ganze Magie: Wir iterieren über den Bereich von k, so dass seq_len(k) uns in diesem Fall den Vektor [1] 1 2 3 4 5 liefert. Wir wenden jedes Element dieses Vektors auf cv.fun an. In der *apply()-Familie wird der Iterationsvektor immer als erstes Argument der aufgerufenen Funktion übergeben, so dass in unserem Fall jedes Element dieses Vektors zu einem Zeitpunkt an this.fold übergeben wird. Außerdem übermitteln wir unsere simulierten sim_data als Argument data.

Fassen wir kurz zusammen, was das bedeutet: In der ersten Iteration ist „this.fold“ gleich 1. Das bedeutet, dass unsere Trainingsmenge aus allen Beobachtungen besteht, bei denen my.folds nicht 1 ist, und die Beobachtungen mit dem Wert 1 bilden die Validierungsmenge (genau wie im Beispiel oben). In der nächsten Iteration der Schleife ist this.fold gleich 2. Folglich bilden die Beobachtungen mit den Werten 1, 3, 4 und 5 die Trainingsmenge und die Beobachtungen mit dem Wert 2 gehen in die Validierungsgruppe, und so weiter. Indem wir über alle Werte von k iterieren, erhalten wir das in Abbildung 2 gezeigte diagonale Muster, bei dem jede Datenpartition einmal als Validierungsmenge verwendet wird.

Zum Schluss berechnen wir den Mittelwert: Das ist der Mittelwert unserer k einzelnen RMSE-Werte und ergibt unseren Kreuzvalidierungsfehler. Und das war’s: Wir haben gerade unsere eigene Kreuzvalidierungsfunktion definiert!

Dies ist lediglich eine Vorlage: Du kannst jedes beliebige Modell und jede beliebige Fehlermetrik einfügen. Wenn du bis hierher durchgehalten hast, kannst du gerne selbst versuchen, eine wiederholte CV zu implementieren oder mit verschiedenen Werten für k herumzuspielen.

Fazit

Wie du siehst, ist es gar nicht so schwer, die Kreuzvalidierung selbst zu implementieren. Sie bietet dir eine große Flexibilität, um projektspezifische Anforderungen zu berücksichtigen, wie z. B. benutzerdefinierte Fehlermetriken. Wenn du nicht so viel Flexibilität brauchst, ist die Implementierung der Kreuzvalidierung in gängigen Machine Learning-Paketen ein Kinderspiel.

Ich hoffe, dass ich dir einen ausreichenden Überblick über die Kreuzvalidierung geben konnte und wie du sie sowohl in vordefinierten Funktionen als auch von Hand implementieren kannst. Wenn du Fragen, Kommentare oder Ideen hast, kannst du mir gerne eine E-Mail schicken.

Quellen

James, Gareth, Daniela Witten, Trevor Hastie, and Robert Tibshirani. 2013. An Introduction to Statistical Learning. New York: Springer.

Lukas Feick Lukas Feick

Der Vergleich von Prognosemethoden und Modellen über verschiedene Zeitreihen hinweg ist oft problematisch. Dieser Herausforderung sehen wir uns bei STATWORX regelmäßig gegenüber. Einheitenabhängige Maße wie der MAE (Mean Absolute Error) und der RMSE (Root Mean Squared Error) erweisen sich als ungeeignet und wenig hilfreich, wenn die Zeitreihen in unterschiedlichen Einheiten gemessen werden. Ist dies jedoch nicht der Fall, liefern beide Maße wertvolle Informationen. Der MAE ist gut interpretierbar, da er die durchschnittliche absolute Abweichung von den tatsächlichen Werten angibt. Der RMSE hingegen ist nicht so einfach zu interpretieren und anfälliger für Extremwerte, wird aber in der Praxis dennoch häufig verwendet.

MAE\ =\frac{1}{n}\ \sum_{i\ =1}^{n}{|{\rm Actual}_i\ -\ {\rm Forecast}_i}|

\mathrm{RMSE=\ }\sqrt{\frac{\mathrm{1}}{\mathrm{n}}\mathrm{\ } \sum_{\mathrm{i\ =\ 1}}^{\mathrm{n}}{\mathrm{(}{\mathrm{Actual}}_\mathrm{i}\mathrm{-} {\mathrm{Forecast}}_\mathrm{i}\mathrm{)} }^\mathrm{2}}

Eine der am häufigsten verwendeten Messgrößen, die dieses Problem vermeidet, heißt MAPE (Mean Absolute Percentage Error). Er löst das Problem der genannten Ansätze, da er nicht von der Einheit der Zeitreihe abhängt. Außerdem können Entscheidungsträger ohne statistisches Hintergrundwissen dieses Maß leicht interpretieren und verstehen. Trotz seiner Beliebtheit wurde und wird der MAPE immer noch kritisiert.

MAPE\ =\frac{1}{n}\ \sum_{i\ =1}^{n}{|\frac{{\rm Actual}_i\ -\ {\rm Forecast}_i}{{\rm Actual}_i}|}*100

In diesem Artikel bewerte ich diese kritischen Argumente und zeige, dass zumindest einige von ihnen höchst fragwürdig sind. Im zweiten Teil meines Artikels konzentriere ich mich auf die wahren Schwächen des MAPE. Im dritten Teil diskutiere ich verschiedene Alternativen und fasse zusammen, unter welchen Umständen die Verwendung des MAPE sinnvoll erscheint (und wann nicht).

Was dem MAPE alles FÄLSCHLICH vorgeworfen wird

Negative Fehler werden stärker bestraft als positive Fehler

Die meisten Quellen, die sich mit dem MAPE beschäftigen, weisen auf dieses „große“ Problem der Messung hin. Diese Aussage basiert hauptsächlich auf zwei verschiedenen Argumenten. Erstens wird behauptet, dass der Austausch des tatsächlichen Wertes mit dem prognostizierten Wert die Richtigkeit der Aussage beweist (Makridakis 1993).

Fall 1: {Actual}_1 = 150 & {Forecast}_1 = 100 (positive error)

{\rm APE}_1\ =\ |\frac{{\rm Actual}_1\ -\ {\rm Forecast}_1}{{\rm Actual}_1}|\ *100 =\ |\frac{150\ -\ 100}{150}|\ *100 =\ 33.33\ Percent

Fall 2: {Actual}_2 = 100 & {Forecast}_2 = 150 (negative error)

{\rm APE}_2\ =\ |\frac{{\rm Actual}_2\ -\ {\rm Forecast}_2}{{\rm Actual}_2}|\ *100 =\ |\frac{100\ -\ 150}{100}|\ *100 =\ 50\ Percent

Es stimmt, dass Fall 1 (positiver Fehler von 50) mit einem niedrigeren APE (Absolute Percentage Error) verbunden ist als Fall 2 (negativer Fehler von 50). Der Grund dafür ist jedoch nicht, dass der Fehler positiv oder negativ ist, sondern einfach, dass sich der tatsächliche Wert ändert. Wenn der tatsächliche Wert konstant bleibt, ist der APE für beide Fehlerarten gleich *(Goodwin & Lawton 1999)*. Das wird durch das folgende Beispiel verdeutlicht.

Fall 3: {Actual}_3 = 100 & {Forecast}_3 = 50

{\rm APE}_3\ =\ |\frac{{\rm Actual}_3\ -\ {\rm Forecast}_3}{{\rm Actual}_3}|\ *100 =\ |\frac{100\ -\ 50}{100}|\ *100 =\ 50\ Percent

Fall 4: {Actual}_4= 100 & {Forecast}_4 = 150

{\rm APE}_4\ =\ |\frac{{\rm Actual}_4\ -\ {\rm Forecast}_4}{{\rm Actual}_4}|\ *100 =\ |\frac{100\ -\ 150}{100}|\ *100 =\ 50\ Percent

The second, equally invalid argument supporting the asymmetry of the MAPE arises from the assumption about the predicted data. As the MAPE is mainly suited to be used to evaluate predictions on a ratio scale, the MAPE is bounded on the lower side by an error of 100% (Armstrong & Collopy 1992). However, this does not imply that the MAPE overweights or underweights some types of errors, but that these errors are not possible.

Seine WAHREN Schwächen

Tatsächliche Werte gleich Null sind problematisch

Diese Aussage ist ein bekanntes Problem des Maßes. Dieses und das letztgenannte Argument waren der Grund für die Entwicklung einer modifizierten Form des MAPE, des SMAPE („Symmetric“ Mean Absolute Percentage). Ironischerweise leidet diese modifizierte Form im Gegensatz zum ursprünglichen MAPE unter einer echten Asymmetrie (Goodwin & Lawton 1999). Ich werde dieses Argument im letzten Abschnitt des Artikels erläutern.

Besonders kleine tatsächliche Werte verzerren den MAPE

Wenn ein wahrer Wert sehr nahe bei Null liegt, sind die entsprechenden absoluten prozentualen Fehler extrem hoch und verzerren daher die Aussagekraft des MAPE (Hyndman & Koehler 2006). Die folgende Grafik verdeutlicht diesen Punkt. Obwohl alle drei Prognosen die gleichen absoluten Fehler aufweisen, ist der MAPE der Zeitreihe mit nur einem extrem kleinen Wert etwa doppelt so hoch wie der MAPE der anderen Prognosen. Dieser Sachverhalt impliziert, dass der MAPE bei extrem kleinen Beobachtungen vorsichtig verwendet werden sollte und motiviert direkt die letzte und oft ignorierte Schwäche des MAPE.

Der MAPE sagt nur aus, welche Prognose verhältnismäßig besser ist

Wie bereits zu Beginn dieses Artikels erwähnt, liegt ein Vorteil der Verwendung des MAPE für den Vergleich zwischen Prognosen verschiedener Zeitreihen in seiner Unabhängigkeit von der Einheit. Es ist jedoch wichtig zu bedenken, dass der MAPE nur angibt, welche Prognose proportional besser ist. Die folgende Grafik zeigt drei verschiedene Zeitreihen und die dazugehörigen Prognosen. Der einzige Unterschied zwischen ihnen ist ihr allgemeines Niveau. Dieselben absoluten Fehler führen also zu völlig unterschiedlichen MAPEs. In diesem Artikel wird kritisch hinterfragt, ob es sinnvoll ist, ein solches prozentuales Maß für den Vergleich zwischen Prognosen für verschiedene Zeitreihen zu verwenden. Wenn sich die verschiedenen Zeitreihen nicht auf einer irgendwie vergleichbaren Ebene verhalten (wie in der folgenden Grafik dargestellt), beruht die Verwendung des MAPE, um zu ermitteln, ob eine Prognose für eine Zeitreihe allgemein besser ist als für eine andere, auf der Annahme, dass dieselben absoluten Fehler für Zeitreihen auf höheren Ebenen weniger problematisch sind als für Zeitreihen auf niedrigeren Ebenen:

Wenn eine Zeitreihe um 100 schwankt, dann ist die Vorhersage von 101 viel besser als die Vorhersage von 2 für eine Zeitreihe, die um 1 schwankt.“

Das mag in manchen Fällen stimmen. Im Allgemeinen ist dies jedoch eine Annahme, der man sich immer bewusst sein sollte, wenn man den MAPE-Wert zum Vergleich von Prognosen zwischen verschiedenen Zeitreihen verwendet.

Zusammenfassung

Insgesamt zeigen die diskutierten Ergebnisse, dass der MAPE mit Vorsicht als Instrument für den Vergleich von Prognosen zwischen verschiedenen Zeitreihen verwendet werden sollte. Eine notwendige Bedingung ist, dass die Zeitreihe nur streng positive Werte enthält. Zweitens haben nur einige extrem kleine Werte das Potenzial, den MAPE stark zu verzerren. Und schließlich hängt der MAPE systematisch von dem Level der Zeitreihe ab, da es sich um einen prozentualen Fehler handelt. In diesem Artikel wird kritisch hinterfragt, ob es sinnvoll ist, von einer proportional besseren Prognose auf eine allgemein bessere Prognose zu verallgemeinern.

Bessere Alternativen

Die Diskussion zeigt, dass der MAPE allein oft nicht sehr nützlich ist, wenn es darum geht, die Genauigkeit verschiedener Prognosen für unterschiedliche Zeitreihen zu vergleichen. Obwohl es bequem sein kann, sich auf ein leicht verständliches Maß zu verlassen, birgt es ein hohes Risiko für irreführende Schlussfolgerungen. Im Allgemeinen ist es immer empfehlenswert, verschiedene Messwerte kombiniert zu verwenden. Zusätzlich zu den numerischen Messwerten liefert eine Visualisierung der Zeitreihe, einschließlich der tatsächlichen und der prognostizierten Werte, immer wertvolle Informationen. Wenn ein einzelnes numerisches Maß jedoch die einzige Option ist, gibt es einige erwähnenswerte Alternativen.

Scaled Measures

Scaled Measures vergleichen das Maß einer Prognose, z.B. den MAE im Verhältnis zum MAE einer Benchmark-Methode. Ähnliche Maße können mit RMSE, MAPE oder anderen Maßen definiert werden. Gängige Benchmark-Methoden sind der „random walk“, die „naive“ Methode und die „mean“ Methode. Diese Scaled Measures sind leicht zu interpretieren, da sie zeigen, wie das Schwerpunktmodell im Vergleich zu den Benchmark-Methoden abschneidet. Es ist jedoch wichtig zu bedenken, dass sie von der Auswahl der Benchmark-Methode abhängen und davon, wie gut die Zeitreihe mit der gewählten Methode vorhergesagt werden kann.

Relative\ MAE\ =\ \frac{{\rm MAE}_{focal\ model}}{{\rm MAE}_{benchmark\ model}}

Scales Errors

Scaled Errors versuchen ebenfalls, die Skalierung der Daten zu beseitigen, indem sie die prognostizierten Werte mit denen einer Benchmark-Prognosemethode, wie der naiven Methode, vergleichen. Der MASE (Mean Absolute Scaled Error), der von *Hydnmann & Koehler 2006* vorgeschlagen wurde, ist je nach Saisonalität der Zeitreihe leicht unterschiedlich definiert. Im einfachen Fall einer nicht saisonalen Zeitreihe wird der Fehler der Prognose auf der Grundlage des In-Sample-MASE der naiven Prognosemethode skaliert. Ein großer Vorteil ist, dass sie mit tatsächlichen Werten von Null umgehen kann und durch sehr extreme Werte nicht verzerrt wird. Auch hier ist zu beachten, dass die relativen Maße von der Auswahl der Benchmark-Methode abhängen und davon, wie gut die Zeitreihe mit der gewählten Methode vorhergesagt werden kann.

Nicht-Saisonal
MASE=\frac{1}{n}\sum_{i\ =\ 1}^{n}{|\frac{{\rm Actual}_i\ -\ {\rm Forecast}_i}{\frac{1}{T-1}\sum_{t=2}^{T}{|{\rm Actual}_t-{\rm Actual}_{t-1}|}}|}

Saisonal
MASE=\frac{1}{n}\sum_{i\ =\ 1}^{n}{|\frac{{\rm Actual}_i\ -\ {\rm Forecast}_i}{\frac{1}{T-M}\sum_{t=m+1}^{T}{|{\rm Actual}_t-{\rm Actual}_{t-m}|}}|}

SDMAE

Der Grundgedanke bei der Verwendung des MAPE zum Vergleich verschiedener Zeitreihen zwischen Prognosen ist meines Erachtens, dass derselbe absolute Fehler für Zeitreihen auf höheren Ebenen weniger problematisch ist als für Zeitreihen auf niedrigeren Ebenen. Anhand der zuvor gezeigten Beispiele denke ich, dass diese Idee zumindest fragwürdig ist.

Ich vertrete die Auffassung, dass die Bewertung eines bestimmten absoluten Fehlers nicht vom allgemeinen Niveau der Zeitreihe abhängen sollte, sondern von ihrer Variation. Dementsprechend ist das folgende Maß, der SDMAE (Standard Deviation adjusted Mean Absolute Error), ein Produkt der diskutierten Fragen und Überlegungen. Es kann zur Bewertung von Prognosen für Zeitreihen mit negativen Werten verwendet werden und leidet nicht darunter, dass die tatsächlichen Werte gleich Null oder besonders klein sind. Beachte, dass dieses Maß nicht für Zeitreihen definiert ist, die überhaupt nicht schwanken. Außerdem könnte es weitere Einschränkungen dieses Maßes geben, die mir derzeit nicht bekannt sind.


SDMAE\ =\ \frac{{\rm MAE}_{focal\ model}}{{\rm SD}_{actual\ values}}

Zusammenfassung

Ich schlage vor, eine Kombination verschiedener Messgrößen zu verwenden, um ein umfassendes Bild von der Leistung der verschiedenen Prognosen zu erhalten. Ich empfehle außerdem, den MAPE durch eine Visualisierung der Zeitreihe, die die tatsächlichen und die prognostizierten Werte enthält, den MAE und einen Scaled Measure oder Scaled Error zu ergänzen. Der SDMAE sollte als alternativer Ansatz gesehen werden, der bisher noch nicht von einem breiteren Publikum diskutiert wurde. Ich bin dankbar für deine kritischen Gedanken und Kommentare zu dieser Idee.

Schlechtere Alternativen

SMAPE

Der SMAPE wurde geschaffen, um die Probleme des MAPE zu lösen. Damit wurde jedoch weder das Problem der extrem kleinen Ist-Werte noch die Niveauabhängigkeit des MAPE gelöst. Der Grund dafür ist, dass extrem kleine tatsächliche Werte in der Regel mit extrem kleinen Vorhersagen verbunden sind *(Hyndman & Koehler 2006)*. Außerdem wirft der SMAPE im Gegensatz zum unveränderten MAPE das Problem der Asymmetrie auf *(Goodwin & Lawton 1999)*. Dies wird durch die folgende Grafik verdeutlicht, wobei sich der „APE“ auf den MAPE und der „SAPE“ auf den SMAPE bezieht. Sie zeigt, dass der SAPE bei positiven Fehlern höher ist als bei negativen Fehlern und daher asymmetrisch. Die SMAPE wird von einigen Wissenschaftlern nicht empfohlen (Hyndman & Koehler 2006).

SMAPE=\frac{1}{n}\sum_{i\ =\ 1}^{n}{|\frac{{\rm Actual}_i\ -\ {\rm Forecast}_i}{({\rm Actual}_i+{\rm Forecast}_1)/2}|*100}

On the asymmetry of the symmetric MAPE_ _(Goodwin & Lawton 1999)

Quellen

  • Goodwin, P., & Lawton, R. (1999). On the asymmetry of the symmetric MAPE. *International journal of forecasting*, *15*(4), 405-408.
    Hyndman, R. J., & Koehler, A. B. (2006). Another look at measures of forecast accuracy. *International journal of forecasting*, *22*(4), 679-688.
    Makridakis, S. (1993). Accuracy measures: theoretical and practical concerns. *International Journal of Forecasting*, *9*(4), 527-529.
    Armstrong, J. S., & Collopy, F. (1992). Error measures for generalizing about forecasting methods: Empirical comparisons. *International journal of forecasting*, *8*(1), 69-80.
Jan Fischer Jan Fischer

Ein paar hundert Meter von unserem Büro entfernt gibt es ein kleines Mittagslokal. Es gehört zu einer kleinen Kette, die sich auf selbst zusammenstellbare, verzehrfertige Salate spezialisiert hat. Als wir vor ein paar Jahren in unser neues Büro zogen, wurde dieser Salatlieferant schnell zu einem festen Bestandteil unseres Alltags. Im Laufe der Zeit hat sich das jedoch geändert. Wir essen immer noch regelmäßig dort, aber ich bin mir sicher, wenn man sich den STATWORX-bezogenen Umsatz ansieht, würde der Trend das Management nicht erfreuen, und die Frage ist, warum?
Die Antwort hat viel mit dem Auftreten neuer Konkurrenten, verbesserten Kochkünsten, ausgeklügelten Werbeaktionen und sicherlich auch mit der Preisgestaltung zu tun. Letztere – die Preisgestaltung – wird im Mittelpunkt dieser Serie stehen.
Bei der Analyse von Fragen der Preisgestaltung ist es oft von wesentlichem Interesse, ein Maß dafür zu haben, wie sich eine Preisänderung auf die Nachfrage auswirkt. Das Maß, auf das sich Ökonomen im Allgemeinen einigen, um diese Beziehung zu beschreiben, ist die Preiselastizität der Nachfrage, \epsilon. Als relatives Maß ist es einheitsunabhängig, was es zu einem Gewinner macht. Die Elastizität ist definiert als die prozentuale Änderung der Menge geteilt durch die prozentuale Änderung des Preises:

    \[epsilon = frac{Delta qty/ qty}{Delta price/ price}\]

Konzeptionell werden üblicherweise drei Bedingungen unterschieden: Elastizitätswerte von <-1 weisen auf eine „elastische Nachfrage“ hin. Das heißt, wenn man den Preis um ein Prozent erhöht, sinkt die Nachfragemenge um mehr als ein Prozent. Die beiden anderen Bedingungen sind Nachfrageelastizitäten von >-1, in diesem Fall spricht man von „unelastischer Nachfrage“ und dem Fall, dass die Elastizität gleich -1 ist. Dies wird als „einheitselastische Nachfrage“ bezeichnet.

Es wäre sehr hilfreich, wenn wir die tatsächliche Preiselastizität der Nachfrage für unsere Salatbar ableiten könnten. Mit einem zuverlässigen Elastizitätswert in der Hand können wir Fragen beantworten wie: Wie viele Salate können wir bei einem bestimmten Preis voraussichtlich verkaufen? Wie wirkt sich eine Preisänderung von 10 % auf die Nachfrage aus? Mit diesem Wissen wäre es möglich, die Preisgestaltung als Instrument zu nutzen, um verschiedene KPIs für das Salatgeschäft zu erreichen. Letztendlich kann die Salatbar ihren Preis anpassen, um den Gewinn zu maximieren oder den Umsatz zu steigern – je nach ihren strategischen Zielen.

Die Feinheiten der Ableitung dieser Preiselastizitäten der Nachfrage mit Regressionen sind das Thema dieses kurzen Blogs. Die Situation unseres Salatanbieters ist ein anschauliches Beispiel dafür, wie wir die Preiselastizität berechnen können und wie sie zur Anpassung der eigenen Preisstrategie genutzt werden kann.

Einrichtung

Um es vorweg zu nehmen – obwohl dieser Salatverkäufer existiert und tatsächlich ein integraler Bestandteil der STATWORX-Nahrungskette ist, sind alle Daten, mit denen wir arbeiten, erfunden. Sie beschreiben, wie ich mir die Marktsituation dieses kleinen Salatanbieters vorstelle. Mit jedem neuen Beitrag, in dem wir komplexere Themen untersuchen, werden wir tiefer in die Welt der Salatverkäufer eintauchen.

Die Frage dieses Blogbeitrags ist einfach: Wie können wir mit Hilfe der linearen Regression Preiselastizitäten ableiten? Um dies zu untersuchen, benötigen wir Informationen über historische Preise und Verkäufe. Zu Beginn werden keine Konkurrenz, keine Alternativprodukte in den Geschäften, keine neuen Werbeaktionen, keine saisonalen Effekte oder ähnliches berücksichtigt.
Die täglichen Verkaufspreise der letzten zwei Jahre wurden für unsere kleine Salatbar simuliert, indem zufällig Preise zwischen 5,59 € und 9,99 € ausgewählt wurden – natürlich keine großartige Preisstrategie, aber für die Zwecke dieses Beitrags reicht sie aus. Zur Ableitung der Verkäufe wurde eine multiplikative Nachfragefunktion verwendet, der ein gewisser Zufallsfaktor hinzugefügt wurde. Und damit sind wir mit der Simulation der Daten fertig. Weitere Einzelheiten finden Sie im Code auf unserer Github-Seite.

Berechnung der Elastizität der Nachfrage

Wir wollen wissen, wie sich eine lineare Regressionsfunktion zur Elastizität verhält. Es stellt sich heraus, dass dies davon abhängt, wie die Variablen transformiert wurden. Es ist möglich, die Elastizität – ein Faktor der relativen Veränderung – in fast jeder Situation abzuleiten. Hier finden Sie die vier häufigsten Umformungen.

Transformation Function Elasticity
Level-Level Y = a+bX epsilon=b*frac{X}{Y}
Log-Level log(Y) = a+bX epsilon=b*X
Level-Log Y = a+b*log(X) epsilon=frac{b}{Y}
Log-Log log(Y) = a+b*log(X) epsilon=b

Abhängig von der Transformation der Variablen vor der Regression sind unterschiedliche Transformationen nach der Regression erforderlich, um die Elastizitätswerte zu ermitteln. Die obige Tabelle zeigt, dass die Elastizität im Falle eines log-log-Modells ein konstanter Wert über die gesamte Nachfragekurve ist, während sie in allen anderen Fällen vom spezifischen aktuellen Preis und/oder der Nachfrage abhängig ist. Dies bedeutet, dass die Wahl des Modells einen Hinweis auf die angenommene Nachfragekurve gibt. Eine falsche Wahl führt zu einem falsch spezifizierten Modell.

Das ist gut zu wissen, aber welches Modell sollte man verwenden? Um dies zu beurteilen, habe ich einfach jedes dieser vier Modelle durchgespielt. Die Ergebnisse finden Sie in der Tabelle unten, aber sie sind nichts, was man jemals in der realen Welt finden wird, da alle Effekte hoch signifikant sind und der R^2 für eine soziale oder wirtschaftliche Analyse lächerlich hoch ist. Dies ist beabsichtigt, da kaum Zufälligkeiten hinzugefügt wurden. Darüber hinaus waren die Daten so angelegt, dass das Log-Log-Modell prädestiniert war, das „Gewinnmodell“ zu erzeugen.

Model Intercept Price Variable varnothing Elasticity R^2
Level-Level 439.58 (3.2) -38.57 (0.42) -2.50 0.84
Log-Level 6.59 (0.01) -0.23 (0.01) -1.63 0.95
Level-Log 671.22 (3.53) -265.66 (1.83) -2.11 0.93
Log-Log 7.86 (0.01) -1.52 (0.01) -1.51 0.97

Das Argument ist nicht, dass ein Log-Log-Modell das beste Modell zur Ableitung von Elastizitäten ist. Allerdings gibt es starke mikroökonomische Argumente dafür, warum das Log-Log-Modell das sinnvollste Modell zur Beschreibung der Nachfrageelastizität ist. Die zugrunde liegende Nachfragekurve beschreibt die Nachfrage am ehesten so, wie Ökonomen sie vermuten. Sie stellt sicher, dass die Nachfrage nicht unter Null sinken kann, wenn der Preis steigt, und dass auf der anderen Seite die Nachfrage exponentiell wächst, wenn der Preis sinkt. Die Ableitbarkeit eines konstanten Elastizitätswertes ist jedoch, wie bereits erwähnt, ihre wünschenswerteste Eigenschaft. Diese Tatsache macht es viel einfacher, die Elastizität zur Optimierung der Preisgestaltung einzusetzen.

Dennoch kann die empirische Analyse uns dazu bringen, andere Preis-Nachfrage-Beziehungen anzunehmen. Die folgende Grafik zeigt dies auf anschauliche Weise. Die Legende der Grafik ordnet die Modelle in aufsteigender Reihenfolge ihrer Eignung. Bei der Betrachtung der einzelnen Diagramme wird deutlich, warum das Level-Log-Modell besser abschneidet als das Level-Level-Modell, und warum das Log-Level-Modell das Level-Log-Modell übertrifft und so weiter. Die nicht-lineare Beziehung zwischen Preis und Nachfrage, die wir durch die Verwendung einer multiplikativen Nachfragekurve eingeführt haben, wird am besten durch das Log-Log-Modell beschrieben. Hätte ich eine additive Nachfragekurve verwendet, wäre die Rangfolge andersherum gewesen. Das Argument lautet also, dass die Wahl des Modells unter bestimmten Umständen einen erheblichen Einfluss haben kann.

elasticity regression comp

Für die Anwendung in der Praxis müssen wir uns der funktionalen Form, die durch die von uns gewählte Regression angezeigt wird, sehr bewusst sein. Die Auswirkungen können schwerwiegende Folgen haben. Die Elastizität, mit der die Daten erzeugt wurden, betrug -1,5. Um zu veranschaulichen, wie sich die Wahl des Modells auf die geschätzte Elastizität auswirken kann, habe ich die durchschnittlichen Elastizitäten für Modelle auf Niveau-, Log-Level- und Level-Level-Niveau berechnet und sie mit dem Preiskoeffizienten des Log-Log-Modells verglichen. Dies ist zwar eine etwas zu starke Vereinfachung, aber der Punkt bleibt bestehen: Die Ergebnisse sind sehr unterschiedlich, was Konsequenzen hat, wenn man versucht, die abgeleiteten Elastizitäten zu nutzen. Auf der Grundlage der grafischen Analyse und der Modellinformationen würden wir jedoch zu dem Schluss kommen, dass das Log-Log-Modell am besten abschneidet, so dass wir so vorgehen können, wie es die Theorie vorsieht.

Preis-Optimierung

evor wir zum Schluss kommen, wollen wir uns kurz ansehen, wie wir die Elastizität nutzen können, um die erratische Preisstrategie des kleinen Salatverkäufers zu verbessern (meine zufällige tägliche Preisänderung). Dazu müssen wir die Kostenfunktion der Salatbar kennen. Glücklicherweise kennen wir sie: Die Salatbar hat für jeden Tag, an dem sie geöffnet ist, Fixkosten von etwa 300 €. Die Zubereitung eines einzelnen Salats kostet etwa 2,50 € pro Salat. Die Kostenfunktion lautet also:

    \[€€TotalCost = 300€ + SaladesSold * 2.50€\]

Die Mikroökonomie lehrt uns, dass Fixkosten bei der Berechnung von elastizitätsbasierten, margenoptimierten Preisen keine Rolle spielen. Ich erspare dir die Details, aber die Funktion zur Berechnung des optimierten Preises lautet letztendlich wie folgt:

    \[OptimalPrice = frac{Elasticity*CostPerSalad}{1+Elasticity}\]

Unter Anwendung der aus dem Log-Log-Modell abgeleiteten Elastizität ergibt sich ein vorgeschlagener optimaler Preis, der irgendwo zwischen 7,21€ und 7,47€ liegt. Die Schätzung liegt bei 7,34 €. Anstatt seinen Preis täglich willkürlich zu ändern, ist es am besten, sich an Preise in diesem Bereich zu halten. Der Salatverkäufer kann davon ausgehen, dass er jeden Tag etwa 125 Salate verkauft, was ihm einen täglichen Gewinn zwischen 287 € und 320 € sichert.

KPIs Lowerbound Elasticity Exp. Elasticity Upperbound Elasticity
Elasticity -1.51 -1.52 -1.54
Opt. Price 7.43€ 7.30€ 7.17€
Quantity 126 125 125
Profit 319€ 302€ 285€

Dies ist eine gewagte Aussage. Mit den tatsächlichen Beispieldaten wäre die Schlussfolgerung in Ordnung. Aber in der Praxis sind solche perfekten Regressionsergebnisse mit so wenig Unsicherheit unrealistisch. Und genau hier wird es heikel. Zur Veranschaulichung dieses Punktes habe ich den Standardfehler von fast nicht vorhanden auf 0,15 angepasst. Die Ergebnisse sollten immer noch hochsignifikant sein, aber wenn man sich die nachstehende Tabelle ansieht, wäre man über die Folgen solch kleiner Änderungen überrascht.

KPIs Lowerbound Elasticity Exp. Elasticity Upperbound Elasticity
Elasticity -1.23 -1.52 -1.82
Opt. Price 13.51€ 7.30€ 5.57€
Quantity 106 125 114
Profit 864€ 302€ 51€

Die Gewissheit, mit der wir den optimalen Preis vorgeschlagen haben, war sehr unbegründet. In diesem Beispiel ist die Spanne für die Elastizität trotz der größeren Unsicherheit immer noch relativ klein. Die sich daraus ergebende Preisspanne für den idealen Preis liegt jedoch zwischen 5,58 € und 13,73 €, was kein sehr präziser Vorschlag ist. Die Preisspanne liegt sogar über dem höchsten Preis, den der kleine Salatverkäufer jemals zu setzen wagte. Die Folgen sind gravierend: Der resultierende Gewinn schwankt fast um das Sechzehnfache zwischen dem höchsten und dem niedrigsten Preis.

Um das Offensichtliche zu verdeutlichen: Der dargestellte Ansatz zur Elastizitätsberechnung ist nur die Spitze des Eisbergs. Das bedeutet, dass wir Zeit in die Verbesserung des derzeitigen Ansatzes investieren müssen. Die nächsten Beiträge werden sich auf intervenierende Faktoren wie Werbemaßnahmen und ähnliche Produkte konzentrieren. Daniel Lüttgau Daniel Lüttgau

Wie kann man Preiselastizität bestimmen? Die Antwort auf diese Frage ist nicht eindeutig, sondern fallspezifisch. Es gibt viele Verfahren, um Preiselastizität empirischzu bestimmen. DirekteExpertenbefragungen, Kundenbefragungen, indirekte Kundenbefragungen durch Conjoint Analysen und vielfältige experimentelle Testmethoden.

Wenn die Datenlage es erlaubt, wenden wir Methoden an, die auf historischen Marktdaten basieren. Unterfüttert mit Daten zu Faktoren, wie Wettbewerbspreise, Werbeinformationen etc., lassen sich hier durch am erfolgreichsten die entscheidenden Wirkungsmechanismen für eine dynamische und automatisierte Preisgestaltung identifizieren.

In drei Blogposts sollen die verschiedenen Verfahren beleuchtet und ihre Vor- und Nachteile aufbereitet werden. Im vergangen ersten Teil wurden befragungsbasierten Verfahrenbesprochen. In diesem zweiten Teil wird der Fokus auf experimentellen Methoden und Conjoint Analysen liegen. Im darauf folgenden und abschließenden Post sollen gängige regressionsbasierte Verfahren Thema sein.

Die im vorherigen Blogbeitrag beschrieben Expertenbefragungen und direkte Kundenbefragungen sind in vielerlei Hinsicht schwierig. Experteninterviews vernachlässigen systematisch die Kundenperspektive. Kundenbefragungen sind inhaltlich problematisch, da sie fast zwingend eine isolierte Fokussierung auf die Preissetzung bewirken. Dies steht im Widerspruch zum eigentlichen Kaufprozess, der viel wahrscheinlicher einer Kosten-Nutzen-Abwägung entspricht.

Indirekte Verfahren

Um diesen Problemen auszuweichen, wird daher häufig auf indirekte Befragungsmethoden zurückgegriffen. Durch indirekte Befragungsverfahren sollen die Kaufsituation und die Kundenentscheidung realistischer abgebildet werden, als dies durch Befragungen möglich ist. Ein zentrales Konzept sind dabei Conjoint Analyse Verfahren. Conjoint Analysen sind ein zentrales und etabliertes Marketinginstrument mit vielfältigen auf die jeweilige Problemstellung zugeschnittene Varianten.

Grundsätzlich sollen Conjoint Analysen dabei helfen, die tatsächlichen Abwägungen und Präferenzen von Kunden zwischen verschiedenen Bedürfnissen besser nachzuvollziehen. Durch ein umfassenderes Verständnis der Kundenpräferenzen sollen dann Rückschlüsse auf die konkrete Fragestellung abgeleitet werden. Prinzipiell können so durch Conjoint Analysen vielfältige und komplexe Fragestellungen beantwortet werden.

Um die Zahlungsbereitschaft von Kunden abzufragen, werden Kunden z.B. verschiedene sogenannte Produkt-Preis-Profile zur Auswahl gestellt. Die verschiedenen Auswahlmöglichkeiten unterscheiden sich hinsichtlich im Voraus definierter Merkmale und bzgl. des Preises. Die Teilnehmer sind aufgefordert, zwischen diesen Alternativen zu wählen und Ihre Präferenzen darzulegen. Basierend auf diesen Präferenzaussagen werden die Wirkungen des Preises und der verschiedenen Produktmerkmale herausgearbeitet.

Der Erfolg von Conjoint Verfahren hängt wesentlich von den vorbereitenden Schritten bei der Produkt-Preis-Profi-Gestaltung ab. Eine Vielzahl von Entscheidungen müssen getroffen werden, z.B.:

  • Wie viele verschiedene Merkmale sollen verglichen werden? Dies ist nicht trivial, denn es kann schnell unübersichtlich werden. Entscheidet man sich für nur 3 Merkmale mit jeweils 3 Ausprägungen, so konfrontiert man den Konsumenten bereits mit bis zu 27 Alternativen. Wollte man hier mit Paarvergleichen arbeiten, dann müsste sich der Teilnehmer theoretisch durch 351 Paarvergleich arbeiten. In der Praxis werden natürlich
  • Wie viele Ausprägungen sollen je Merkmal auswählbar sein? Studien zu Folge werden Produkte mit mehr Auswahlmöglichkeiten von Teilnehmern als wichtiger erachtet. Es gibt viele ähnliche Beispiele dafür wie das Testdesign das Ergebnis beeinflusst. Problematisch wird dies, wenn die Wirkung des Testdesigns den tatsächlichen Kaufprozess entstellt.
  • Wie sollen den Teilnehmern die verschiedenen Alternativen präsentiert werden? Sollen alle Alternativen mit ihren unterschiedlichen Preisen gleichzeitig präsentiert werden (Vollprofile) oder sind Paarvergleiche besser? Vollprofile sind realitätsnäher, aber konfrontieren den Teilnehmer mit einer komplexeren Problemstellung, wodurch evtl. keine klaren Ergebnisse abgeleitet werden können.

Der Anwender von Conjoint Verfahren wird mit der komplexen Anforderungspalette konfrontiert, der man bei Experimenten oder bei der Fragebogenausgestaltung ebenfalls begegnet. Dennoch sind Conjoint Analysen ein beliebtes und häufig angewandtes Verfahren. Insbesondere Computergestützte Methoden helfen inzwischen die Komplexität zu reduzieren.

Ähnlich wie die anderen bereits beschriebenen Verfahren sind Conjoint-Analysen kein Instrument, das für ein fortlaufendes systematisches Elastizitäts-Monitoring geeignet ist. Conjoint Verfahren können für explorative Analysen, z.B. im Fall von Produktneueinführungen, ein sehr nützliches Instrument darstellen. Gilt es aber ein fortlaufendes, reaktives Preisgestaltungsinstrument zu entwickeln, so wird das Verfahren an seine Grenzen stoßen, insbesondere dann, wenn man ein breites Produktsortiment hat.

Experimente

Bei Experimenten werden Kunden(-Gruppen) in realen oder nachgestellten Kaufsituationen (Feld-bzw. Laborexperimente) verschiedene Preisalternativen vorgegeben. Aus dem Kaufverhalten der Testteilnehmer werden Rückschlüsse bzgl. des Effektes des Preises auf den Absatz abgeleitet. Ähnlich wie bei Conjoint Analysen gibt es bei der Ausgestaltung solcher Tests viele Vorgehensmöglichkeiten. Insbesondere der E-Commerce bietet vielfältige Anwendungsmöglichkeiten, da viele zusätzliche transaktionsspezifische Informationen bei der statistischen Auswertung des Experiments hinzugezogen werden können. Doch auch im Brick-And-Mortar-Bereich können durch klassische Store-Tests wichtige Rückschlüsse auf produktspezifische Zahlungsbereitschaften gewonnen werden.

Letztlich gibt es fast keine Grenzen bei der Ausgestaltung von preisbezogenen Experimenten, insbesondere dann, wenn auch Laborexperimente in Frage kommen. Hier stellt sich immer die Frage nach der externen Validität dieser Experimente. Künstliche Situationen können atypisches Verhalten verursachen. Ebenso kann es schwierig sein, aus den Erkenntnissen des Experiments praxisrelevante Schlüsse zu ziehen.

Ebenfalls problematisch sind die hohen Kosten, die mit Experimenten einhergehen. Insbesondere mit Feldexperimenten greift man direkt in das aktive Geschäft ein. Jede Preissenkung kann mit Profitverlust einhergehen, jede Preiserhöhung kann Absatzverluste bedeuten.

In unseren Projekten mit Kunden nutzen wir Feldexperimente als Validierungswerkzeug für unsere auf Marktdaten basierten Analyseverfahren. Modellgesteuerte Feldexperimente können genutzt werden, um die Prognosegüte eines Modells zu evaluieren und dessen Schwächen aufzudecken.

Alle bisher beschriebenen Verfahren haben ihre Funktion und können bei entsprechenden Rahmenbedingungen sinnvoll und richtig sein. Wenn die Datenlage es aber erlaubt, wenden wir Methoden an, die auf historischen Marktdaten basieren. Im abschließenden Post sollen gängige regressionsbasierte Verfahren Thema sein. Daniel Lüttgau Daniel Lüttgau

Wie kann man Preiselastizität bestimmen? Die Antwort auf diese Frage ist nicht eindeutig, sondern fallspezifisch. Es gibt viele Verfahren, um Preiselastizität empirisch zu bestimmen. Direkte Expertenbefragungen, Kundenbefragungen, indirekte Kundenbefragungen durch Conjoint Analysen und vielfältige experimentelle Testmethoden.

Wenn die Datenlage es erlaubt, wenden wir Methoden an, die auf historischen Marktdaten basieren. Unterfüttert mit Daten zu Faktoren, wie Wettbewerbspreise, Werbeinformationen etc., lassen sich hierdurch am erfolgreichsten die entscheidenden Wirkungsmechanismen für eine dynamische und automatisierte Preisgestaltung identifizieren.

In drei Blogposts sollen die verschiedenen Verfahren beleuchtet und ihre Vor- und Nachteile aufbereitet werden. Der heutige erste Teil beginnt mit befragungsbasierten Verfahren. Der zweite wird sich mit experimentellen Methoden und Conjoint Analysen beschäftigen. Im darauf folgenden und abschließenden Post sollen gängige regressionsbasierte Verfahren Thema sein.

Expertenbefragungen

Der auf Befragungen basierende Methodenbereich gliedert sich in Expertenbefragungen und verschiedene Verfahren der Kundenbefragung. Wir beginnen mit Expertenbefragungen. Dabei werden Fachleute mit umfassendem Wissen über den Markt oder ein spezielles Marktsegment, in dem das Unternehmen agiert, zur Preiswirkung befragt. Naheliegende Ansprechpartner sind vertriebsnahe Manager, Mitarbeitern aus dem Vertrieb oder Marketing, aber auch externe Fachleute und Berater. Methodisch kann zwischen unstrukturierten, freien Interviews und strukturierten, häufig Workshop basierten, in klare Vorgehensschritte untergliederte Verfahren gewählt werden.

Expertenbefragungen sind in der Regel günstiger und weniger zeitintensiv als Kundenbefragungen. In der Hoffnung, dass Fachleute markttransformierende Ereignisse früher und besser erkennen als andere Verfahren, werden Expertenbefragungen gelegentlich auch unterstützend zu anderen Methoden durchgeführt.

Ein Vorteil von Expertenbefragungen ist, dass sie auch in Momenten hoher Ungewissheit zu Ergebnissen führen. Vollständig unerprobter Preisstrategien oder neue Marktsituationen durch neue Wettbewerber oder veränderte Kundenbedürfnisse sind in der Regel nur mit Hilfe von Expertenurteilen abzubilden. Unklar ist aber, welchen Wert diese Ergebnisse haben, denn der mit unbekannten Situationen einhergehenden Unsicherheit sind auch die Experten ausgesetzt.

Darüber hinaus kämpfen Expertenbefragungen mit einer Reihe von Problemen: Es gelingt durch sie nicht, die Kundenperspektive mit einzubeziehen. Außerdem können Experten als Folge von systematisch falschen Annahmen oder lange gültigen, aber veralteten,Paradigmen falsche Schlüsse ziehen. Experten kommen außerdem häufig zu stark divergierenden Prognosen, die dann schwer vereinbar sind.

Insgesamt gilt, dass Expertenbefragungen für ein fortlaufendes Elastizitäten-Monitoring eher ungeeignet sind. Andere analytische Verfahren sind in höherer Frequenz und größerem Umfang durchführbar. In schnelllebigen Marktumfeldern oder für Akteure mit großen Produktsortimenten sind dies entscheidende Nachteile von Expertenbefragungen.

Kundenbefragungen

Bei direkten Befragungen werden Kunden durch Fragen wie „Zu welchem Preis würden Sie dieses Produkt gerade noch kaufen?“ zu ihrer Zahlungsbereitschaft befragt. Die Angaben werden genutzt, um Elastizitätswerte abzuleiten. Durch eine bewusste Fragekonstruktion oder eine gezielte Abfolge können zusätzliche Sachverhalte abgefragt werden. Die ergänzende Frage: „Ab welchem Preisunterschied würden Sie von Produkt X zu Produkt Y wechseln?” erlaubt beispielsweise die gezielte Abfrage von Kreuzelastizitäten zwischen spezifischen Substituten.

Direkte Befragungen sind in vielerlei Hinsicht schwierig. Insbesondere im Kontext von Konsumgütern mit einer Vielzahl an Produkten und Alternativen wird das Abfragen von Zahlungsbereitschaften aufwendig. Inhaltlich problematisch ist die fast zwingend isolierte Fokussierung auf die Preissetzung. Dies steht im Widerspruch zum eigentlichen Kaufprozess, der viel wahrscheinlicher einer Kosten-Nutzen-Abwägung entspricht. Studien weisen auch auf eine Diskrepanz zwischen tatsächlichem und in Umfragen bekundeten Verhalten hin.

Um diesen Problemen auszuweichen, wird daher häufig auf indirekte Befragungsmethoden in Form von Conjoint Analyse oder experimentelle Testdesigns zurückgegriffen. Durch diese Verfahren sollen die Kaufsituation und die Kundenentscheidung realistischer abgebildet werden, als dies durch Befragungen möglich ist. Diese alternativen Verfahren sind Thema des nächsten Beitrags. Daniel Lüttgau Daniel Lüttgau

In diesem Blogeintrag aus der „Gut in Form”-Reihe wird gezeigt, wie sich Datenreshapes in R, Stata und SPSS umsetzten lassen. Diese Datenreshapes dienen dazu, die vorliegenden Daten zu transformieren und so die optimale Darstellung zu erhalten, wenn pro Einheit mehrere Informationen zu einer Begebenheit vorliegen.

Was vielleicht etwas kompliziert klingt, soll anhand eines Beispiels erläutert werden: Es soll ein Datensatz erstellt werden, der Informationen zur Tagesdurchschnittstemperatur am 01.01.2018 in allen europäischen Hauptstädten enthält. Die Städte repräsentieren also die Einheiten, die am Anfang des Beitrags erwähnt werden, die Temperaturen entsprechen den Informationen. Hat man nur Informationen zu einem Tag, so gibt es nur einen vernünftigen Weg die Daten darzustellen. Es gibt zwei Variablen, Stadt und Temperatur, und jede Stadt steht in einer eigenen Zeile.

Hat man jedoch pro Stadt Informationen für zwei Tagezeiten (vormittags/nachmittags), so stellt sich die Frage nach der Darstellung. Man spricht hier von einem sogenannten Panel-Design. Generell gibt es zwei Formate, um dies darzustellen: das Long- und das Wide-Format. Die Transformation zwischen den Formaten wird auch Reshape genannt.

Beim Long-Format wird jede einzelne Information/Messung in einer eigenen Zeile dargestellt. Für unser kleines Beispiel heißt das, dass zusätzlich zur Stadt- und Temperatur-Variable eine neue hinzukommt, die Tageszeit, an dem die Temperatur gemessen wurde, angibt. Pro Stadt können im Datensatz so mehrere Fälle (Zeilen) bestehen. In der untenstehenden Darstellung ist dies für mögliche Temperatur in einem Ausschnitt dargestellt.

Beim Wide-Format existiert für jede Einheit nur eine Zeile. Das bedeutet jedoch auch, dass es nicht mehr nur eine, sondern mehrere Variablen zur Information gibt. Für das Beispiel heißt das konkret, dass für jede Tageszeit, zu der Informationen vorliegen, eine Variable angelegt werden muss. Im Gegensatz zum Long-Format geht die Struktur der Daten eher in die Breite, daher auch die Bezeichnung als „Wide“.

datenaufbereitung beispiel

Natürlich kann es auch vorkommen, dass nicht zu allen Begebenheiten/Messungen Informationen für alle Einheiten vorliegen. Im Long-Format fällt dies nicht eindeutig auf, im Wide-Format dagegen eher. Für die Datenaufbereitung ist dies unerheblich. Wie methodisch mit solch einem unbalanciertem Design umgegangen wird, ist nicht Bestandteil dieser Blogreihe.

Datensatz

Der Datensatz wurde bereits in den beiden vorherigen Beiträgen zu den Themen Datenimport und Datentypen vorgestellt. Darin ist für verschiedene STATWORX Mitarbeiter, deren realer Name durch den jeweiligen Lieblingsstatistiker ersetzt wurde, der Süßigkeitenkonsum an zehn aufeinander folgenden Arbeitstagen festgehalten. In der ursprünglichen Version sind neben Tag und Mitarbeiter Informationen zur Anzahl an gegessenen Obststücken, Gummibärchen und Snickers enthalten. Außerdem gibt die Faktor-Variable „Pick Up“ die Lieblingssorte des Schokoriegels jedes Mitarbeiters. Die Lieblingssorte ist (zumindest über die beobachteten zehn Tage) konstant und verändert sich somit nicht.

Um einen besseren Überblick über den Datensatz vor und nach der Umstrukturierung zu erhalten, werden die Angaben zu Gummibärchen und Snickers entfernt, so dass die Anzahl an gegessenen Obststücken die einzige Information ist, die über die Zeit variiert. In diesem Eintrag wird öfter erwähnt werden, dass eine Variable über die Zeit konstant ist oder variiert. Streng genommen ist der Ausdruck „Zeit“ falsch, denn eine Information kann auch über verschiedene Messhintergründe/Begebenheiten konstant sein oder variieren.

Die ersten fünf Zeilen im Datensatz sind folgend dargestellt:

datenaufbereitung head daten long

Aus der obigen Erklärung wissen wir, dass die Daten momentan noch im Long-Format vorliegen. Jeder Tag wird in einer eigenen Zeile dargestellt, somit kommt jeder Mitarbeiter öfter vor (hier zehn Mal, weil Beobachtungen zu zehn Tagen vorliegen).

Die Umstrukturierung soll also bewirken, dass pro Mitarbeiter nur noch eine Zeile im Datensatz besteht, dafür sollen zehn Informationen zum Obstkonsum vorhanden sein. Da die Pick Up-Vorliebe über die Zeit konstant ist, wird sie nur einmal dargestellt. Ein Nachteil des Long-Formats ist also, dass einige Informationen auch redundant vorhanden sind. Jetzt wird auch klar, warum wir in diesem Eintrag auf die Informationen zum Verzehr von Snickers und Gummibärchen verzichten: Der Datensatz würde sonst so „breit“, dass man ihn nicht mehr übersichtlich darstellen könnte.

So soll der Datensatz dann im Wide-Format aussehen:

datenaufbereitung head daten wide

Durchführung

Um einen Datensatz zu transformieren werden bestimmte Variablen benötigt:

Bei der Umwandlung vom Long- zum Wide-Format wird eine Variable benötigt, die die Messung (zu verschiedenen Zeitpunkten/Begebenheiten) enthält. Diese wird im Folgenden als Measurement (Messung) bezeichnet. Im Süßigkeiten Datensatz ist dies die Anzahl an gegessenen Obststücken. Außerdem muss selbstverständlich eine Variable bestehen, die die Begebenheit der Messung klassifiziert, in unserem Datensatz der Tag. Es kann aber auch einen bestimmten Umstand einer Messung bezeichnen, beim Beispiel aus der Einleitung könnten die Temperaturen beispielsweise auch zur gleichen Zeit aber mit Unterschiedlichen Geräten gemessen werden. Die Variable wird im Folgenden Condition (Bedingung) genannt. Wir werden bei der Anwendung in der Software sehen, das zuweilen auch eine Variable vorhanden sein muss, die die Einheit, in unserem Fall die Mitarbeiter, spezifiziert.

Soll ein Datensatz vom Wide- ins Long-Format transformiert werden, so müssen mindestens zwei Variablen mit dem gleichen Datentyp vorhanden sein. Je nach Software muss außerdem pro Einheit eine konstante Benennung oder die Bezeichnung für die neu zu erstellende Condition-Variable definiert werden.

Wie bereits festgestellt wurde, ist der Datensatz, der bisher verwendet wurde, im Long-Format dargestellt. Um Verwirrung zu vermeiden, wird der Datensatz deshalb als „sweets_long“ bezeichnet. Bei der Durchführung in R, Stata und SPSS wird zunächst gezeigt, wie sich der Datensatz ins Wide-Format umwandeln lässt. Zu Demonstrationszwecken wird er dann erneut ins Long-Format transformiert.

R

Die baseR-Methode zum Reshape von Daten ist die Funktion reshape(). Häufig verwendete Funktionen sind außerdem melt() und cast() aus dem reshape2-Paket sowie gather() und spread() aus dem tidyr-Paket: Der Funktionsaufruf wird hier nur bei den letztgenannten besprochen, da die Funktionen als am intuitivsten gelten.

Der Datensatz, der ja bereits im Long-Format vorliegt, kann mit der spead()– Funktion ins Wide-Format umgewandelt werden. Zunächst muss selbstverständlich der Datensatz definiert werden. Spezifiziert werden müssen außerdem, wie bereits erwähnt, die Measurement- und Condition-Variable. Erstere, in unserem Fall „Obst“, wird an das Argument value übergeben. Die Condition-Variable, die von uns durch „Tag“ dargestellt wird, muss beim Argument key definiert werden.

Nach Ausführung des Befehls erhält man folgendes Resultat:

datenaufbereitung wide R

Wie gewünscht hat der Datensatz nur noch vier Beobachtungen, pro Mitarbeiter jedoch zehn Obst-Variablen, sowie eine PickUp-Variable, die über alle Tage konstant ist. Die neu erstellten Obst-Variablen sind alle mit der Bezeichnung der Tage benannt, es wird hier nicht direkt ersichtlich, dass es sich um die Beobachtungen des Obst-Verzehrs handelt. Optional können die Variablennamen deshalb noch angepasst werden. Der zugehörige Befehl ist in der untenstehenden Codebox zu finden. Dadurch sind die Variablen dann „obst_9“ für den 09.10.2017, „obst_10“ für den 10.10.2017 usw. benannt. Leider ist es mit der grundsätzlichen Funktionalität von spead() lediglich möglich eine zeitvariate Variable umzustrukturieren.

Mit gather() können die Informationen wieder ins Wide-Format gebracht werden. Dafür können dieselben Argumente verwendet werden wie beim Funktionsaufruf von spead(). Zusätzlich müssen hier noch zeitkonstante Variablen definiert werden. Dies sind in unserem Fall die Mitarbeiter und die PickUp-Variable. Die Ausführung des Befehls bringt folgendes Resultat:

datenaufbereitung long R

Da die Measurement-Variablen im Vorhinein umbenannt wurden, ist die Tag-Bezeichnung nun „obst_9“ usw. Um wieder mit einem Datum arbeiten zu können, müssten die Faktorstufen dieser Variable umbenannt und ggf. der Variablentyp angepasst werden (siehe für letztgenanntes auch den Blogeintrag zum Thema Datentypen). Ansonsten ist die Umstrukturierung gelungen und im Kern liegt der gleiche Datensatz vor wie zu Beginn.

## Reshape mittels tidyr: gather & spread 
# Long zu Wide: Spread  
sweets_wide1 <- spread(data = sweets_long, key = tag, value = obst) 

# Umbenennung der Variablen 
names(sweets_wide1)[3:12] <- paste0("obst_", c(9:13, 16:20)) 

# Wide zu Long: Gather 
sweets_long1 <- gather(data = sweets_wide1, key = tag, value = obst, -c(mitarbeiter, pickup)) 

Stata

Der Befehl reshape führt in Stata die gleichnamige Operation aus. Nach dem Schlagwort „reshape“ muss das Format spezifiziert werden, in das der Datentyp umgewandelt werden soll, also „wide“ oder „long“. In beiden Fällen muss die Measurement-Variable angegeben werden und im Gegensatz zu R auch eine Variable, die die Einheiten eindeutig kennzeichnet, als für den Süßigkeitendatensatz die Mitarbeiter-Variable, in anderen Fällen kann es jedoch auch eine ID sein. Der generelle Aufbau ist reshape format measurement, i(i) j(j), wobei „format“ durch „long“ oder „wide“ spezifiziert wird, measurement die entsprechende Variable, i die eben genannte Indexvariable darstellt und j die Condition angibt.

Dadurch ergibt sich für die Transformation von Long zu Wide der in der Codebox angegebene Befehl. Im Gegensatz zu R können auch mehrere Measurement-Variablen angegeben werden. Da Variablen mit Datumsformat in Stata intern nicht so abgespeichert wird wie es angezeigt wird, wird die Obstvariable für die verschiedenen Tage nicht anhand des angezeigten, sondern des intern gespeicherten Datums bezeichnet. Deshalb können auch hier die Variablennamen noch geändert werden. Führt man den unten dargestellten Befehl aus, so erhalten die Daten im Wide-Format folgendermaßen:

datenaufbereitung wide stata

Aus Platzgründen werden nur die ersten Obst-Variablen dargestellt.

Für den Reshape in die umgekehrte Richtung (Wide zu Long) muss eine Angabe für j nicht zwingend gegeben sein. Hierbei handelt es sich nur um eine Benennung für die zu erstellende Condition-Variable. Als Measurement können entweder mehrere Variable angegeben werden oder, wie bei Stata generell möglich, eine einheitliche Abkürzung aller entsprechenden Variablen. In unserem Fall ist dies der Wortstock „obst“. Der Ausschnitt des so resultierenden Datensatzes zeigt, dass der ursprüngliche Datensatz wiederhergestellt ist:

datenaufbereitung long stata

Benötigt man die Restrukturierung nur temporär und will danach wieder ins ursprüngliche Format zurück, so kann ganz einfach der Befehl reshape long um ins Long- oder reshape wide um ins Wide-Format zurückzukehren, verwendet werden.

*Long zu Wide: 
reshape wide obst, i(mitarbeiter) j(tag) 

*Wide zu Long: 
reshape long obst, i(mitarbeiter) j(tag) 

SPSS

In SPSS erfolgt die Transformation mit den Befehlen CASETOVARS bzw. VARSTOCASES, je nachdem, ob Fälle in Variablen umgewandelt werden sollen (Long- zu Wide-Format) oder vice versa.

Beim Reshape von Long zu Wide müssen zwei Variablen definiert werden: die ID-Variable und die Indexvariable. Erstere kennzeichnet die Einheiten, im Beispiel also die Mitarbeitervariable. Die Indexvariable kennzeichnet die unterschiedlichen Zeitpunkte/Messungen/Beobachtungen. Dies ist im Beispiel die Tagesvariable. Sobald diese Sonderzeichen oder beispielsweise Punkte enthält, ist eine logische Benennung der zu erstellenden Variablen nicht mehr möglich und es werden die Namen „v1“ usw. vergeben. Anhand des Labels kann der Ursprung jedoch trotzdem erkannt werden.

Bei der Transformation erkennt SPSS automatisch, welche Variablen zeitkonstant sind und welche über die Zeit variieren und somit umstrukturiert werden müssen. Im Wide-Format resultiert der folgende Datensatz. Es ist zu beachten, dass die Variablennamen hier noch nicht angepasst wurden.

datenaufbereitung wide SPSS

Die Syntax zum Reshape von Wide zu Long ist ebenfalls in der Codebox unten dargestellt. Diese gilt für unser Beispiel, in dem unsere Variablen nur ein Measurement darstellen. Für die Bezeichnung der Tag-Variable wird hier eine Indexierung gewählt, die später noch umgewandelt werden kann, alternativ könnten auch die Variablennamen verwendet werden. Die Indexoption muss dann /INDEX = Index1(obst) lauten.

Auch in SPSS ist es möglich mehrere Variablen umzustrukturieren. Bei der Transformation zum Long-Format können in der Syntax zusätzliche /MAKE-Optionen hinzugefügt werden.

datenaufbereitung long SPSS

*Long zu Wide: 
SORT CASES BY mitarbeiter tag. 
CASESTOVARS 
  /ID=mitarbeiter 
  /INDEX=tag 
  /GROUPBY=VARIABLE. 

*Wide zu Long: 
VARSTOCASES 
  /ID=id 
  /MAKE obst FROM v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 
  /INDEX=tag(10) 
  /KEEP=mitarbeiter pickup 
  /NULL=KEEP. 

Zusammenfassung

Der Hintergedanke beim Reshape von Daten ist in R, Stata und SPSS gleich. Die Umsetzung unterscheidet sich jedoch besonders auch im Hinblick auf die Variablen/Informationen, die angegeben werden müssen.
Falls es mal mit der Datenaufbereitung nicht so klappt, helfen wir bei STATWORX gerne dabei, gut in Form zu kommen. Jessica Gerhard Jessica Gerhard

Hauptanalyse

Unsere Archäologen stehen vor ihrem analytischen Ziel, die Voraussetzungsprüfung der ANOVA ist überstanden. Zur Erinnerung noch einmal die Forschungsfrage:

H1: Je länger die Löwen bei den Zirkusspielen im Einsatz sind, desto höher ist ihr Gewicht.

Da alle Daten (Gewicht als metrische und Monate im Zirkus als kategoriale Variable) vorbereitet sind, kann es direkt losgehen. Der Stata-Befehl für die Analyse ist:

anova gewicht monate_kat

und erzeugt die untenstehenden Ergebnisse.

Ergebnisse der ANOVA

Insgesamt liegen N = 517 Fälle für die Analyse vor, der erklärte Varianzanteil beträgt R^2 = 0.7505 = 75.05%. Die kategorisierten Monate können also einen sehr hohen Varianzanteil am Gewicht erklären. Darunter folgt eine Zeile für Model und eine Zeile für die Monate. Beide Zeilen sind in diesem einfachen Modell gleich was die Werte angeht (SS steht für Sum of Squares). Für Nutzer von SPSS sei an dieser Stelle gesagt, dass hier nur eine der beiden Zeilen aufgeführt wird und mit „zwischen den Gruppen“ (engl.: between groups) beschriftet ist. Vor allem der englische Begriff ist in der statistischen Fachwelt sehr gebräuchlich und hätte von Stata auch verwendet werden sollen. Die Zeile „residuals“ wird bei SPSS „innerhalb der Gruppen“ (eng.: within groups) genannt, auch hier ist der englische Fachbegriff durchaus in deutscher Fachliteratur üblich.
Zusätzlich findet sich beim between-Effekt die Angabe des F-Werts sowie der dazu gehörende Signifikanzwert. Dieser ist mit p le .001 signifikant, so dass die Monate im Zirkus einen signifikanten Effekt auf das Gewicht haben. Eine Aussage darüber, welche Kategorien der Monate hier genau signifikant sind und welchen Unterschied diese bezüglich des Gewichts haben, kann an dieser Stelle noch nicht getroffen werden. Dokumentiert wird das Ergebnis der ANOVA mit F(df1,df2) = F-Wert, p-Wert. In unserem Fall also mit F(5,511) = 311.49, p le .001.
In einigen Fachbereichen ist es üblich die Effektstärke der Analyse mit anzugeben. Ohne auf die Bedeutung dieser Maßzahl näher einzugehen, sei hier kurz gesagt, dass eine Effektstärke eine Aussage darüber trifft, ob ein gefundener Zusammenhang einer Analyse auch eine praktische Relevanz besitzt. Für die ANOVA lässt sich eta^2 als Effektstärke einfach berechnen:

 eta^2 = frac{ SS_{between} }{ SS_{top} } = frac{415662.19} {552039.08} = 0.753

In einer einfaktoriellen Varianzanalyse wie dieser lässt sich eta^2 einfach mit 100 multiplizieren, und es gilt:

 R^2 = eta^2

Somit lässt sich die Interpretation von eta^2 ebenso einfach auf den Korrelationskoeffizienten r herunterbrechen, welcher einfach mit

r = sqrt{R^2} = 0.868

zu berechnen ist (Field 2013: 472). Auch hier zeigt sich der extrem starke Effekt der ANOVA. Stata kann die Effektstärke auch direkt nach der ANOVA berechnen, dafür muss folgender Befehl verwendet werden

estat esize

Da eta^2 mathematisch einen Bias aufweist (Levine 2002), wird meist Omega-Quadrat als Maß der Effektstärke für eine ANOVA angegeben. Stata kann dies mittlerweile von Haus aus berechnen mit

estat esize, omega

Das Ergebnis ist omega^2 = 0.7502 , hinsichtlich der Grenzwerte gelten die gleichen wie für eta^2 (Kirk 1996). Es liegt also ein starker Effekt vor. Doch wie unterscheiden sich nun die Monate im Detail?

posthoc-Test

Zur Erinnerung wie schwer die Löwen durchschnittlich in den einzelnen Monatskategorien sind, wird die Tabelle aus Teil 2 an dieser Stelle noch einmal gezeigt.

Deskriptive Übersicht

Stata bietet im Nachgang der ANOVA mehrere posthoc Befehle an. Mit

pwcompare monate_kat, group effects mcompare(bon)

würden alle Monatskategorien, d.h. alle möglichen Kombinationen, miteinander verglichen werden. Dies erzeugt eine recht große Tabelle, die hier nicht abgebildet wird, da sie für uns nicht von Interesse ist. Da es das Ziel der Forscher war zu untersuchen, ob mit längerem Aufenthalt die Löwen bei den Zirkusspielen an Gewicht zunehmen, interessiert uns im Moment nur, ob Löwen, die in der nächsthöheren Kategorie von Monaten sind, sich gegenüber der vorherigen Kategorie unterscheiden. Der Befehl „pwcompare“ kann uns hier jedoch nicht weiterhelfen, so dass wir nunmehr

contrast ar.monate_kat, mcompare(bon) effects

durchführen müssen. Mit der Präfix “ar.” weisen wir Stata an, beginnend mit der ersten Kategorie (weniger als 6 Monate) immer zur nächsthöheren Kategorie zu vergleichen. Die Ergebnisse sind in der unten stehenden Tabelle zu finden.

Tabelle posthoc

Die Kategorie „6-10 Monate“ unterscheidet sich von der Kategorie „le 6 Monate“ um 29.71. Der Kontrast ist dabei nichts anderes als die Differenz der Mittelwerte dieser Kategorien, also 131.17 – 101.46 = 29.71. Dabei wird immer die zuletzt genannte Kategorie des Kontrasts von der zuerst genannten Kategorie abgezogen. Da der Wert positiv ist, bedeutet dies also, dass die Löwen mit 6-10 Monaten im Zirkus durchschnittlich 29,71kg schwerer sind als Löwen die weniger als 6 Monate im Zirkus sind. Dieses Ergebnis ist mit t = 12.97, p le .001 signifikant. Als posthoc Test wurde Bonferroni durchgeführt. Eine Diskussion der unzähligen Tests kann an dieser Stelle nicht gegeben werden und es sei an dieser Stelle auf weiterführende Fachliteratur verwiesen (Field 2013: 458 ff.). Auch wenn Bonferroni recht konservativ rechnet, so kann mit Blick auf diese Analyse gesagt werden, dass keine andere Testmethode ein anderes Ergebnis hervorbringt.
Der Blick auf die Tabelle verrät also, dass die Löwen mit zunehmender Zahl an Monaten schwerer werden, zunächst legen sie 29.71kg (p le .001) zu, dann 33.41kg (p le .001), die Gewichtszunahme verringert sich dann auf 14.91kg (p le .001) beim Vergleich von „16-20 Monate“ vs. „11-15 Monate“ und beim darauf folgenden Vergleich liegt die Zunahme lediglich bei durchschnittlich 4.17kg, ist aber mit p = .720 nicht signifikant. Im Vergleich der letzten und vorletzten Kategorie miteinander nehmen die Löwen dann wieder ab, der Kontrast liegt bei -15.15 (p le .01).
Mit Hilfe des komfortablen Befehls „margins“ bzw. „marginsplot“ lässt sich nun folgende Grafik zu dieser Veränderung anzeigen, wobei auf den Code, der trotz der Einfachheit der Darstellung relativ lang ist, an dieser Stelle verzichtet werden soll.

Abbildung zu Kontrasten - Gewicht und Monate im Zirkus

Auch wenn die obenstehende Grafik inhaltlich bereits die Wünsche der Forscher erfüllt, soll eine weitere erzeugt werden (siehe unten). Diese Grafik zeigt den Wert des Kontrasts zwischen den aufsteigenden Kategorien der Monate auf. Zusätzlich wurde ein rote Linie am Wert für 0kg abgetragen, welche einmal durch das Konfidenzintervall durchbrochen wird. Bei „21-25 vs. 16-20“ Monate ist der Kontrast +4.17kg, es liegt also noch eine leichte Gewichtszunahme vor, das Konfidenzintervall liegt jedoch zwischen -3.20 und +11.53. Mit einer 95%igen Wahrscheinlichkeit liegt der Kontrast also in diesem Bereich und umschließt den Wert 0. Das Ergebnis ist somit auch ohne den eigentlich p-Werten zu kennen, nicht signifikant, da der Kontrast anstatt positiv (+4.17kg) auch negativ sein kann (bis -3.20kg) und die inhaltliche Interpretation komplett anders wäre.

Abbildung zu Kontrasten - Veränderung von Gewicht und Monaten im Zirkus

Die Forscher sehen ihre Hypothese als größtenteils bestätigt, fragen sich aber nach der ersten Euphorie, ob denn nicht das Alter der Löwen einen Nebeneffekt hat, den man statistisch Kovariate nennt und zu einer Kovarianzanalyse (ANCOVA) führt.

Referenzen

  1. Cohen, J. (1988): Statistical Power Analysis for the Behavioral Sciences. Hoboken: Taylor and Francis
  2. Field, Andy (2013): Discovering Statistics Using SPSS. 4th Edition, SAGE: London
  3. Kirk, R. E. (1996): Practical significance: A concept whose time has come. Educational and Psychological Measurement 56(5), S. 746-759
  4. Levine, T. R., & Hullett, C. R. (2002). Eta Squared, Partial Eta Squared, and Misreporting of Effect Size in Communication Research. Human Communication Research 28(4), S. 612–625

Nick Bornschein Nick Bornschein

Obwohl wir beim letzten Mal nur um Haaresbreite dem Sog des schwarzen Lochs entkommen sind, welches sich in der Nähe der Welt des Wilcoxon-Rangsummen-Tests befindet (Die ganze Geschichte gibt es hier!), lassen wir uns nicht einschüchtern und setzen unsere Entdeckungsreise durch das nicht-parametrische Universum fort.

Den nächsten Planeten, den wir dabei erkunden wollen, könnte man auf den ersten Blick mit der Welt des Wilcoxon-Rangsummen-Tests verwechseln (Lieber daran interessiert? Dann klicke hier.). Beide Welten haben eine ähnliche Flora und Fauna, doch schaut man genau hin, gibt es kleine, aber bedeutende Unterschiede. Acissej, unsere Botanikerin an Bord und im ganzen Universum von den großfüßigen Blaustirnblatthühnchen gefürchtet, kennt sich in diesem Bereich bestens aus. Sie führt daher unsere Expedition zur Erforschung der Welt des Wilcoxon-Vorzeichen-Tests an.

Zwei Welten – Gemeinsamkeiten und Unterschiede

Bei der Erkundung wird als erstes eine Gemeinsamkeit beider Welten deutlich: Der Wilcoxon-Vorzeichen- und der Wilcoxon-Rangsummen-Test sind jeweils die nicht-parametrische Alternative für den t-Test. Ersterer ist das Pendant zum t-Test für abhängige und letzterer zum t-Test für unabhängige Stichproben (Was ist ein t-Test? Hier erfährst du es.). Nicht-parametrisch bedeutet, dass beide Tests weniger strenge Annahmen über die Verteilung der abhängigen Variable machen. Zusätzlich teilen beide die Eigenschaft, dass sie die Mediane von zwei Gruppen auf signifikante Unterschiede testen. Acissej ergänzt noch scherzend, dass sich der Erfinder beider Tests – Frank Wilcoxon – auch in beiden Bezeichnungen verewigt hat.

Bei den vielen Gemeinsamkeiten beider Welten gibt es jedoch einen großen Unterschied zwischen ihnen: Die Situation, in der die Anwendung des Tests angemessen ist. Der Wilcoxon-Vorzeichen-Test wird ausschließlich bei abhängigen Stichproben angewandt. Doch was genau bedeutet Abhängigkeit überhaupt? Häufig bedeutet es, dass bei verschiedenen Personen ein bestimmtes Merkmal zwei Mal gemessen wurde. In diesem Fall spricht man von Messwiederholung. Abhängigkeit kann aber auch bedeuten, dass man die Werte von zwei Person durch eine Gemeinsamkeit in Verbindung bringen kann. Da fällt Acissej sofort ein gutes Beispiel ein: Wenn sich zwei Mitglieder unserer Crew eine Kajüte teilen müssen und der eine schlechte Laune hat, weißt du sofort, wie es dem anderen geht. Ob Sie wollen oder nicht, Ihre Laune ist voneinander abhängig! Bei Abhängigkeiten zwischen Messungen gilt jedoch, dass man nur solche berücksichtigen kann, die eine gewisse Systematik aufweisen(1). Beispielsweise kann die Laune eines Crewmitgliedes die Laune aller Mitglieder am Bord beeinflussen. Da es aber nicht (einfach) zu erfassen ist, wer sich mit wem unterhält und sich dadurch beeinflusst, ist diese eine Form von Abhängigkeit, die man statistisch nicht berücksichtigen würde.

Die Tiefen der Welt des Wilcoxon-Vorzeichen-Tests

Acissej hat heute extrem gute Laune und das perfekte Beispiel parat, um zu erklären, wie die Welt des Wilcoxon-Vorzeichen-Tests im Detail beschaffen ist. Dazu kramt sie einen Zettel aus ihrer Tasche, auf den wir folgendes Lesen können:

Pflanzennummer Größe beim Einpflanzen [cm] Größe am nächsten Tag [cm]
1 20,03 21,39
2 20,13 21
3 20,23 21,35
4 20,15 20,75
5 20,46 20,25
6 20,43 20,68
7 20,67 20,53
8 20,35 21,05
9 20,85 20,97
10 20,08 20,62
11 20,5 20,81
12 21,04 20,92
13 20,88 20,95
14 19,94 20,74
15 20,08 20,63

Ihr Beispiel handelt natürlich von Pflanzen. Acissej hat ein kleines Experiment durchgeführt und möchte jetzt wissen, ob es geglückt ist. Sie hat gestern 15 neue Pflanzen in ihrer Kajüte eingepflanzt und gemessen, wie groß diese waren. Zum Einpflanzen hat sie aber nicht herkömmlichen Boden, sondern Kaffeesatz verwendet. Auf diese Idee kam sie als sie vor kurzem auf einer anderen Welt gesehen hat, dass die Einheimischen dort Pflanzen auf den Resten anderer Pflanzen züchten. Da sie als Botanikerin weiß, wie viele Nährstoffe in Kaffee enthalten sind und sie selbst jeden Tag mindestens 10 Tassen trinkt, erschien ihr die Verwendung von Kaffeesatz eine geniale Idee. Heute Morgen hat Sie gleich mal nachgemessen und alles auf dem Zettel notiert. Jetzt möchte sie wissen, ob die Pflanzen im Schnitt gewachsen sind, damit sie sie nicht quält, falls alles eine blöde Idee war.

Da „leider“ nur 15 Pflanzen in ihre Kajüte passen und die Messungen voneinander abhängig sind, empfiehlt sich die Anwendung des Wilcoxon-Vorzeichen-Tests. Dieser bildet zuerst die Differenzen aus beiden Zeitpunkten: Größe beim Einpflanzen – Größe am nächsten Tag (siehe Tabelle 2). Anschließend wird für jede Differenz das Vorzeichen notiert und Ränge vergeben. Bei der Vergabe der Ränge wird das Vorzeichen ignoriert (siehe Tabelle 2).

Pflanzennummer Differenz Ränge Vorzeichen
1 -1,36 15
2 -0,87 13
3 -1,12 14
4 -0,6 10
5 0,21 5 +
6 -0,25 6
7 0,14 4 +
8 -0,7 11
9 -0,12 3
10 -0,54 8
11 -0,31 7
12 0,12 2 +
13 -0,07 1
14 -0,8 12
15 -0,55 9

Die Ränge werden letztlich zu zwei Rangsummen aufsummiert. Eine Rangsumme für Ränge mit positiven (T+) und eine für Ränge mit negativen Vorzeichen (T-). Um zu testen, ob sich die Mediane in beiden Gruppen unterscheiden, verwendet der Test die Rangsumme der positiven Differenzen T+. Diese ist in unserem Fall 11. Für T+ wird der dazugehörige p-Wert anschließend mit einer der beiden folgenden Methoden berechnet. Entweder, indem die Rangsumme an der Anzahl der Personen in der Gruppe relativiert und durch ihren Standardfehler geteilt wird oder, indem der p-Wert exakt berechnet wird, mit Hilfe einer Simulation. Da in den Daten jeder Wert nur einmal vorkommt und die Stichprobe insgesamt kleiner als 40 ist, muss die exakte Methode angewendet werden. Der exakte p-Wert für die Pflanzengrößen ist 0,003 und das Ergebnis daher signifikant. Man kann also davon ausgehen, dass der Median der Pflanzengröße nach einem Tag (20,81) signifikant größer ist als zum Zeitpunkt des Einpflanzens (20,35). Somit sind nicht nur die Pflanzen von Acissei im Schnitt gewachsen, sondern wir können auch davon ausgehen, dass Kaffeesatz bei weiteren Pflanzen geeignet ist, um als Nährboden zu fungieren. Auf diese Freude holt sich Acissej doch erstmal einen Kaffee!

Referenzen

  1. Eid, M., Gollwitzer, M. & Schmitt, M. (2015). Statistik und Forschungsmethoden (4. Überarbeitete und erweiterte Auflage). Weinheim: Beltz. S. 368.
  2. Wilcoxon, F. (1945). Individual comparisons by ranking methods. Biometrics, 1, 80-83.

Alexander Niltop Alexander Niltop

Ist der Datensatz in das gewünschte Statistikprogramm eingeladen, gibt es meist noch einige Stolperfallen, bevor man mit der Anwendung der Methode beginnen kann. Dies liegt oft daran, dass die Variablen nicht dem richtigen Typ zugewiesen sind. Wurden Werte, die eigentlich Zahlen sind, als Strings (Zeichenketten) abgespeichert, können beispielsweise keine Lagemaße der Verteilung berechnet werden. Nach dem Import der Daten sollte deshalb im nächsten Schritt der Datentyp der Variablen überprüft werden, der von der Statistiksoftware meist automatisch – und nicht immer richtig – zugewiesen wird.

Datensatz

Im vorherigen Beitrag wurden die verwendeten Daten bereits kurz vorgestellt. Es handelt sich dabei um die Aufzeichnung des Süßigkeitenkonsums von vier STATWORX-Mitarbeitern, deren realer Name durch den jeweiligen Lieblingsstatistiker ersetzt wurde. Der Kopf der Daten ist unten abgebildet.

Datenuebersicht

Datentypen

In der Informatik gibt es unzählige Datentypen, die vor allem durch ihren Speicherbedarf identifiziert werden. Die Aufzählung der Variablentypen wird hier stark vereinfacht vorgestellt. Generell können Variablen qualitativ als Strings (Zeichenketten) oder quantitativ in Zahlenform vorliegen. Zweitere lassen sich in Ganzzahlen und Dezimalzahlen unterscheiden.

Ein Spezialfall von Strings ist der Faktor. Dies ist eine ordinale Variable, die nur eine begrenzte Anzahl an Ausprägungen aufweist. Dabei wird jede Ausprägung als ein numerischer Wert dargestellt und mit Wertelabels versehen. Beispiel ist die Frage nach der Zufriedenheit mit einem Produkt, wobei mit den Zahlen 1 bis 5 die Zufriedenheit von „sehr unzufrieden“ bis „sehr zufrieden“ ausgedrückt werden kann.

Zu unterschieden ist außerdem das Messniveau von Daten. Daten können sowohl nominal sein, also ohne Reihenfolge, wie das Geschlecht oder ordinal, also geordnet und somit mit einer festen Reihenfolge, wie bei der Verwendung von Altersklassen. Weitere Messniveaus sind die Intervall- und die Verhältnisskala. Bei der Verhältnisskala bilden gleiche Intervalle auf der Skala gleiche Differenzen ab. Der Unterschied zwischen dem Wert 10 und 20 gibt also die gleiche Abweichung an wie die Differenz zwischen 30 und 40. Außerdem gibt es einen natürlichen Nullpunkt. Ein Beispiel hierfür ist das Längenmaß. Bei der Intervallskala gibt es zwar auch gleiche Abstände zwischen den einzelnen Ausprägungen, jedoch keinen absoluten Nullpunkt. Ein übliches Beispiel hierfür ist die Temperaturmessung in Grad Celsius.

Skala Anforderung Beispiel Ausprägungen
nominal Unterschiedlichkeit Geschlecht männlich, weiblich
ordinal Ordnung Süßigkeitenkonsum keiner, wenig, viel
Intervall Abstände gleich Grad Celsius 30, 43
Verhältnis natürlicher Nullpunkt Meterangabe 0, 1,00, 1,11, …

Bei Strings können innerhalb der Statistiksoftware interne Typen vorhanden sein, die die Zeichenkette näher klassifizieren, wie beispielsweise ein Datumsformat.

R

Die Struktur der Daten kann in R mit str() abgefragt werden. Für den Süßigkeiten-Datensatz erhalten wir folgendes Ergebnis:

Datensturktur in R - vorher

Der Typ einzelner Variablen (bzw. Vektoren) kann mit class() abgefragt werden. Es zeigt sich, dass die meisten Typen bereits richtig erkannt wurden. Generell können beliebige Datentypen mit den Funktionen as.<i>datentyp</i>() zugewiesen werden, beispielsweise as.numeric() oder as.character().

Die Mitarbeiter-Variable weist nur vier Ausprägungen auf. R hat dies erkannt und die Variable automatisch als Faktor mit den Werten 1 bis 4 kodiert und die Ausprägungen mit „Bayes“, „Gauss“, usw. benannt. So kann Speicherplatz gespart werden. Dass die Variable automatisch in einen Faktor umgewandelt wird liegt daran, dass bei data.frame die stringsAsFactors-Option automatisch auf TRUE gesetzt wird.

Die vier Variablen zum Süßigkeiten-Verzehr sind alle richtig als numerische Werte erkannt worden. Was jedoch auf den ersten Blick nicht klar wird, ist, dass die PickUp-Variable nicht angibt, wie viele Riegel am Tag verspeist wurden, sondern welche Sorte der Mitarbeiter am liebsten mag. Dabei soll der Wert 1 für die Sorte “Choco” stehen, 2 für “Choco & Caramel” und 3 für “Choco & Milch”. Ziel ist eine Faktorvariable, wie es auch bei den Mitarbeitern der Fall ist. Die Umsetzung ist in der Codebox unten zu finden. Je nachdem, ob der Faktor ordinale Werte aufweist oder nicht, kann die factor()– oder ordered()-Funktion verwendet werden. Die die Sorten keine Reihenfolge aufweisen, wird hier die factor()– Funktion verwendet.

Die Obst-Variable, soll auf ein Zehntel genau die Anzahl an gegessenen Obststücken darstellen. Leider wurde diese hier als String erkannt. Das liegt häufig am Dezimaltrennzeichen. Außerdem kann das Problem auftauchen, wenn in der Variable Strings, wie „keine Angabe“, enthalten sind.

Bleibt noch die Datumsvariable. Eine Option zur Umformung gängiger Datumsformate ist die as.Date()-Funktion. Mit dem format-Argument sollte die Struktur übergeben werden. In der Codebox unten ist die Umwandlung ins Datumsformat dargestellt. Allerdings gibt es in R noch viele andere, ausgefeiltere Wege, um mit Datumsformaten zu arbeiten, wie beispielsweise das lubridate-Paket.

# Erstellen eines (ungeordneten) Faktors aus der PickUp-Variable 
sweets$pickup <- factor(sweets$pickup, 
levels = c(1, 2, 3), 
labels = c("Choco", "Choco & Caramel", "Choco & Milch")) 

# Umwandlung der Obst-Variable ins Zahlenformat 
sweets$obst <- as.numeric(sweets$obst) 

# Umwandlung der Tag-Variable ins Datumsformat 
sweets$tag <- as.Date(sweets$tag, format ="%Y-%m-%d")

Nach der Anpassung der Datentypen zeigt ein erneuter Blick auf die Daten, dass nun alle Variablen den gewünschten Typ aufweisen.

Datensturktur in R - nachher

Stata

Generell wird in Stata nach Speichertyp und Anzeigeformat unterschieden. Ersterer zeigt an, wie viel Platz die Variable im Speicher belegt. Hierbei kann auch erkannt werden, ob es sich um eine Zeichenkette (= „str“ ; Zahl am Ende gibt die Länge an) oder um numerische Werte (= „byte“, „float“, „long“, „double“) handelt. Mit dem describe-Befehl kann die Struktur der Variablen angesehen werden.

Datensturktur in Stata - vorher

Kommen wir zunächst zur PickUp-Variable, die auch hier als numerisch eingelesen wurde, aber als Faktor definiert werden soll. Dafür muss als erstes, unabhängig von der Variable, eine Benennung definiert werden. Diese kann dann auf eine oder auch mehrere Variablen angewendet werden. In der Codebox unten wird zunächst mit dem label define-Befehl ein Label definiert, dass dann mit dem label values-Befehl auf die Variable angewandt wird.

Zunächst erscheint es vielleicht etwas umständlich, dass Label separat zu definieren und zuzuweisen, es gibt jedoch häufig Labels, die öfter verwendet werden, wie beispielsweise die Benennung der Werte 0 und 1 als „nein“ und „ja“ oder die Benennung einer Zufriedenheitsskala. Übrigens: Die numerischen Werte bei einer bereits gelabelten Variable können mit der Option nolabel beim tabulate-Befehl angesehen werden.

Als nächstes soll nun die Obst-Variable von einer Zeichenkette ins Zahlenformat umgewandelt werden. Dies wird in Stata mit dem destring-Befehl bewerkstelligt. Mit dem tostring-Befehl geht es in die umgekehrte Richtung, also vom Zahlenformat zum String. Bei beiden Befehlen muss mit der generate-Option ein neue Variable definiert werden. Der Grund dafür, dass der Variablentyp falsch erkannt wurde, ist das Komma als Dezimaltrenner (statt einem Punkt). Deshalb muss die dpcomma-Option angegeben werden, welche das Komma als Dezimaltrennzeichen definiert.

Das Datum sollte in den entsprechenden Typ umgewandelt werden, falls dieses für die Analyse wichtig ist, beispielsweise im Rahmen der Zeitreihenanalyse. Auch hier muss eine neue Variable erstellt werden, die den Tag im Datumsformat anzeigt. Wie auch bei R muss nach dem Variablennamen das Format, in der das Datum vorliegt, spezifiziert werden. Die so entstandene Variable wird nun im Stata-eigenen Format definiert. Mit dem Format-Befehl muss dann noch die Struktur ausgewählt werden, mit der das Datum dargestellt werden soll. Bei „%td“ handelt es sich beispielsweise um die Anzeige des Datums ohne Zeitangabe.

Die Mitarbeiter-Variable wird in Stata, im Gegensatz zu R, nicht automatisch als Faktor gespeichert. Sie ist als String gespeichert, was nicht zwingend verändert werden muss. Die Transformation ist dennoch unten dargestellt und kann hilfreich sein, wenn man die Variable aus Speicherplatzgründen umwandeln möchte.

Hierfür kann der encode-Befehl benutzt werden. Mit der label()-Option wird der neuerstellten numerischen Variable gleich das Label übergeben.

* Definition der PickUp-Variable als Faktor 
label define chocolabel 1 "Choco" 2 "Choco & Caramel" 3 "Choco & Milch" 
label values pickup chocolabel 

* Umwandlung der Obst-Variable ins Zahlenformat 
destring obst, generate(obst_destring) 

* Umwandlung der Tag-Variable ins Datumsformat 
gen tag_date = date(tag, "YMD") 
format tag_date %td 

* Definition der Mitarbeiter-Variable als Faktor 
encode mitarbeiter, gen(mitarbeiter_faktor) label()

Nach Ausführung der Befehle wagen wir erneut einen Blick auf die Struktur der Daten. Im Vergleich zum Resultat in R, wurden in Stata viele neue Variable generiert. Selbstverständlich können die ursprünglichen Variablen auch entfernt werden. In R und auch SPSS ist es generell leichter bestehende Variablen zu überschreiben als in Stata. Das ermöglicht einen besseren Überblick über die Daten, kann jedoch auch gefährlich werden, wenn Variablen unabsichtlich überschrieben werden.

Datensturktur in Stata - nachher

SPSS

Als nächstes wird die Anpassung des Datentyps in SPSS vorgestellt. Die Variablenansicht ist gut geeignet, um sich grundlegende Eigenschaften der Daten anzusehen. Für uns ist hier die Spalte „Typ“ von Interesse. Diese gibt an, ob es sich beispielsweise um einen String, numerische Werte oder ein Datum handelt. In einer separaten Spalte wird das Messniveau dargestellt.

Über die Variablenansicht können auch händisch Änderungen vorgenommen werden. Dies kann jedoch leichter zu Fehlern führen, außerdem wollen wir hier die Syntax von SPSS vorstellen. So können die Änderungen auch für mehrere Variablen gleichzeitig ausgeführt werden. Zunächst, wie bisher auch, der Blick auf die Struktur der eingelesenen Daten:

Datensturktur in SPSS - vorher

Wieder wird die Datumsvariable nicht im vorgesehenen Typ erkannt. Außerdem soll die Pickup-Variable als gelabelter Faktor definiert werden. Die Obst-Variable mit den Dezimalwerten stellt in der Regel kein Problem dar, weil SPSS sowohl Punkt als auch Komma als Dezimaltrenner anerkennt. Aus diesem Grund wird der Variable auch automatisch eine Dezimalstelle zugeordnet.

Beginnen wir mit der Anpassung der PickUp-Variable. Mit dem VALUES LABELS-Befehl wird den numerischen Werte eine Bezeichnung übergeben. In der Datenansicht von SPSS kann über den Button „Wertelabels“ zwischen Anzeige der numerischen und gelabelten Werte umgeschaltet werden. Weitere Anpassungen müssen für die Variable nicht getroffen werden.

Um die Datumsvariable in das entsprechende Format umzuwandeln muss als erstes mit dem NUMBER-Befehl eine neue Variable erstellt werden. Nach der zu transformierenden Variable wird als zweites Argument die Reihenfolge des Datums erwartet. Eine direkte Umwandlung ist jedoch auch mit dem ALTER TYPE-Befehl möglich. Nähere Informationen zum Datumstyp sind hier zu finden.

Außerdem wird dargestellt, wie sich die String-Variable „Mitarbeiter“ in einen Faktor transformieren lässt. In diesem Beispiel hat der Anwender dadurch, außer geringerem Speicherplatz, keinen Vorteil, handelt es sich jedoch um eine Variable mit ordinalem Messniveau, muss diese Umwandlung erfolgen. Mit dem AUTORECODE-Befehl wird die String-Variable bequem in einen gelabelten, numerischen Faktor umgewandelt. Die Nummerierung erfolgt alphabetisch. Dies stellt hier kein Problem dar, bei einem Faktor mit ordinalem Messniveau kann dies jedoch zur Falle werden, wenn die Nummerierung automatisch erfolgt. Die (leider) einfachste Möglichkeit damit umzugehen ist, alle Werte einzeln mit dem RECODE-Befehl in numerische Größen umzustrukturieren und mit dem bereits bekannten Befehl zu labeln. Aus diesem Grund ist in der Codebox zusätzlich noch dargestellt, wie sich die Strings in Faktoren mit beliebigen Ausprägungen/beliebiger Reihenfolge umwandeln lassen.

Generell lässt sich der Variablentyp mit dem ALTER TYPE-Befehl verändern. Nach den Anpassungen blicken wir wieder auf die Variablentypen in der Variablenansicht.

Datensturktur in SPSS - nachher

Sowohl die neu erstellte Variable „tage_date“ als auch die transformierte Tag-Variable liegen nun im Datumsformat vor. Aus der String-Mitarbeiter-Variable wurden zwei Faktoren erstellt. Eine der beiden lässt sich sehr einfach generieren (mit AUTORECODE), die Erstellung der zweiten ist eher aufwändiger. Das Resultat der beiden ist jedoch sehr ähnlich: Beide weisen einen numerischen Typ als auch Wertelabels auf. Auch bei der PickUp-Variable werden jetzt Labels angezeigt.

* Definition der PickUp-Variable als Faktor 
VALUE LABELS pickup 1 "Choco" 2 "Choco & Caramel" 3 "Choco & Milch". 
EXECUTE. 

* Umwandlung der Obst-Variable ins Zahlenformat nicht notwendig, Komma automatisch als Dezimaltrenner erkannt. 

* Umwandlung der Tag-Variable ins Datumsformat 
COMPUTE tag_date=NUMBER(tag, SDATE10). 
FORMATS tag_date (SDATE10). 
EXECUTE. 

* Oder direkte Transformation des Datums:  
ALTER TYPE tag (SDATE10). 

* Definition der Mitarbeiter-Variable als Faktor 
AUTORECODE mitarbeiter /INTO mitarbeiter_faktor. 

* Mit beliebiger Nummerierung der Mitarbeiter-Variable 
RECODE mitarbeiter (CONVERT) ("Bayes" = 1) ("Pearson" = 2) ("Laplace" = 3) ("Gauss" = 4) INTO mitarbeiter_haendisch. 
VALUE LABELS mitarbeiter_haendisch 1 "Bayes" 2 "Pearson" 3 "Laplace" 4 "Gauss". 
EXECUTE.

Zusammenfassung

Dieser Blogbeitrag versucht die häufigsten Probleme im Zusammenhang mit Datentypen in R, Stata und SPSS aufzuzeigen. Es zeigt sich, dass der gleiche Schritt zur Datenaufbereitung, nämlich die Anpassung des Variablentyps, in den verschiedenen Softwareprogrammen völlig unterschiedlich umgesetzt wird. Auch die Transformation zwischen Typen innerhalb eines Statistikprogramms ist leider oft nicht intuitiv verständlich. Jessica Gerhard Jessica Gerhard

Im vorherigen Beitrag zur logistischen Regression wurde aufgezeigt, dass die absoluten Koeffizienten innerhalb logistischer Regressionsmodelle aufgrund ihrer Bezugseinheiten kaum verständlich zu interpretieren sind. Eine weitere Schwierigkeit bei der Interpretation logistischer Regressionsgewichte wurde bisher noch nicht explizit thematisiert: Der Effekt einer Erhöhung einer unabhängigen Variable um eine Einheit auf die Ausprägung der AV, der sogenannte marginale Effekt, ist in der logistischen Regression immer auch durch die genauen Ausprägung der betrachteten unabhängigen Variable, sowie aller anderen unabhängigen Variablen bedingt.

Schätzung auf Umwegen

Dies ist darauf zurückzuführen, dass die Auftrittswahrscheinlichkeit einer betrachteten Ausprägung einer kategorialen abhängigen Variable in der logistischen Regression in nichtlinearer Weise, sozusagen über einen Zwischenschritt, geschätzt wird: Im Prinzip wird in einem ersten Schritt über ein gewöhnliches lineares Modell die Ausprägung einer nicht beobachtbaren Variable, einer sogenannten latenten Variable, modelliert. Diese spiegelt die „Neigung “ für das Auftreten der betrachteten Kategorie der abhängigen Variable wieder. (Das Auftreten der interessierenden Kategorie der abhängigen Variable wird gängiger Weise als y = 1 notiert.)

y_{l} =beta_{ 0 }+beta_{ 1 }x_{ 1 } + ... + beta_{ n }x_{ n }

Das logistische Regressionsmodell trifft nun die Annahme, dass die beobachtbare kategoriale Variable die jeweilige Ausprägung von Interesse annimmt, wenn die latente Variable den arbiträr gewählten Schwellenwert von 0 überschreitet. Die modellierten Ausprägungen der latenten Variable und die assoziierten Regressionsgewichte der unabhängigen Variablen aus dem linearen Modell müssen transformiert werden, um die Auftrittswahrscheinlichkeit der interessierenden Ausprägung der abhängigen Variable zu bestimmen. Für diese Transformation muss die Verteilung der Schätz-Fehler bekannt sein. Innerhalb des logistischen Regressionsmodells wird angenommen, dass die Fehler einer logistischen Verteilung folgen. Da nicht nur die funktionale Form, sondern die genaue Verteilung der Fehler bekannt sein muss, werden die nicht schätzbare Varianz der Fehler-Verteilung sowie ihr bedingter Erwartungswert auf die Werte  sigma^{ 2 } =pi^{ 2 } / 3 und  E(epsilon|x) = 0 fixiert. Es ergibt sich die Grundgleichung des logistischen Modells:

 P(y = 1| x) = frac{ e^{beta_{ 0 }+beta_{ 1 }x_{1} + ... + beta_{ n }x_{ n }} }{ 1 + e^{beta_{ 0 }+beta_{ 1 }x_{ 1 } + ... + beta_{ n }x_{ n }} } = frac{e^ { x'beta } }{ 1 + e^{x'beta} } = frac{ e^{Logit} }{ 1 + e^{Logit} }

Aus dieser Schätzmethode und Transformation folgt/resultiert, dass logistische Regressionskoeffizienten den linearen Zusammenhang zwischen den unabhängigen Variablen und der latenten Variable, beziehungsweise den Logits, beziehungsweise logarithmierten Odds Ratios, für die betrachtete Merkmalsausprägung der abhängigen Variablen wiedergeben. Die Beziehung von Logits, Odds Ratios und Regressionskoeffizienten zu Auftritts-Wahrscheinlichkeiten der Ausprägungen der abhängigen Variable ist jedoch nicht linear. Diese Nicht-Linearität ist in den Gleichungen des logistischen Regressionsmodells stets offensichtlich. Besonders bei der Betrachtung der entlogarithmierten logistischen Regressionskoeffizienten, den Odds Ratios, wird zudem auf den ersten Blick deutlich, dass eine multiplikative und keine additiv-lineare Verknüpfung der Regressionsgewichte besteht. Odds Ratios geben eine faktorielle Veränderung der Auftrittswahrscheinlichkeit an, deren absoluter Umfang natürlich von der „Basiswahrscheinlichkeit“ abhängt.

Basisgleichung des logistischen Modells:

 P(y = 1| x) = frac{e^ { x'beta } }{ 1 + e^{x'beta} } = frac{ e^{Logit} }{ 1 + e^{Logit} }

…aufgelöst nach dem Logit:

 Logit = lnfrac{ P }{ 1- P } = beta_{ 0 }+beta_{ 1 }x_{ 1 } + ... + beta_{ n }x_{ n }

… und zusätzlich entlogarithmiert:

 OR := e^{ Logit } = e^{ lnfrac{ P }{ 1- P } } = e^{ beta_{ 0 }+beta_{ 1 }x_{ 1 } + ... + beta_{ n }x_{ n } } = e^{beta_{ 0 }}times e^{beta_{ 1 }x_{ 1 }} times ... times e^{beta_{ n }x_{ n }}

Eine intuitive Veranschaulichung

Warum marginale Effekte von unabhängigen Variable jeweils von den genauen Ausprägungen aller unabhängigen Merkmale bedingt sind, lässt sich intuitiv wie folgt verstehen/erfassen: Eine Erhöhung der (latenten) Neigung für das Auftreten der betrachten Ausprägung der abhängigen Variable um einen gewissen Betrag, geht bei einer bereits sehr hohen/sehr niedrigen Neigung, weit unter/über dem Schwellenwert, mit einem vernachlässigbaren Effekt auf die vorhergesagte (Wahrscheinlichkeit der) tatsächlich beobachtete Ausprägung der abhängigen einher. Ist jedoch die (latente) Neigung nahe dem Schwellenwert, ist die Erhöhung der Neigung um einen gewissen Betrag sehr wahrscheinlich(er) ausschlaggebend/entscheidend für die vorhergesagte (Wahrscheinlichkeit der) Ausprägung der abhängigen Variable. Die bereits bestehende Neigung für das Auftreten der betrachten Kategorie ist wiederrum abhängig von den genauen Ausprägungen aller unabhängigen Merkmale.

Die Nicht-Linearität der marginalen Effekte unabhängiger Merkmale wird besonders in graphischen Darstellungen deutlich, wenn die Auftrittswahrscheinlichkeit über die Ausprägungen eines unabhängigen Merkmals abgetragen wird: Die Steigung der Kurve der Auftrittswahrscheinlichkeit ist nicht konstant.

Lösung AME und MEM?

Es gibt verschiedene Möglichkeiten bei der Interpretation logistischer Modelle mit dieser Nicht-Linearität umzugehen. So können (Veränderungen der) Auftrittswahrscheinlichkeiten für unterschiedliche Kombinationen der Ausprägungen sowohl der interessierenden unabhängigen Variable, als auch der verbleibenden unabhängigen Variablen berechnet oder geplottet und so kontrastiert werden. Sollen marginale Effekte aber in einer kompakten, zusammenfassenden Kennziffer zum Ausdruck gebracht werden, können auch AMEs oder MEMs berechnet werden. Der average marginal Effekt (AME) ist der durchschnittliche Effekt der Erhöhung der unabhängigen Variablen um eine Einheit, gemittelt über alle vorhandenen Beobachtungen. Der marginal effect at the mean (MEM) ist der Effekt der Erhöhung der unabhängigen Variable um eine Einheit evaluiert am Mittelwert aller unabhängigen Variablen. Allerding ist zu bedenken, dass die inhaltlich bedeutsame Nicht-Linearität der Effekte durch AMEs absolut nicht deutlich wird und wichtige Informationen bezüglich der Effekte der unabhängigen Variablen schlicht vernachlässigt werden. Nick Bornschein Nick Bornschein

Im vorherigen Beitrag zur logistischen Regression wurde aufgezeigt, dass die absoluten Koeffizienten innerhalb logistischer Regressionsmodelle aufgrund ihrer Bezugseinheiten kaum verständlich zu interpretieren sind. Eine weitere Schwierigkeit bei der Interpretation logistischer Regressionsgewichte wurde bisher noch nicht explizit thematisiert: Der Effekt einer Erhöhung einer unabhängigen Variable um eine Einheit auf die Ausprägung der AV, der sogenannte marginale Effekt, ist in der logistischen Regression immer auch durch die genauen Ausprägung der betrachteten unabhängigen Variable, sowie aller anderen unabhängigen Variablen bedingt.

Schätzung auf Umwegen

Dies ist darauf zurückzuführen, dass die Auftrittswahrscheinlichkeit einer betrachteten Ausprägung einer kategorialen abhängigen Variable in der logistischen Regression in nichtlinearer Weise, sozusagen über einen Zwischenschritt, geschätzt wird: Im Prinzip wird in einem ersten Schritt über ein gewöhnliches lineares Modell die Ausprägung einer nicht beobachtbaren Variable, einer sogenannten latenten Variable, modelliert. Diese spiegelt die „Neigung “ für das Auftreten der betrachteten Kategorie der abhängigen Variable wieder. (Das Auftreten der interessierenden Kategorie der abhängigen Variable wird gängiger Weise als y = 1 notiert.)

y_{l} =beta_{ 0 }+beta_{ 1 }x_{ 1 } + ... + beta_{ n }x_{ n }

Das logistische Regressionsmodell trifft nun die Annahme, dass die beobachtbare kategoriale Variable die jeweilige Ausprägung von Interesse annimmt, wenn die latente Variable den arbiträr gewählten Schwellenwert von 0 überschreitet. Die modellierten Ausprägungen der latenten Variable und die assoziierten Regressionsgewichte der unabhängigen Variablen aus dem linearen Modell müssen transformiert werden, um die Auftrittswahrscheinlichkeit der interessierenden Ausprägung der abhängigen Variable zu bestimmen. Für diese Transformation muss die Verteilung der Schätz-Fehler bekannt sein. Innerhalb des logistischen Regressionsmodells wird angenommen, dass die Fehler einer logistischen Verteilung folgen. Da nicht nur die funktionale Form, sondern die genaue Verteilung der Fehler bekannt sein muss, werden die nicht schätzbare Varianz der Fehler-Verteilung sowie ihr bedingter Erwartungswert auf die Werte  sigma^{ 2 } =pi^{ 2 } / 3 und  E(epsilon|x) = 0 fixiert. Es ergibt sich die Grundgleichung des logistischen Modells:

 P(y = 1| x) = frac{ e^{beta_{ 0 }+beta_{ 1 }x_{1} + ... + beta_{ n }x_{ n }} }{ 1 + e^{beta_{ 0 }+beta_{ 1 }x_{ 1 } + ... + beta_{ n }x_{ n }} } = frac{e^ { x'beta } }{ 1 + e^{x'beta} } = frac{ e^{Logit} }{ 1 + e^{Logit} }

Aus dieser Schätzmethode und Transformation folgt/resultiert, dass logistische Regressionskoeffizienten den linearen Zusammenhang zwischen den unabhängigen Variablen und der latenten Variable, beziehungsweise den Logits, beziehungsweise logarithmierten Odds Ratios, für die betrachtete Merkmalsausprägung der abhängigen Variablen wiedergeben. Die Beziehung von Logits, Odds Ratios und Regressionskoeffizienten zu Auftritts-Wahrscheinlichkeiten der Ausprägungen der abhängigen Variable ist jedoch nicht linear. Diese Nicht-Linearität ist in den Gleichungen des logistischen Regressionsmodells stets offensichtlich. Besonders bei der Betrachtung der entlogarithmierten logistischen Regressionskoeffizienten, den Odds Ratios, wird zudem auf den ersten Blick deutlich, dass eine multiplikative und keine additiv-lineare Verknüpfung der Regressionsgewichte besteht. Odds Ratios geben eine faktorielle Veränderung der Auftrittswahrscheinlichkeit an, deren absoluter Umfang natürlich von der „Basiswahrscheinlichkeit“ abhängt.

Basisgleichung des logistischen Modells:

 P(y = 1| x) = frac{e^ { x'beta } }{ 1 + e^{x'beta} } = frac{ e^{Logit} }{ 1 + e^{Logit} }

…aufgelöst nach dem Logit:

 Logit = lnfrac{ P }{ 1- P } = beta_{ 0 }+beta_{ 1 }x_{ 1 } + ... + beta_{ n }x_{ n }

… und zusätzlich entlogarithmiert:

 OR := e^{ Logit } = e^{ lnfrac{ P }{ 1- P } } = e^{ beta_{ 0 }+beta_{ 1 }x_{ 1 } + ... + beta_{ n }x_{ n } } = e^{beta_{ 0 }}times e^{beta_{ 1 }x_{ 1 }} times ... times e^{beta_{ n }x_{ n }}

Eine intuitive Veranschaulichung

Warum marginale Effekte von unabhängigen Variable jeweils von den genauen Ausprägungen aller unabhängigen Merkmale bedingt sind, lässt sich intuitiv wie folgt verstehen/erfassen: Eine Erhöhung der (latenten) Neigung für das Auftreten der betrachten Ausprägung der abhängigen Variable um einen gewissen Betrag, geht bei einer bereits sehr hohen/sehr niedrigen Neigung, weit unter/über dem Schwellenwert, mit einem vernachlässigbaren Effekt auf die vorhergesagte (Wahrscheinlichkeit der) tatsächlich beobachtete Ausprägung der abhängigen einher. Ist jedoch die (latente) Neigung nahe dem Schwellenwert, ist die Erhöhung der Neigung um einen gewissen Betrag sehr wahrscheinlich(er) ausschlaggebend/entscheidend für die vorhergesagte (Wahrscheinlichkeit der) Ausprägung der abhängigen Variable. Die bereits bestehende Neigung für das Auftreten der betrachten Kategorie ist wiederrum abhängig von den genauen Ausprägungen aller unabhängigen Merkmale.

Die Nicht-Linearität der marginalen Effekte unabhängiger Merkmale wird besonders in graphischen Darstellungen deutlich, wenn die Auftrittswahrscheinlichkeit über die Ausprägungen eines unabhängigen Merkmals abgetragen wird: Die Steigung der Kurve der Auftrittswahrscheinlichkeit ist nicht konstant.

Lösung AME und MEM?

Es gibt verschiedene Möglichkeiten bei der Interpretation logistischer Modelle mit dieser Nicht-Linearität umzugehen. So können (Veränderungen der) Auftrittswahrscheinlichkeiten für unterschiedliche Kombinationen der Ausprägungen sowohl der interessierenden unabhängigen Variable, als auch der verbleibenden unabhängigen Variablen berechnet oder geplottet und so kontrastiert werden. Sollen marginale Effekte aber in einer kompakten, zusammenfassenden Kennziffer zum Ausdruck gebracht werden, können auch AMEs oder MEMs berechnet werden. Der average marginal Effekt (AME) ist der durchschnittliche Effekt der Erhöhung der unabhängigen Variablen um eine Einheit, gemittelt über alle vorhandenen Beobachtungen. Der marginal effect at the mean (MEM) ist der Effekt der Erhöhung der unabhängigen Variable um eine Einheit evaluiert am Mittelwert aller unabhängigen Variablen. Allerding ist zu bedenken, dass die inhaltlich bedeutsame Nicht-Linearität der Effekte durch AMEs absolut nicht deutlich wird und wichtige Informationen bezüglich der Effekte der unabhängigen Variablen schlicht vernachlässigt werden. Nick Bornschein Nick Bornschein