Warum sind die Ergebnisse von R und SPSS so verscheieden
Wenn die Ergebnisse von R und SPSS verglichen werden sind die Werte oft unterschiedlich und der Wissenschaftler wünscht sich dann die ‘richtigen’ Resultate wie sie eben SPSS ausgibt. Es ist jetzt nicht so dass R ‘etwas falsch macht’. R hat einfach eine andere Standardkonfiguration als SPSS.
ANOVA
Hier als Beispiel die Ergebnisse wie sie SPSS ausgibt. Die Daten stammen von Stanley (2015) dort sind auch weitere Deteils zur Analyse beschrieben.
Tab 1: SPSS Output | |||||
source | SS | Df | MS | F | sig |
---|---|---|---|---|---|
corrected model | 5479 | 5 | 1096 | 13.2 | 0 |
intercept | 163333 | 1 | 163333 | 1967.03 | 0 |
gender | 169 | 1 | 169 | 2.03 | 0.161 |
alcohol | 3332 | 2 | 1666 | 20.07 | 0 |
gender*alcohol | 1978 | 2 | 989 | 11.91 | 0 |
error | 3488 | 41 | 83 | ||
total | 172300 | 48 | |||
corrected total | 8967 | 47 | |||
Hintergrund ist das bei einer Varianzanalysen Versuchsbedingungen untersucht werden und diese kennt immer nur der Wissenschaftler selber. Das Programm weiss nichts über die Versuchsbedingungen und mit Glück passen sogar die default Einstellungen. Besser ist natürlich der Diplomant/Wissenschaftler macht sich gedanken über sein statistisches Model und wählt die geeigneten Einstellungen im Programm.
Fazit SPSS und R rechnen die ANOVA exat gleich.
Gegenüberstellung der F-Werte mit ‘contr.helmert’ versus ‘contr.treatment’.
Tab 2: Gegenüberstellung der F-Werte | ||||||||
R.treatment | R.helmert | SPSS | ||||||
---|---|---|---|---|---|---|---|---|
Quelle | Typ.3 | Typ.2 | Typ.3 | Typ.2 | default | |||
(Intercept) | 354.1 | 1967.03 | 1967.03 | |||||
gender | 1.88 | 2.03 | 2.03 | 2.03 | 2.03 | |||
alcohol | 0.61 | 20.07 | 20.07 | 20.07 | 20.07 | |||
gender:alcohol | 11.91 | 11.91 | 11.91 | 11.91 | 11.91 | |||
getOption("contrasts")
## [1] "contr.helmert" "contr.poly"
aov(attractiveness~gender*alcohol,data=DF) %>%
broom::tidy() %>%
knitr::kable(digits=c(0,0,0,0,2,3), caption="R Output")
term | df | sumsq | meansq | statistic | p.value |
---|---|---|---|---|---|
gender | 1 | 169 | 169 | 2.03 | 0.161 |
alcohol | 2 | 3332 | 1666 | 20.07 | 0.000 |
gender:alcohol | 2 | 1978 | 989 | 11.91 | 0.000 |
Residuals | 42 | 3488 | 83 | NA | NA |
#
# crf.lm <- lm(attractiveness~gender*alcohol,data=DF)
# anova(crf.lm)
#
#options(contrasts = c("contr.helmert", "contr.poly"))
Binomiale Regressionsanalyse
Bei SPSS gibt es zwei verschiedene Methoden “klassisch” und “versteckt” über GLM.
Bei der klassischen Variante kann SPSS keine Faktoren ins Model aufnehmen und beherrscht nur den Wald-Test. Bei GLM rechnet SPSS aber die Intercept anderstals, kann aber Faktoren berechnen und es können verschiedene Tests gewählt werden. Die Ergebnisse der Parameter identisch aber das Intercept ist unterschiedlich.
Bei SPSS wird quasi die ANOVA bei den Koeffizienten ausgegeben und die Inercepts werden je nach Einstellung unterschiedlich berechnet - was problematisch wird wenn man aus den Parametern die zugehörigen Wahrscheinlichkeiten errechnen will. Bei R wird der Parameter b mit dem LR-Test getestet und Faktoren werden automatisch erkannt und das Intercept wird immer gleich berechnet.
Beispiel Harnblasenkarzinom
Ergebnisse mit SPSS
Daten Harnblasenkarzinom drei Variablen Gruppe: Krank/Gesund, T-Zelltypisierung und LAI-Test
Ergebnisse von SPSS über Regression
Parameter | B | S.E. | Wald | df | Sig. | Exp(B) |
---|---|---|---|---|---|---|
tzell | 0.2 | 0.094 | 4.57 | 1 | 0.032 | 1.222 |
lai | 2.21 | 0.877 | 6.3 | 1 | 0.012 | 9.075 |
Constant | -14.64 | 6.329 | 5.37 | 1 | 0.021 | 0 |
Ergebnisse von SPSS über GML
Parameter | B | Std. Error | Lower | Upper | Wald Chi-Square | df | Sig. |
---|---|---|---|---|---|---|---|
Threshold [gruppe=1.00] | 12.44 | 6.52 | -0.35 | 25.2 | 3.63 | 1 | 0.057 |
tzell | 0.2 | 0.09 | 0.01 | 0.34 | 4.5 | 1 | 0.032 |
[lai=.00] | -2.2 | 0.88 | -3.9 | -0.48 | 6.3 | 1 | 0.012 |
Ergebnisse mit R
Hier die formatierten der Ergebnisse aus R. Mit dem Befehl summary() und confint() können die Ergebnisse angefordert werden.
fit1 <- glm(gruppe~tzell+factor(lai), hkarz, family = binomial)
fitting null model for pseudo-r2
Tab 3: Logistische Regression mit Likelihood Ratio Test und Log-Likelihood 95% Konfidenzintervall | |||||
Quelle | b | conf | statistic | odds | p |
---|---|---|---|---|---|
Parameter | |||||
(Intercept) | -13.5 | [-1.96, -27.6] | -2.11 | .035 | |
tzell | 0.201 | [0.406, 0.031] | 2.14 | 1.22 | .032 |
factor(lai)1 | 1.1 | [2.03, 0.275] | 2.51 | 3.01 | .012 |
Goodness of fit | |||||
AIC | 42.52 | ||||
BIC | 47.94 | ||||
McFadden | 0.41 | ||||
r2ML | 0.43 | ||||
r2CU | 0.58 | ||||
RMSE | 2.64 | ||||
Obs | 45 | ||||
Tab 4: Unterschied von Wald und Log-Likelihood 95%-Konfidenzintervall | ||||
Wald | LL | |||
---|---|---|---|---|
2.5 % | 97.5 % | 2.5 % | 97.5 % | |
-26.11 | -0.97 | -27.6 | -1.96 | |
0.02 | 0.38 | 0.03 | 0.41 | |
0.24 | 1.96 | 0.27 | 2.03 | |
#' ANOVA
#' Voraussetzung ist dass das Modell streng linear ist.
car::Anova(fit1, type = "III", test.statistic = "Wald")
## Analysis of Deviance Table (Type III tests)
##
## Response: gruppe
## Df Chisq Pr(>Chisq)
## (Intercept) 1 4.4596 0.03470 *
## tzell 1 4.5744 0.03245 *
## factor(lai) 1 6.3239 0.01191 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#' Omnibus Test
lmtest::lrtest(fit1)
## Likelihood ratio test
##
## Model 1: gruppe ~ tzell + factor(lai)
## Model 2: gruppe ~ 1
## #Df LogLik Df Chisq Pr(>Chisq)
## 1 3 -18.258
## 2 1 -31.091 -2 25.668 2.669e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Zusammenfassend
R und SPSS werden zwei verschiedene Hypothesen um die p-Werte zu bestimmen. Und bei SPSS werden die Intercepts quasi kreativ berechnet.
Signifikanz der Regressionskoeffizienten; bei SPSS wird der Wald-Test verwendet, ich verwende den LRT (ein Vergleich findet man unter http://thestatsgeek.com/2014/02/08/wald-vs-likelihood-ratio-test/) Bartlett, Paul, and Bartlett (2016)
Mehr zum Thema findet sich unter Bruin (2011)
Literatur
Bartlett, Jonathan, Paul, and Jonathan Bartlett. 2016. “Wald Vs Likelihood Ratio Test.” Thestatsgeek.com. June 2016. http://thestatsgeek.com/2014/02/08/wald-vs-likelihood-ratio-test/.
Bruin, J. 2011. “LOGIT Regression | R Data Analysis Examples.” February 2011. https://stats.idre.ucla.edu/r/dae/logit-regression/.
Stanley, David. 2015. “Ensuring R Generates the Same Anova F-Values as Spss.” August 2015. http://www.statscanbefun.com/rblog/2015/8/27/ensuring-r-generates-the-same-anova-f-values-as-spss.