library(metaSEM) library(readxl) #dat=read_excel("/Users/1.xlsx",col_names=T) dat=read.csv('/Users/1.csv',header=T) dat_matrix=split(dat[,c('r_x_med','r_x_y','r_med_y')],dat$studyid) dat_matrix=lapply(dat_matrix,function(x){m=vec2symMat(as.numeric(x),diag=F); dimnames(m)=list(c('x','med','y'),c('x','med','y')); m}) dat_matrix pattern.na(dat_matrix) is.pd(dat_matrix) dat2 <- Cor2DataFrame(dat_matrix, dat$sample_size, acov = "weighted") dat2$data=data.frame(dat2$data, mod=scale(dat$moderator1), check.names=F) # check.names has to be False dat2$data$mod[sample(length(dat2$data$mod),length(dat2$data$mod)*0.4)]=NA mod="med ~ x; y ~ med + x" ram=lavaan2RAM(mod, obs.variables=c("x","med","y")) ### one stage MASEM no moderator osmasem1=osmasem(model.name='no moderator',RAM=ram,data=dat2) osmasem1=rerun(osmasem1) summary(osmasem1) ### one stage MASEM one moderator on all paths moderated_paths=matrix( c( 0,0,0, '0*moderated', 0, 0, '0*moderated', '0*moderated', 0 # make the path 0 if the moderation on that path is not interested ), 3, 3, byrow=T ) osmasem2=osmasem(model.name='moderating all', RAM=ram, Ax=moderated_paths,data=dat2) osmasem2=rerun(osmasem2) summary(osmasem2)