Load in relevant packages
library(tidyverse)
Registered S3 methods overwritten by 'dbplyr':
method from
print.tbl_lazy
print.tbl_sql
-- Attaching packages --------------------------------------- tidyverse 1.3.0 --
v ggplot2 3.3.2 v purrr 0.3.4
v tibble 3.0.3 v dplyr 1.0.2
v tidyr 1.1.1 v stringr 1.4.0
v readr 1.3.1 v forcats 0.5.0
-- Conflicts ------------------------------------------ tidyverse_conflicts() --
x tidyr::expand() masks Matrix::expand()
x dplyr::filter() masks stats::filter()
x dplyr::lag() masks stats::lag()
x tidyr::pack() masks Matrix::pack()
x tidyr::unpack() masks Matrix::unpack()
library(psych)
Attaching package: 㤼㸱psych㤼㸲
The following objects are masked from 㤼㸱package:ggplot2㤼㸲:
%+%, alpha
library(haven)
mcnulty <- read_dta("McNulty2008.dta")
glimpse(mcnulty)
Rows: 164
Columns: 5
$ Case <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, ...
$ Attractiveness <dbl> 5.57, 4.41, 4.21, 4.58, 4.49, 3.74, 6.84, 5.70, 4.06, 5.45,...
$ Support <dbl> 0.41, 0.01, 0.19, 0.59, 0.34, -0.09, 0.07, 0.32, 0.02, 0.33...
$ Satisfaction <dbl> 36, 31, 31, 35, 28, 37, 27, 42, 44, 31, 25, 30, 35, 36, 28,...
$ Gender <dbl+lbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1...
Houskeeping and Data Cleaning/ Coding
We have used this before, but describe and table are a great way to get a quick summary of the variables found in a dataset.
describe(mcnulty, fast = TRUE)
Renaming variables just makes it easier for you as you code. Let’s rename the variable CaUnTs. In this process, we are also making a new dataset. Remember, this is a great way to keep your original data set as is if you ever need to go back!
mcnulty.clean <- mcnulty
glimpse(mcnulty.clean)
Rows: 164
Columns: 5
$ Case <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, ...
$ Attractiveness <dbl> 5.57, 4.41, 4.21, 4.58, 4.49, 3.74, 6.84, 5.70, 4.06, 5.45,...
$ Support <dbl> 0.41, 0.01, 0.19, 0.59, 0.34, -0.09, 0.07, 0.32, 0.02, 0.33...
$ Satisfaction <dbl> 36, 31, 31, 35, 28, 37, 27, 42, 44, 31, 25, 30, 35, 36, 28,...
$ Gender <dbl+lbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1...
Part 1: Basic Multiple Linear Regression, w/o Moderator Analysis/Interaction
linearmodel1 <- lm(Support ~ Attractiveness + Gender, data = mcnulty.clean)
summary(linearmodel1)
Call:
lm(formula = Support ~ Attractiveness + Gender, data = mcnulty.clean)
Residuals:
Min 1Q Median 3Q Max
-0.53901 -0.15384 -0.00885 0.10641 0.67204
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.244201 0.068465 3.567 0.000476 ***
Attractiveness -0.005239 0.014523 -0.361 0.718786
Gender 0.023927 0.032920 0.727 0.468390
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.2108 on 161 degrees of freedom
Multiple R-squared: 0.0041, Adjusted R-squared: -0.008272
F-statistic: 0.3314 on 2 and 161 DF, p-value: 0.7184
Part 2: Continuous X / Continuous Moderator
linearmodel2 <- lm(Support ~ Attractiveness + Gender + Attractiveness*Gender, data = mcnulty.clean)
summary(linearmodel2)
Call:
lm(formula = Support ~ Attractiveness + Gender + Attractiveness *
Gender, data = mcnulty.clean)
Residuals:
Min 1Q Median 3Q Max
-0.50021 -0.13753 -0.00784 0.11142 0.59926
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.48620 0.09194 5.288 4e-07 ***
Attractiveness -0.05983 0.02012 -2.974 0.003394 **
Gender -0.44207 0.12761 -3.464 0.000683 ***
Attractiveness:Gender 0.10533 0.02794 3.769 0.000230 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.2026 on 160 degrees of freedom
Multiple R-squared: 0.08533, Adjusted R-squared: 0.06818
F-statistic: 4.975 on 3 and 160 DF, p-value: 0.002507
library(interplot)
interplot(linearmodel2, var1 = "Attractiveness", var2 = "Gender")

