Info und Aufgabenstellung

(Einen Überblick für diese Aufgabe finden sie auch im Buch von Andy Field in Kapitel 7)

In einer Studie (in einer Zeit vor apple itunes) wurde untersucht, was den Verkauf von Musikalben vorhersagt (Kriterium = Verkaufte Alben in tausend Dollar). Es wurden 3 Prädiktorvariablen untersucht: Die Werbeausgaben (adverts in tausend Dollar), wie häufig Musik aus dem Album im Radio gespielt in der Vorverkaufswoche im Radio gespielt wurde (airplay), und wie attraktiv Jugendliche die Musiker finden (attractiveness). Als Kriteriumsvariable wurden die Verkaufszahlen (sales) der Alben ermittelt.

Die Forscher wissen, dass Werbeausgaben (adverts) und airplay einen positiven Effekt auf die Verkaufszahlen haben. Sie wissen noch nicht, welche Rolle die Attraktivität der Musiker spielt. Sie haben folgende Hypothese aufgestellt

Hypothese: Der Verkauf steigt mit der Attraktivität der Bandmitglieder an.

Aufgaben:

  1. Überlegen Sie, wie diese Hypothese durch einen Modellvergleich getestet werden kann. Stellen Sie dann eine entsprechende Hypothese auf.

  2. Laden Sie Daten in R-Studio.

  3. Machen Sie eine Streudiagramm-Matrix. Prüfen Sie graphisch, ob die Kriteriumsvariable normalverteilt ist und ob die Prädiktoren einen linearen Zusammenhang mit der Kriteriumsvariable aufweisen. Prüfen Sie ebenfalls anhand der Graphiken, ob die Prädiktoren einen starken Zusammenhang untereinander aufweisen.

  4. Berechnen Sie ein Regressionsmodell nur für die Prädiktoren adverts und airplay und die Kriteriumsvariable sales. Berechnen Sie dann zweites ein Modell für alle drei Prädiktoren (also inklusive attractiveness).

  5. Stellen Sie fest, ob diese Modelle eine Vorhersage der Verkaufszahlen erlauben.

  6. Vergleichen Sie die beiden Regressionsmodelle miteinander. Berechnen Sie dazu eine Varianzanalyse und den AIC.

  7. Entscheiden Sie über die Hypothese mit Hilfe der gemachten Analysen.

1) Daten einlesen

Daten <- read.csv("Daten_Albumsales.csv") 

2) Commander öffnen, Streudiagrammmatrix und Lineares Modell mit den zwei Prädiktoren erstellen

library(Rcmdr)
scatterplotMatrix(~adverts+airplay+attract+sales, regLine=TRUE, smooth=list(span=0.5, spread=FALSE), 
  diagonal=list(method="density"), data=Daten)

Die letzte Zeile zeigt, dass alle Prädiktoren positiv mit dem Kriterium korrelieren. Die Zeilen davor zeigen außerdem, dass die Prädiktoren untereinander nicht oder nur schwach miteinander korrelieren (was gut ist).

RegModel.1 <- lm(sales~adverts+airplay, data=Daten)

summary(RegModel.1)
## 
## Call:
## lm(formula = sales ~ adverts + airplay, data = Daten)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -113.213  -30.584    4.479   32.778  155.111 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 39.465178   9.405430   4.196 4.13e-05 ***
## adverts      0.085914   0.007341  11.703  < 2e-16 ***
## airplay      3.640856   0.296953  12.261  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 49.09 on 194 degrees of freedom
## Multiple R-squared:  0.634,  Adjusted R-squared:  0.6303 
## F-statistic: 168.1 on 2 and 194 DF,  p-value: < 2.2e-16

Wie ergibt sich dieser F-Wert? Die allgmeine Formel ist:

\(F = \frac{(N - k - 1)R^2}{k(1-R^2)}\),

wobei \(N\) die Anzahl der Beobachtungen, \(k\) die Anzahl der Prädiktoren und \(R^2\) die vom Modell erklärte Varianz ist. Wenn wir die im Output angezeigten Werte in die Formel eingeben, bekommen wir:

N <- 197
k <- 2
Rsq <- 0.634

F_value <- ((N - k - 1)*Rsq)/(k*(1-Rsq))
F_value
## [1] 168.0273

(Dass dort nicht genau 168.1 steht, ergibt sich aus Rundungsfehlern für R-Quadrat.)

3) Zweites lineares Modell erstellen

Jetzt erstellen wir ein Modell, in das die Attraktivität der Musiker*innen aufgenommen wird

RegModel.2 <- lm(sales~adverts+airplay+attract, data=Daten)

