tests/testthat/test_mediate.r

#test the mediate function against published results from Hayes ()

# A simple mediation example is the Tal_Or data set (pmi for Hayes)
#The pmi data set from Hayes is available as the Tal_Or data set. 
mod4 <- mediate(reaction ~ cond + (pmi), data =Tal_Or,n.iter=50) 
summary(mod4)


#traditional regression  (c')
b.coeff <-c(.5249,.2544, .5064)
t.coeff <-c(.9585,.9943,5.2183)
test_that("traditional regression  (c')",
  expect_equivalent( b.coeff, mod4$cprime.reg$beta[,1],tolerance=.002))
  test_that("traditional regression  (c')  t ",
   expect_equivalent( t.coeff, mod4$cprime.reg$t,tolerance=.001))

#total effect reaction (c ) 3.25   .4957
b.coeff <- c( 3.25,   .4957)
t.coeff <- c( 17.0525, 1.7860)
test_that("c path (direct effect-- intercept and slope)",
        expect_equivalent(mod4$total.reg$beta,b.coeff,tolerance=.001)) 
    test_that("c path (direct effect-- t values)",
        expect_equivalent(mod4$total.reg$t,t.coeff,tolerance=.001)) 
    
#a effect X on M 
b.coeff <- c( 5.3769 , .4765 )
t.coeff <- c( 33.2222, 2.0218)
test_that("a path (direct effect-- intercept and slope)",
        expect_equivalent(mod4$a.reg$beta,b.coeff,tolerance=.001)) 
 test_that("a path (direct effect-- t values)",
        expect_equivalent(mod4$a.reg$t,t.coeff,tolerance=.001))   
        
#b effect (M on Y) 
b.coeff <- c(.5064 )
t.coeff <- c(5.2185)
test_that("b path M on Y) -- slope)",
        expect_equivalent(mod4$b.reg$beta[-1],b.coeff,tolerance=.001)) 
 test_that("a path (direct effect-- t values)",
        expect_equivalent(mod4$b.reg$t[-1],t.coeff,tolerance=.001))   
       
#ab effect (the indirect effect)) 
b.coeff <- c(.2413 )

test_that("ab  on Y) -- slope)",
        expect_equivalent(mod4$ab,b.coeff,tolerance=.001)) 
 test_that("a path (direct effect-- t values)",
        expect_equivalent(mod4$b.reg$t[-1],t.coeff,tolerance=.001))   



################
#Two mediators (from Hayes model 6 (chapter 5))
mod6 <- mediate(reaction ~ cond + (pmi) + (import), data =Tal_Or,n.iter=50) 
summary(mod6)
#note this is the model on page 135 


#traditional regression  (c')
b.coeff <-c(-.1498, .1034,.3965, .3244 )
t.coeff <-c(-.28287, .4324, 4.2645, 4.5857)
test_that("traditional regression  (c')",
  expect_equivalent( b.coeff, mod6$cprime.reg$beta[,1],tolerance=.002))
  test_that("traditional regression  (c')  t ",
   expect_equivalent( t.coeff, mod6$cprime.reg$t,tolerance=.001))

#total effect reaction (c ) 
b.coeff <- c( 3.25,   .4957)
t.coeff <- c( 17.0525, 1.7860)
test_that("c path (direct effect-- intercept and slope)",
        expect_equivalent(mod6$total.reg$beta,b.coeff,tolerance=.001)) 
    test_that("c path (direct effect-- t values)",
        expect_equivalent(mod6$total.reg$t,t.coeff,tolerance=.001)) 
    
#a effect X on M 
b.coeff <- c(5.3769,.47653,3.9077, .6268)
t.coeff <- c(33.222,2.0218, 18.3704, 2.0234)
test_that("a path (direct effect-- intercept and slope)",
        expect_equivalent(mod6$a.reg$beta,b.coeff,tolerance=.001)) 
 test_that("a path (direct effect-- t values)",
        expect_equivalent(mod6$a.reg$t,t.coeff,tolerance=.001))   
        
#b effect (M on Y) 
b.coeff <- c(.5064 )
t.coeff <- c(5.2185)
test_that("b path M on Y) -- slope)",
        expect_equivalent(mod4$b.reg$beta[-1],b.coeff,tolerance=.001)) 
 test_that("a path (direct effect-- t values)",
        expect_equivalent(mod4$b.reg$t[-1],t.coeff,tolerance=.001))   
       
#ab effect (the indirect effect)) 
b.coeff <- c(.3923, .1890, .2033 )

test_that("total ab  on Y) -- slope)",
        expect_equivalent(mod6$ab,b.coeff[1],tolerance=.001)) 
        
test_that("each ab  on Y) -- slope)",
        expect_equivalent(mod6$all.ab,b.coeff[2:3],tolerance=.001))









#Moderated mediation is done for the Garcia (Garcia, 2010) data set.
# (see Hayes, 2013 for the protest data set
#n.iter set to 50 (instead of default of 5000) for speed of example
#no mediation, just an interaction
#note that we do not zero center to be compatible with Hayes p 226
mod7 <- mediate(liking ~  sexism * prot2 , zero=FALSE,data=Garcia, n.iter = 50, plot=FALSE)

beta=c(7.7062, -.4725, -3.7727,.8336)
t.coeff = c(7.3750, -2.3184, -3.0084, 3.4224)
test_that("Moderated regression with slopes and intercepts of",
    expect_equivalent(mod7$total.reg$beta,beta, tolerance=.001))
  
test_that("Moderated regression with t of",
    expect_equivalent(mod7$total.reg$t,t.coeff, tolerance=.001))







data(GSBE)   #The Garcia et al data set (aka GSBE)
mod11.4 <- mediate(liking ~  sexism * prot2 + (respappr), data=Garcia,
        n.iter = 50,zero=FALSE)   #to match Hayes
summary(mod11.4)
#to see this interaction graphically, run the examples in ?Garcia

Try the psych package in your browser

Any scripts or data that you put into this service are public.

psych documentation built on June 27, 2024, 5:07 p.m.