linearmodel3 <- lm(Satisfaction ~ Attractiveness + Gender, data = mcnulty.clean)
summary(linearmodel3)
Call:
lm(formula = Satisfaction ~ Attractiveness + Gender, data = mcnulty.clean)
Residuals:
Min 1Q Median 3Q Max
-13.1998 -2.6853 -0.2895 2.7033 11.6201
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 36.3812 1.4426 25.220 <2e-16 ***
Attractiveness -0.6004 0.3060 -1.962 0.0515 .
Gender -0.0234 0.6936 -0.034 0.9731
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 4.441 on 161 degrees of freedom
Multiple R-squared: 0.02335, Adjusted R-squared: 0.01122
F-statistic: 1.925 on 2 and 161 DF, p-value: 0.1492
linearmodel4 <- lm(Satisfaction ~ Attractiveness + Gender + Attractiveness*Gender, data = mcnulty.clean)
summary(linearmodel4)
Call:
lm(formula = Satisfaction ~ Attractiveness + Gender + Attractiveness *
Gender, data = mcnulty.clean)
Residuals:
Min 1Q Median 3Q Max
-13.422 -2.726 -0.201 2.735 11.476
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 37.6374 2.0165 18.665 <2e-16 ***
Attractiveness -0.8837 0.4412 -2.003 0.0468 *
Gender -2.4423 2.7987 -0.873 0.3842
Attractiveness:Gender 0.5467 0.6128 0.892 0.3737
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 4.444 on 160 degrees of freedom
Multiple R-squared: 0.02819, Adjusted R-squared: 0.009966
F-statistic: 1.547 on 3 and 160 DF, p-value: 0.2045
Centering
mcnulty.clean <- mcnulty.clean %>%
mutate(.,
Satisfaction_cent = Satisfaction - mean(Satisfaction),
Attractiveness_cent = Attractiveness - mean(Attractiveness))
describe(mcnulty.clean)
linearmodel5 <- lm(Satisfaction ~ Attractiveness_cent + Gender + Attractiveness_cent*Gender, data = mcnulty.clean)
summary(linearmodel5)
Call:
lm(formula = Satisfaction ~ Attractiveness_cent + Gender + Attractiveness_cent *
Gender, data = mcnulty.clean)
Residuals:
Min 1Q Median 3Q Max
-13.422 -2.726 -0.201 2.735 11.476
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 33.72776 0.49078 68.723 <2e-16 ***
Attractiveness_cent -0.88374 0.44117 -2.003 0.0468 *
Gender -0.02358 0.69406 -0.034 0.9729
Attractiveness_cent:Gender 0.54673 0.61282 0.892 0.3737
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 4.444 on 160 degrees of freedom
Multiple R-squared: 0.02819, Adjusted R-squared: 0.009966
F-statistic: 1.547 on 3 and 160 DF, p-value: 0.2045
LS0tDQp0aXRsZTogIkpha2UgUmV5bm9sZHMgLSBNb2R1bGUgMyINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCg0KIyBMb2FkIGluIHJlbGV2YW50IHBhY2thZ2VzDQpgYGB7cn0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShwc3ljaCkNCmBgYA0KDQpgYGB7cn0NCmxpYnJhcnkoaGF2ZW4pDQptY251bHR5IDwtIHJlYWRfZHRhKCJNY051bHR5MjAwOC5kdGEiKQ0KZ2xpbXBzZShtY251bHR5KQ0KYGBgDQojIEhvdXNrZWVwaW5nIGFuZCBEYXRhIENsZWFuaW5nLyBDb2RpbmcNCiMjIFdlIGhhdmUgdXNlZCB0aGlzIGJlZm9yZSwgYnV0IGBkZXNjcmliZWAgYW5kIGB0YWJsZWAgYXJlIGEgZ3JlYXQgd2F5IHRvIGdldCBhIHF1aWNrIHN1bW1hcnkgb2YgdGhlIHZhcmlhYmxlcyBmb3VuZCBpbiBhIGRhdGFzZXQuDQpgYGB7cn0NCmRlc2NyaWJlKG1jbnVsdHksIGZhc3QgPSBUUlVFKQ0KYGBgDQoNCiMjIFJlbmFtaW5nIHZhcmlhYmxlcyBqdXN0IG1ha2VzIGl0IGVhc2llciBmb3IgeW91IGFzIHlvdSBjb2RlLiBMZXQncyByZW5hbWUgdGhlIHZhcmlhYmxlIGBDYVVuVHNgLiBJbiB0aGlzIHByb2Nlc3MsIHdlIGFyZSBhbHNvIG1ha2luZyBhIG5ldyBkYXRhc2V0LiBSZW1lbWJlciwgdGhpcyBpcyBhIGdyZWF0IHdheSB0byBrZWVwIHlvdXIgb3JpZ2luYWwgZGF0YSBzZXQgYXMgaXMgaWYgeW91IGV2ZXIgbmVlZCB0byBnbyBiYWNrIQ0KYGBge3J9DQptY251bHR5LmNsZWFuIDwtIG1jbnVsdHkNCmBgYA0KDQpgYGB7cn0NCmdsaW1wc2UobWNudWx0eS5jbGVhbikNCmBgYA0KDQojIFBhcnQgMTogQmFzaWMgTXVsdGlwbGUgTGluZWFyIFJlZ3Jlc3Npb24sIHcvbyBNb2RlcmF0b3IgQW5hbHlzaXMvSW50ZXJhY3Rpb24NCmBgYHtyfQ0KbGluZWFybW9kZWwxIDwtIGxtKFN1cHBvcnQgfiBBdHRyYWN0aXZlbmVzcyArIEdlbmRlciwgZGF0YSA9IG1jbnVsdHkuY2xlYW4pDQpzdW1tYXJ5KGxpbmVhcm1vZGVsMSkNCmBgYA0KIyBQYXJ0IDI6IENvbnRpbnVvdXMgWCAvIENvbnRpbnVvdXMgTW9kZXJhdG9yDQpgYGB7cn0NCmxpbmVhcm1vZGVsMiA8LSBsbShTdXBwb3J0IH4gQXR0cmFjdGl2ZW5lc3MgKyBHZW5kZXIgKyBBdHRyYWN0aXZlbmVzcypHZW5kZXIsIGRhdGEgPSBtY251bHR5LmNsZWFuKQ0Kc3VtbWFyeShsaW5lYXJtb2RlbDIpDQpgYGANCg0KYGBge3J9DQpsaWJyYXJ5KGludGVycGxvdCkNCmludGVycGxvdChsaW5lYXJtb2RlbDIsIHZhcjEgPSAiQXR0cmFjdGl2ZW5lc3MiLCB2YXIyID0gIkdlbmRlciIpDQpgYGANCg0KDQpgYGB7cn0NCmxpbmVhcm1vZGVsMyA8LSBsbShTYXRpc2ZhY3Rpb24gfiBBdHRyYWN0aXZlbmVzcyArIEdlbmRlciwgZGF0YSA9IG1jbnVsdHkuY2xlYW4pDQpzdW1tYXJ5KGxpbmVhcm1vZGVsMykNCmxpbmVhcm1vZGVsNCA8LSBsbShTYXRpc2ZhY3Rpb24gfiBBdHRyYWN0aXZlbmVzcyArIEdlbmRlciArIEF0dHJhY3RpdmVuZXNzKkdlbmRlciwgZGF0YSA9IG1jbnVsdHkuY2xlYW4pDQpzdW1tYXJ5KGxpbmVhcm1vZGVsNCkNCmBgYA0KIyBDZW50ZXJpbmcNCmBgYHtyfQ0KbWNudWx0eS5jbGVhbiA8LSBtY251bHR5LmNsZWFuICU+JQ0KICBtdXRhdGUoLiwNCiAgICAgICAgICAgICAgIFNhdGlzZmFjdGlvbl9jZW50ID0gU2F0aXNmYWN0aW9uIC0gbWVhbihTYXRpc2ZhY3Rpb24pLA0KICAgICAgICAgICAgQXR0cmFjdGl2ZW5lc3NfY2VudCA9IEF0dHJhY3RpdmVuZXNzIC0gbWVhbihBdHRyYWN0aXZlbmVzcykpDQoNCmRlc2NyaWJlKG1jbnVsdHkuY2xlYW4pDQpgYGANCg0KDQpgYGB7cn0NCmxpbmVhcm1vZGVsNSA8LSBsbShTYXRpc2ZhY3Rpb24gfiBBdHRyYWN0aXZlbmVzc19jZW50ICsgR2VuZGVyICsgQXR0cmFjdGl2ZW5lc3NfY2VudCpHZW5kZXIsIGRhdGEgPSBtY251bHR5LmNsZWFuKQ0Kc3VtbWFyeShsaW5lYXJtb2RlbDUpDQoNCmBgYA==