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