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==