The Exercise
It is recommended that the upcoming assignment be conducted in SPSS instead of R. For those who would prefer to try R, however, this webpage should provide enough practice for the assignment.
The dataset you will be dealing with is completely fabricated. You will be using a One-Way ANOVA and Post-Hoc Comparisons (uncorrected) to test and compare the association of life satisfaction (Life_Satis) of students taking stats classes taught in various programming languages (Language_lab; R, MATLAB, SPSS, or Excel). In addition, there is dummy coded variable indicating whether the student is taking the course for credit or just auditing (Credit; 0 = audit; 1 = credit).
Loading Packages & Data
From Personal/Lab Computer
Load tidyverse to get access to ggplot2, dplyr, and tibble.
Load broom to get easy output for (uncorrected) post-hoc comparisons. Load readr to load in excel data.
ipak <- function(pkg){
new.pkg <- pkg[!(pkg %in% installed.packages()[, "Package"])]
if (length(new.pkg))
install.packages(new.pkg, dependencies = TRUE)
sapply(pkg, require, character.only = TRUE)
}
packages <- c("tidyverse", "broom", "dplyr", "readr","readxl")
ipak(packages)
# Change ggplot theme to light background
old <- theme_set(theme_light(base_size = 12))
Load Data
Load in lab data. Create a new variable to label Language variable depending on each code.
1 = R
2 = MATLAB
3 = SPSS
4 = Excel
lab11w_data <- read_excel("/Users/Julian/GDrive/Misc/Classes/InterStats/Ex10_LabData_Excel.xlsx") %>%
mutate(Language_lab = ifelse(Language == 1, "R", NA),
Language_lab = ifelse(Language == 2, "MATLAB", Language_lab),
Language_lab = ifelse(Language == 3, "SPSS", Language_lab),
Language_lab = ifelse(Language == 4, "Excel", Language_lab))
Examine Data
Let’s start by taking a look at our dataset.
lab11w_data
Filter Data
Exclude students who are auditing the course. You will need do know how exclude data based on variables in the upcoming assignment.
lab11w_data_credit <- filter(lab11w_data, Credit == 1)
lab11w_data_credit
One-Way ANOVA
Conduct One-Way ANOVA predicting life satisfaction as a function of language learned.
aov1 <- aov(Life_Satis ~ Language_lab, data=lab11w_data)
summary(aov1)
Df Sum Sq Mean Sq F value Pr(>F)
Language_lab 3 40.4 13.467 12.76 0.00000783 ***
Residuals 36 38.0 1.056
---
Signif. codes: 0 â***â 0.001 â**â 0.01 â*â 0.05 â.â 0.1 â â 1
Obtain \(\eta^2\) (r.squared)and \(\omega^2\) (adj.r.squared) using broom::glance().
glance(aov1)
Post-Hoc Comparisons
Create function for multiple comparisons without adjustments that takes dataframe as first argument and ANOVA object as second argument.
pairwise.t.test.noAdj <- function(df, aov1) { #df = lab11w_data; aov1 = aov1
vars <- aov1$model %>% names()
var1 <- df %>% select_(vars[1]) %>% unlist() %>% as.vector()
var2 <- df %>% select_(vars[2]) %>% unlist() %>% as.vector()
df.within <- tidy(aov1)$df[2]
t.std.error <- sqrt( 2*tidy(aov1)$meansq[2] / ((df.within + tidy(aov1)$df[1] + 1)/length(aov1$coefficients)))
TukeyHSD(aov1, ordered=FALSE) %>%
tidy() %>%
select(comparison, meanDifference = estimate, conf.low, conf.high) %>%
left_join(
pairwise.t.test(var1,
var2, p.adj = "none") %>%
tidy() %>%
unite(comparison, group1, group2, sep="-")
) %>%
mutate(std.error = t.std.error,
df = df.within,
t.value = meanDifference/std.error) %>%
select(comparison, meanDifference, std.error, t.value, df, p.value, conf.low, conf.high) %>%
arrange(comparison)
}
Apply function on lab data and ANOVA object we created earlier.
pairwise.t.test.noAdj(lab11w_data, aov1)
Joining, by = "comparison"
LS0tDQp0aXRsZTogIkxhYjExVyINCmF1dGhvcjogIkp1bGlhbiBXaWxscyINCmRhdGU6ICJOb3ZlbWJlciAxNnRoLCAyMDE2Ig0Kb3V0cHV0Og0KICBodG1sX25vdGVib29rOg0KICAgIHRoZW1lOiByZWFkYWJsZQ0KICAgIHRvYzogeWVzDQotLS0NCiMjIFRoZSBFeGVyY2lzZQ0KSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGUgdXBjb21pbmcgYXNzaWdubWVudCBiZSBjb25kdWN0ZWQgaW4gU1BTUyBpbnN0ZWFkIG9mIFIuIEZvciB0aG9zZSB3aG8gd291bGQgcHJlZmVyIHRvIHRyeSBSLCBob3dldmVyLCB0aGlzIHdlYnBhZ2Ugc2hvdWxkIHByb3ZpZGUgZW5vdWdoIHByYWN0aWNlIGZvciB0aGUgYXNzaWdubWVudC4gIA0KDQpUaGUgZGF0YXNldCB5b3Ugd2lsbCBiZSBkZWFsaW5nIHdpdGggaXMgY29tcGxldGVseSBmYWJyaWNhdGVkLiBZb3Ugd2lsbCBiZSB1c2luZyBhICoqT25lLVdheSBBTk9WQSoqIGFuZCAqKlBvc3QtSG9jIENvbXBhcmlzb25zKiogKHVuY29ycmVjdGVkKSB0byB0ZXN0IGFuZCBjb21wYXJlIHRoZSBhc3NvY2lhdGlvbiBvZiBsaWZlIHNhdGlzZmFjdGlvbiAoKkxpZmVfU2F0aXMqKSBvZiBzdHVkZW50cyB0YWtpbmcgc3RhdHMgY2xhc3NlcyB0YXVnaHQgaW4gdmFyaW91cyBwcm9ncmFtbWluZyBsYW5ndWFnZXMgKCpMYW5ndWFnZV9sYWIqOyBSLCBNQVRMQUIsIFNQU1MsIG9yIEV4Y2VsKS4gSW4gYWRkaXRpb24sIHRoZXJlIGlzIGR1bW15IGNvZGVkIHZhcmlhYmxlIGluZGljYXRpbmcgd2hldGhlciB0aGUgc3R1ZGVudCBpcyB0YWtpbmcgdGhlIGNvdXJzZSBmb3IgY3JlZGl0IG9yIGp1c3QgYXVkaXRpbmcgKCpDcmVkaXQqOyAwID0gYXVkaXQ7IDEgPSBjcmVkaXQpLiANCg0KIyMgTG9hZGluZyBQYWNrYWdlcyAmIERhdGENCg0KIyMjIEZyb20gUGVyc29uYWwvTGFiIENvbXB1dGVyDQpMb2FkICoqdGlkeXZlcnNlKiogdG8gZ2V0IGFjY2VzcyB0byBnZ3Bsb3QyLCBkcGx5ciwgYW5kIHRpYmJsZS4gIA0KTG9hZCAqKmJyb29tKiogdG8gZ2V0IGVhc3kgb3V0cHV0IGZvciAodW5jb3JyZWN0ZWQpIHBvc3QtaG9jIGNvbXBhcmlzb25zLiANCkxvYWQgKipyZWFkcioqIHRvIGxvYWQgaW4gZXhjZWwgZGF0YS4gDQpgYGB7ciwgcmVzdWx0cz0naGlkZScsIG1lc3NhZ2U9RkFMU0V9DQppcGFrIDwtIGZ1bmN0aW9uKHBrZyl7DQogIG5ldy5wa2cgPC0gcGtnWyEocGtnICVpbiUgaW5zdGFsbGVkLnBhY2thZ2VzKClbLCAiUGFja2FnZSJdKV0NCiAgaWYgKGxlbmd0aChuZXcucGtnKSkgDQogICAgaW5zdGFsbC5wYWNrYWdlcyhuZXcucGtnLCBkZXBlbmRlbmNpZXMgPSBUUlVFKQ0KICAgIHNhcHBseShwa2csIHJlcXVpcmUsIGNoYXJhY3Rlci5vbmx5ID0gVFJVRSkNCg0KfQ0KDQpwYWNrYWdlcyA8LSBjKCJ0aWR5dmVyc2UiLCAiYnJvb20iLCAiZHBseXIiLCAicmVhZHIiLCJyZWFkeGwiKQ0KaXBhayhwYWNrYWdlcykNCg0KIyBDaGFuZ2UgZ2dwbG90IHRoZW1lIHRvIGxpZ2h0IGJhY2tncm91bmQNCm9sZCA8LSB0aGVtZV9zZXQodGhlbWVfbGlnaHQoYmFzZV9zaXplID0gMTIpKQ0KYGBgDQoNCiMjIyBMb2FkIERhdGENCg0KTG9hZCBpbiBsYWIgZGF0YS4gQ3JlYXRlIGEgbmV3IHZhcmlhYmxlIHRvIGxhYmVsICpMYW5ndWFnZSogdmFyaWFibGUgZGVwZW5kaW5nIG9uIGVhY2ggY29kZS4gIA0KMSA9IFIgIA0KMiA9IE1BVExBQiAgDQozID0gU1BTUyAgDQo0ID0gRXhjZWwgIA0KYGBge3J9DQpsYWIxMXdfZGF0YSA8LSByZWFkX2V4Y2VsKCIvVXNlcnMvSnVsaWFuL0dEcml2ZS9NaXNjL0NsYXNzZXMvSW50ZXJTdGF0cy9FeDEwX0xhYkRhdGFfRXhjZWwueGxzeCIpICU+JSANCiAgbXV0YXRlKExhbmd1YWdlX2xhYiA9IGlmZWxzZShMYW5ndWFnZSA9PSAxLCAiUiIsIE5BKSwNCiAgICAgICAgIExhbmd1YWdlX2xhYiA9IGlmZWxzZShMYW5ndWFnZSA9PSAyLCAiTUFUTEFCIiwgTGFuZ3VhZ2VfbGFiKSwNCiAgICAgICAgIExhbmd1YWdlX2xhYiA9IGlmZWxzZShMYW5ndWFnZSA9PSAzLCAiU1BTUyIsIExhbmd1YWdlX2xhYiksDQogICAgICAgICBMYW5ndWFnZV9sYWIgPSBpZmVsc2UoTGFuZ3VhZ2UgPT0gNCwgIkV4Y2VsIiwgTGFuZ3VhZ2VfbGFiKSkNCg0KYGBgDQoNCiMjIEV4YW1pbmUgRGF0YQ0KDQpMZXQncyBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IG91ciBkYXRhc2V0LiANCmBgYHtyfQ0KbGFiMTF3X2RhdGENCmBgYA0KDQoNCiMjIEZpbHRlciBEYXRhDQoNCkV4Y2x1ZGUgc3R1ZGVudHMgd2hvIGFyZSBhdWRpdGluZyB0aGUgY291cnNlLiBZb3Ugd2lsbCBuZWVkIGRvIGtub3cgaG93IGV4Y2x1ZGUgZGF0YSBiYXNlZCBvbiB2YXJpYWJsZXMgaW4gdGhlIHVwY29taW5nIGFzc2lnbm1lbnQuIA0KYGBge3J9DQpsYWIxMXdfZGF0YV9jcmVkaXQgPC0gZmlsdGVyKGxhYjExd19kYXRhLCBDcmVkaXQgPT0gMSkNCmxhYjExd19kYXRhX2NyZWRpdA0KYGBgDQoNCg0KIyMgT25lLVdheSBBTk9WQQ0KDQpDb25kdWN0IE9uZS1XYXkgQU5PVkEgcHJlZGljdGluZyBsaWZlIHNhdGlzZmFjdGlvbiBhcyBhIGZ1bmN0aW9uIG9mIGxhbmd1YWdlIGxlYXJuZWQuIA0KYGBge3J9DQphb3YxIDwtIGFvdihMaWZlX1NhdGlzIH4gTGFuZ3VhZ2VfbGFiLCBkYXRhPWxhYjExd19kYXRhKQ0Kc3VtbWFyeShhb3YxKQ0KYGBgDQoNCk9idGFpbiAgJFxldGFeMiQgKCpyLnNxdWFyZWQqKWFuZCAkXG9tZWdhXjIkICgqYWRqLnIuc3F1YXJlZCopIHVzaW5nICoqYnJvb206OmdsYW5jZSgpKiouIA0KDQpgYGB7cn0NCmdsYW5jZShhb3YxKQ0KDQoNCmBgYA0KDQoNCiMjIFBvc3QtSG9jIENvbXBhcmlzb25zDQoNCkNyZWF0ZSBmdW5jdGlvbiBmb3IgbXVsdGlwbGUgY29tcGFyaXNvbnMgd2l0aG91dCBhZGp1c3RtZW50cyB0aGF0IHRha2VzICoqZGF0YWZyYW1lKiogYXMgZmlyc3QgYXJndW1lbnQgYW5kICoqQU5PVkEgb2JqZWN0KiogYXMgc2Vjb25kIGFyZ3VtZW50LiANCmBgYHtyfQ0KcGFpcndpc2UudC50ZXN0Lm5vQWRqIDwtIGZ1bmN0aW9uKGRmLCBhb3YxKSB7ICNkZiA9IGxhYjExd19kYXRhOyBhb3YxID0gYW92MQ0KICANCiAgdmFycyA8LSBhb3YxJG1vZGVsICU+JSBuYW1lcygpDQogIHZhcjEgPC0gZGYgJT4lIHNlbGVjdF8odmFyc1sxXSkgJT4lIHVubGlzdCgpICU+JSBhcy52ZWN0b3IoKQ0KICB2YXIyIDwtIGRmICU+JSBzZWxlY3RfKHZhcnNbMl0pICU+JSB1bmxpc3QoKSAlPiUgYXMudmVjdG9yKCkNCiAgDQogIGRmLndpdGhpbiA8LSB0aWR5KGFvdjEpJGRmWzJdDQogIHQuc3RkLmVycm9yIDwtIHNxcnQoIDIqdGlkeShhb3YxKSRtZWFuc3FbMl0gLyAoKGRmLndpdGhpbiArIHRpZHkoYW92MSkkZGZbMV0gKyAxKS9sZW5ndGgoYW92MSRjb2VmZmljaWVudHMpKSkNCg0KICBUdWtleUhTRChhb3YxLCBvcmRlcmVkPUZBTFNFKSAlPiUgDQogICAgdGlkeSgpICU+JSANCiAgICBzZWxlY3QoY29tcGFyaXNvbiwgbWVhbkRpZmZlcmVuY2UgPSBlc3RpbWF0ZSwgY29uZi5sb3csIGNvbmYuaGlnaCkgJT4lIA0KICAgIGxlZnRfam9pbigNCiAgICAgIHBhaXJ3aXNlLnQudGVzdCh2YXIxLCANCiAgICAgICAgICAgICAgICAgICAgICB2YXIyLCBwLmFkaiA9ICJub25lIikgJT4lIA0KICAgICAgICB0aWR5KCkgJT4lIA0KICAgICAgICB1bml0ZShjb21wYXJpc29uLCBncm91cDEsIGdyb3VwMiwgc2VwPSItIikNCiAgICApICU+JSANCiAgICBtdXRhdGUoc3RkLmVycm9yID0gdC5zdGQuZXJyb3IsDQogICAgICAgICAgIGRmID0gZGYud2l0aGluLA0KICAgICAgICAgICB0LnZhbHVlID0gbWVhbkRpZmZlcmVuY2Uvc3RkLmVycm9yKSAlPiUgDQogICAgc2VsZWN0KGNvbXBhcmlzb24sIG1lYW5EaWZmZXJlbmNlLCBzdGQuZXJyb3IsIHQudmFsdWUsIGRmLCBwLnZhbHVlLCBjb25mLmxvdywgY29uZi5oaWdoKSAlPiUgDQogICAgYXJyYW5nZShjb21wYXJpc29uKQ0KfQ0KDQpgYGANCiAgDQogIA0KDQpBcHBseSBmdW5jdGlvbiBvbiBsYWIgZGF0YSBhbmQgQU5PVkEgb2JqZWN0IHdlIGNyZWF0ZWQgZWFybGllci4gDQpgYGB7cn0NCnBhaXJ3aXNlLnQudGVzdC5ub0FkaihsYWIxMXdfZGF0YSwgYW92MSkNCmBgYA0KDQoNCg==