Anova, Ancova, Manova
Sprawdzamy równoliczność grup
table(Salaries$rank, Salaries$discipline)##
## A B
## AsstProf 24 43
## AssocProf 26 38
## Prof 131 135
table(Salaries$rank, Salaries$sex)##
## Female Male
## AsstProf 11 56
## AssocProf 10 54
## Prof 18 248
table(Salaries$discipline, Salaries$sex)##
## Female Male
## A 18 163
## B 21 195
Grupy nie są równoliczne.
Wykresy skrzynkowe dla wielkości wynagrodzenia wśród mężczyzn oraz kobiet
ggboxplot(Salaries, x="rank", y="salary", color="discipline", facet.by="sex")data(Salaries)
ggplot(Salaries, aes(x=salary)) +
geom_histogram(bins=10) +
facet_grid(rank~sex~discipline)Badanie normalności
Salaries %>%
group_by(rank,discipline,sex) %>%
shapiro_test(salary)## # A tibble: 12 x 6
## rank discipline sex variable statistic p
## <fct> <fct> <fct> <chr> <dbl> <dbl>
## 1 AsstProf A Female salary 0.870 0.226
## 2 AsstProf A Male salary 0.941 0.300
## 3 AsstProf B Female salary 0.889 0.354
## 4 AsstProf B Male salary 0.941 0.0458
## 5 AssocProf A Female salary 0.863 0.269
## 6 AssocProf A Male salary 0.878 0.0113
## 7 AssocProf B Female salary 0.635 0.00117
## 8 AssocProf B Male salary 0.967 0.416
## 9 Prof A Female salary 0.934 0.549
## 10 Prof A Male salary 0.952 0.000259
## 11 Prof B Female salary 0.974 0.923
## 12 Prof B Male salary 0.978 0.0435
Dla 5 grup P-value < 0.05, zatem nie możemy uznać normalnego rozkładu.
Zobaczmy, jak wyglądają wykresy normalności wg podgrup:
ggqqplot(Salaries, "salary") +
facet_grid(sex~discipline~rank)#Jednorodność wariancji
Założenie jednorodności wariancji
Salaries %>%
levene_test(salary ~ rank*sex*discipline)## # A tibble: 1 x 4
## df1 df2 statistic p
## <int> <int> <dbl> <dbl>
## 1 11 385 9.05 2.06e-14
P-value < 0.05, a więc stwierdzamy występowanie istotnej różnicy wariancji (odrzucamy hipotezę zerową). Zatem wariancje nie są jednorodne.
Sprawdzamy występowanie wartości odstających, a następnie usuwamy je
wartosci.odstajace <- Salaries %>%
group_by(rank,discipline,sex) %>%
identify_outliers(salary)
wartosci.odstajace## # A tibble: 18 x 8
## rank discipline sex yrs.since.phd yrs.service salary is.outlier is.extreme
## <fct> <fct> <fct> <int> <int> <int> <lgl> <lgl>
## 1 AsstProf A Female 7 6 63100 TRUE FALSE
## 2 AsstProf A Male 3 1 63900 TRUE FALSE
## 3 AsstProf A Male 2 0 85000 TRUE TRUE
## 4 AsstProf A Male 8 4 81035 TRUE FALSE
## 5 AssocProf A Female 25 22 62884 TRUE FALSE
## 6 AssocProf A Male 14 8 100102 TRUE FALSE
## 7 AssocProf A Male 9 7 70000 TRUE FALSE
## 8 AssocProf A Male 11 1 104800 TRUE FALSE
## 9 AssocProf A Male 45 39 70700 TRUE FALSE
## 10 AssocProf A Male 10 1 108413 TRUE FALSE
## 11 AssocProf A Male 11 8 104121 TRUE FALSE
## 12 AssocProf B Female 14 7 109650 TRUE TRUE
## 13 AssocProf B Female 12 9 71065 TRUE TRUE
## 14 AssocProf B Male 13 11 126431 TRUE FALSE
## 15 Prof A Male 29 7 204000 TRUE FALSE
## 16 Prof A Male 42 18 194800 TRUE FALSE
## 17 Prof A Male 43 43 205500 TRUE FALSE
## 18 Prof B Male 38 38 231545 TRUE FALSE
Salaries$salary[Salaries$salary%in%wartosci.odstajace$salary] <- NA
Salaries <- na.omit(Salaries)Ponieważ nie zostały spełnione założenia, logarytmujemy zmienną ‘salary’
Salaries <- mutate(Salaries,log=log10(salary))Sprawdzamy normalność po modyfikacji
Salaries %>%
group_by(rank,discipline,sex) %>%
shapiro_test(log) ## # A tibble: 12 x 6
## rank discipline sex variable statistic p
## <fct> <fct> <fct> <chr> <dbl> <dbl>
## 1 AsstProf A Female log 0.813 0.104
## 2 AsstProf A Male log 0.952 0.560
## 3 AsstProf B Female log 0.896 0.387
## 4 AsstProf B Male log 0.931 0.0218
## 5 AssocProf A Female log 0.978 0.717
## 6 AssocProf A Male log 0.891 0.0587
## 7 AssocProf B Female log 0.916 0.517
## 8 AssocProf B Male log 0.981 0.840
## 9 Prof A Female log 0.936 0.575
## 10 Prof A Male log 0.985 0.212
## 11 Prof B Female log 0.976 0.939
## 12 Prof B Male log 0.986 0.236
Po modyfikacji tylko w 2 grupach P-value < 0.05, zatem możemy przyjąć, że rozkład jest normalny
Zobaczmy, jak wyglądają wykresy normalności wg podgrup:
ggqqplot(Salaries, "salary") +
facet_grid(sex~discipline~rank)Anova - dlag rup nierównolicznych
anova_test(log~rank*discipline*sex, data=Salaries, type = 3)## Coefficient covariances computed by hccm()
## ANOVA Table (type III tests)
##
## Effect DFn DFd F p p<.05
## 1 rank 2 366 74.804 0.000000000000000000000000000579 *
## 2 discipline 1 366 27.566 0.000000258000000000000007365636 *
## 3 sex 1 366 0.270 0.603999999999999981348253186297
## 4 rank:discipline 2 366 1.248 0.287999999999999978239628717347
## 5 rank:sex 2 366 0.114 0.893000000000000015987211554602
## 6 discipline:sex 1 366 0.635 0.425999999999999989785948173449
## 7 rank:discipline:sex 2 366 0.315 0.729999999999999982236431605997
## ges
## 1 0.290000
## 2 0.070000
## 3 0.000736
## 4 0.007000
## 5 0.000621
## 6 0.002000
## 7 0.002000
Jak możemy zauważyć występują zależności pomiędzy zmiennymi ‘rank’ a ‘salaries’ oraz między zmiennymi ‘discipline’ a ‘salaries’ z osobna. Nie występują natomiast żadne interakcje oraz wspólne zależności pomiędzy zmiennymi a zamienną badaną.
Ancova
anova_test(log~yrs.since.phd*yrs.service+rank*discipline*sex, data=Salaries, type = 3)## Coefficient covariances computed by hccm()
## ANOVA Table (type III tests)
##
## Effect DFn DFd F p p<.05 ges
## 1 yrs.since.phd 1 363 9.974 0.0020000000000 * 0.027
## 2 yrs.service 1 363 5.055 0.0250000000000 * 0.014
## 3 rank 2 363 26.136 0.0000000000249 * 0.126
## 4 discipline 1 363 28.508 0.0000001650000 * 0.073
## 5 sex 1 363 0.610 0.4350000000000 0.002
## 6 yrs.since.phd:yrs.service 1 363 15.060 0.0001240000000 * 0.040
## 7 rank:discipline 2 363 1.490 0.2270000000000 0.008
## 8 rank:sex 2 363 0.227 0.7970000000000 0.001
## 9 discipline:sex 1 363 0.445 0.5050000000000 0.001
## 10 rank:discipline:sex 2 363 0.524 0.5930000000000 0.003
Lata od doktoratu i staż pracy mogą być istotnymi zmiennymi współoddziałującymi na płacę, ponadto występuje między nimi interakcja.
Manova
model <- lm(cbind(yrs.since.phd, yrs.service) ~ salary, Salaries)
Manova(model, test.statistic = "Pillai")##
## Type II MANOVA Tests: Pillai test statistic
## Df test stat approx F num Df den Df Pr(>F)
## salary 1 0.17091 38.65 2 375 0.0000000000000005474 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Stwierdzono statystycznie istotną różnicę pomiędzy wielkością wynagrodzenia na połączonych zmiennych (lata od doktoratu oraz lata służby), P-value < 0.05