summary(RegModel.2)
## 
## Call:
## lm(formula = sales ~ adverts + airplay + attract, data = Daten)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -121.52  -27.84    0.21   28.25  144.35 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -27.00504   17.28334  -1.562     0.12    
## adverts       0.08442    0.00701  12.044  < 2e-16 ***
## airplay       3.39973    0.28826  11.794  < 2e-16 ***
## attract      10.94679    2.43289   4.500 1.18e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 46.82 on 193 degrees of freedom
## Multiple R-squared:  0.6688, Adjusted R-squared:  0.6636 
## F-statistic: 129.9 on 3 and 193 DF,  p-value: < 2.2e-16

4) Testen, ob das zweite Modell (mit mehr Prädiktoren) signifikant besser ist als das erste (mit weniger Prädiktoren)

Commander: Modelle -> Hypothesenthests -> Modellvergleich

Alternativ kann man auch direkt den anova() Befehl nehmen. Achtung: Der “anova”-Befehl muss kleingeschrieben werden. Mit großem A wird eine andere Funktion ausgeführt).

anova(RegModel.1, RegModel.2) # hier in () die Namen der beiden Reg-Modelle schreiben.
## Analysis of Variance Table
## 
## Model 1: sales ~ adverts + airplay
## Model 2: sales ~ adverts + airplay + attract
##   Res.Df    RSS Df Sum of Sq      F    Pr(>F)    
## 1    194 467527                                  
## 2    193 423140  1     44387 20.245 1.175e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Der Output zeigt, dass Modell 2 besser ist als Modell 1. Woran sehen wir das? Natürlich erstens am signifikanten F-Test. Außerdem daran, dass das adjustierte R-quadrat von Modell 2 bereits höher war als das von Modell 1. Weiterhin sehen wir im obigen Output, dass RSS (Residual Sum of Squares, also der Fehler) im zweiten Modell geringer ist als im ersten.

5) AICs berechnen

Desweiteren sollte man sich auch noch die AICs ansehen, um für beide Modelle die Fehler in der Vorhersagegüte zu vergleichen. Das geht in R-Commander wie folgt:

Commander: Oben rechts das jeweilige Modell auswählen (analog zur Auswahl der aktuellen Datenmatrix). Dann: Modelle -> AIC

AIC(RegModel.1)
## [1] 2098.147
AIC(RegModel.2)
## [1] 2080.496

Fehler in Modell 2 ist kleiner als in Modell 1 (niedrige AIC-Werte sind gut), auch wenn die höhere Anzahl an Prädiktoren berücksichtigt wird

Zur Erinnerung: AIC ist ein Maß dafür, wie weit die tatsächlichen Werte von den vorhergesagten Werten entfernt sind, unter Berücksichtigung der Anzahl der im Modell enthaltenen Prädiktoren.

Interpretation der einzelnen Regressionskoeffizienten

All drei Prädiktoren sind signifikant:

  • b für “adverts” = 0.08442
  • b für “airplay” = 3.39973
  • b für “attract” = 10.94679

Adverts: Wenn man “adverts” um eine Einheit erhöht (also plus 1000 Dollar), dann gehen die Albumverkäufe um 0.084 Einheiten (also plus 84 Alben) nach oben (gegeben, dass man alle anderen Prädiktorwerte konstant hält).

Airplay: Wenn man “airplay” um eine Einheit erhöht (also den Song in der Vorverkaufswoche einmal mehr im Radio spielt), dann gehen die Albumverkäufe um 3.4 Einheiten (also knapp plus 3400 Alben) nach oben (gegeben, dass man alle anderen Prädiktorwerte konstant hält). Das klingt lohnenswert.

Attract: Wen die mittlere eingeschätzte Attraktivität der Bandmitglieder um eine Einheit zunimmt (auf dem Fragegoben), dann erhöht sich die Verkaufszahl um fast 11 Einheiten (das heißt knapp 11000 mehr verkaufte Alben).

Der Vollständigkeit halber hier noch die Standardisierung der Koeffizienten:

library(QuantPsyc)
## Loading required package: boot
## 
## Attaching package: 'boot'
## The following object is masked from 'package:car':
## 
##     logit
## Loading required package: MASS
## 
## Attaching package: 'QuantPsyc'
## The following object is masked from 'package:base':
## 
##     norm
lm.beta(RegModel.2)
##   adverts   airplay   attract 
## 0.5048458 0.5025903 0.1902302

Für die (unstandardisierten) Regressionskoeffizienten lassen sich übrigens auch 95%-Konfidenzintervalle angeben über:

confint(RegModel.2)
##                    2.5 %      97.5 %
## (Intercept) -61.09351681  7.08343558
## adverts       0.07059819  0.09824985
## airplay       2.83117919  3.96827303
## attract       6.14832735 15.74525843

Zum (noch) weiteren Üben:

Eine ähnliche Analyse wie heute kann natürlich auch mit dem letzte Woche verwendeten Jelly-Fish Data-Set gemacht werden.