#istall.packages("pastecs")

#nstall.packages("lm.beta")

#nstall.packages("QuantPsyc")

#install.packages("interactions")



#install.packages("jtools")`

#install.packages("multilevel")

#install.packages("boot")

library(pastecs)
## Warning: package 'pastecs' was built under R version 4.5.2
library(lm.beta)
## Warning: package 'lm.beta' was built under R version 4.5.2
library(QuantPsyc)
## Warning: package 'QuantPsyc' was built under R version 4.5.2
## Loading required package: boot
## Warning: package 'boot' was built under R version 4.5.2
## Loading required package: dplyr
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:pastecs':
## 
##     first, last
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
## Loading required package: purrr
## Loading required package: MASS
## 
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
## 
##     select
## 
## Attaching package: 'QuantPsyc'
## The following object is masked from 'package:lm.beta':
## 
##     lm.beta
## The following object is masked from 'package:base':
## 
##     norm
library(interactions)
## Warning: package 'interactions' was built under R version 4.5.2
library(jtools)
## Warning: package 'jtools' was built under R version 4.5.2
library(multilevel)
## Warning: package 'multilevel' was built under R version 4.5.2
## Loading required package: nlme
## 
## Attaching package: 'nlme'
## The following object is masked from 'package:dplyr':
## 
##     collapse
library("boot")

#Import Data

Data <- read.csv("C:\\Users\\lesle\\OneDrive\\Документы\\R\\Human Resources Data .csv", header = TRUE, stringsAsFactors = FALSE)

names(Data)
##  [1] "satisfaction_level"    "last_evaluation"       "number_project"       
##  [4] "average_monthly_hours" "time_spend_company"    "Work_accident"        
##  [7] "left"                  "promotion_last_5years" "department"           
## [10] "salary"
#Remove scientific notation

options(scipen = 999)

#Moderation with Covariates
#Variables:
#IV: average monthly hours
#Covariate: last evaluation
#DV: satisfaction level
#Moderator: salary
#Center IVs and Moderator

Data$salary.center <- meanCenter(Data$salary)

Data$last.eval.center <- meanCenter(Data$last_evaluation)

Data$avg.center <- meanCenter(Data$average_monthly_hours)

#assumptions test
#DataFrame with Moderation Variables


DataFrame <- Data[, c("satisfaction_level", "last_evaluation", "average_monthly_hours")]

#Descriptive Statistics (mean and SD) and Correlation

stat.desc(DataFrame)
##              satisfaction_level last_evaluation average_monthly_hours
## nbr.val         14999.000000000 14999.000000000         14999.0000000
## nbr.null            0.000000000     0.000000000             0.0000000
## nbr.na              0.000000000     0.000000000             0.0000000
## min                 0.090000000     0.360000000            96.0000000
## max                 1.000000000     1.000000000           310.0000000
## range               0.910000000     0.640000000           214.0000000
## sum              9191.890000000 10740.810000000       3015554.0000000
## median              0.640000000     0.720000000           200.0000000
## mean                0.612833522     0.716101740           201.0503367
## SE.mean             0.002030128     0.001397637             0.4077973
## CI.mean.0.95        0.003979300     0.002739538             0.7993325
## var                 0.061817201     0.029298864          2494.3131748
## std.dev             0.248630651     0.171169111            49.9430994
## coef.var            0.405706676     0.239029039             0.2484109
cor(DataFrame, use = "pairwise.complete.obs")
##                       satisfaction_level last_evaluation average_monthly_hours
## satisfaction_level            1.00000000       0.1050212           -0.02004811
## last_evaluation               0.10502121       1.0000000            0.33974180
## average_monthly_hours        -0.02004811       0.3397418            1.00000000
#Assumptions Testing

Assumptions_Mod <- lm(satisfaction_level ~ last.eval.center + avg.center + salary.center, data = Data)
par(mfrow=c(2,2))
plot(Assumptions_Mod)

#Moderation

Mod2 <- lm(satisfaction_level ~ last.eval.center + avg.center * salary.center, data = Data)

summary(Mod2)
## 
## Call:
## lm(formula = satisfaction_level ~ last.eval.center + avg.center * 
##     salary.center, data = Data)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.58298 -0.15955  0.02843  0.19662  0.46346 
## 
## Coefficients:
##                             Estimate  Std. Error t value             Pr(>|t|)
## (Intercept)               0.61284414  0.00201251 304.517 < 0.0000000000000002
## last.eval.center          0.18619064  0.01251955  14.872 < 0.0000000000000002
## avg.center               -0.00031235  0.00004285  -7.289    0.000000000000329
## salary.center             0.02018091  0.00315898   6.388    0.000000000172534
## avg.center:salary.center  0.00014885  0.00006416   2.320               0.0204
##                             
## (Intercept)              ***
## last.eval.center         ***
## avg.center               ***
## salary.center            ***
## avg.center:salary.center *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2465 on 14994 degrees of freedom
## Multiple R-squared:  0.01755,    Adjusted R-squared:  0.01729 
## F-statistic: 66.95 on 4 and 14994 DF,  p-value: < 0.00000000000000022
interact_plot(Mod2, pred = avg.center, modx = salary.center)
## Warning: -0.637182950469582 is outside the observed range of salary.center

ModSlopes <- sim_slopes(Mod2, pred = avg.center, modx = salary.center)
## Warning: -0.637182950469582 is outside the observed range of salary.center
ModSlopes
## JOHNSON-NEYMAN INTERVAL
## 
## When salary.center is OUTSIDE the interval [1.04, 13.69], the slope of
## avg.center is p < .05.
## 
## Note: The range of observed values of salary.center is [-0.59, 1.41]
## 
## SIMPLE SLOPES ANALYSIS
## 
## Slope of avg.center when salary.center = -0.63718295046958195460007 (- 1 SD): 
## 
##    Est.   S.E.   t val.      p
## ------- ------ -------- ------
##   -0.00   0.00    -6.94   0.00
## 
## Slope of avg.center when salary.center = -0.00000000000000003193214 (Mean): 
## 
##    Est.   S.E.   t val.      p
## ------- ------ -------- ------
##   -0.00   0.00    -7.29   0.00
## 
## Slope of avg.center when salary.center =  0.63718295046958195460007 (+ 1 SD): 
## 
##    Est.   S.E.   t val.      p
## ------- ------ -------- ------
##   -0.00   0.00    -3.64   0.00