“2021MetaPOQ”的版本间的差异
来自OBHRM百科
Lichaoping(讨论 | 贡献) |
Lichaoping(讨论 | 贡献) |
||
第6行: | 第6行: | ||
==论文R代码== | ==论文R代码== | ||
+ | <pre> | ||
+ | #加载安装包 | ||
+ | library(psychmeta) | ||
+ | library(tidyr) | ||
+ | library(magrittr) | ||
+ | library(dplyr) | ||
+ | library(tidyverse) | ||
+ | library(rio) | ||
+ | library(metaSEM) | ||
+ | library(semPlot) | ||
+ | library(plyr) | ||
+ | library(meta) | ||
+ | |||
+ | setwd("D:\\") | ||
+ | #请将data20201209.xlsx放在D盘根目录下。 | ||
+ | #如果放在其他目录下,请在此做相应调整。 | ||
+ | ################## 全部数据准备 ###################### | ||
+ | data <- import("data20201209.xlsx") | ||
+ | attach(data) | ||
+ | correct_main <- correct_r(correction = c("meas", "uvdrr_x", "uvdrr_y", "uvirr_x", | ||
+ | "uvirr_y", "bvdrr", "bvirr"), | ||
+ | rxyi = rxy, ux = 1, uy = 1, | ||
+ | rxx = rxx, | ||
+ | ryy = ryy, ux_observed = TRUE, uy_observed = TRUE, | ||
+ | rxx_restricted = TRUE, rxx_type = "alpha", k_items_x = NA, | ||
+ | ryy_restricted = TRUE, ryy_type = "alpha", k_items_y = NA, | ||
+ | sign_rxz = 1, sign_ryz = 1, n = NULL, conf_level = 0.95, | ||
+ | correct_bias = FALSE) | ||
+ | data$rtp = correct_main[["correlations"]][["rtp"]] | ||
+ | write.csv(data, "data.csv") | ||
+ | data <- import("data.csv") | ||
+ | orig.data <- subset(data.frame(data, correct_main$correlations), rtp <1) | ||
+ | |||
+ | k.article <- length(unique(paste(orig.data$author, orig.data$title))) | ||
+ | k.inde.sample <- length(unique(orig.data$id)) | ||
+ | k.eff.size <- nrow(unique(data.frame(orig.data$title, orig.data$rxy, orig.data$x, orig.data$y))) | ||
+ | sample.size <- unique(data.frame(orig.data$title, orig.data$n)) | ||
+ | n.sample.size <- as.vector(sample.size$orig.data.n)%>%sum | ||
+ | |||
+ | descr <- data.frame(c("文献", "独立样本", "效应值", "样本规模"), | ||
+ | c(k.article, k.inde.sample, k.eff.size, n.sample.size))%>% | ||
+ | set_colnames(c("类型", "数量")) | ||
+ | #### 1………………直接效应分析………………#### | ||
+ | #### 失安全系数计算 #### | ||
+ | d <- subset(orig.data, orig.data$x.frame.all == "资质过剩感") | ||
+ | attach(d) | ||
+ | d$zr <- 0.5*log((1+rxy)/(1-rxy)) | ||
+ | zr <- split(d$zr, d$y.coding.t) | ||
+ | n <- split(d$n, d$y.coding.t) | ||
+ | t <- list() | ||
+ | for (i in 1:length(n)){ | ||
+ | t[[i]] <- zr[[i]]*sqrt(n[[i]]-3) | ||
+ | i = i + 1} | ||
+ | nfs <- vector() | ||
+ | for (i in 1:length(zr)){ | ||
+ | nfs[[i]] <- abs(round(sum(t[[i]])^2/2.706 - length(zr[[i]]))) | ||
+ | i = i + 1} | ||
+ | final.nfs = data.frame(names(zr),nfs) %>% set_colnames(c("name", "nfs")) | ||
+ | |||
+ | zr.t <- split(d$zr, d$y.frame.all) | ||
+ | n.t <- split(d$n, d$y.frame.all) | ||
+ | for (i in 1:length(n.t)){ | ||
+ | t[[i]] <- zr.t[[i]]*sqrt(n.t[[i]]-3) | ||
+ | i = i + 1} | ||
+ | nfs <- vector() | ||
+ | for (i in 1:length(zr.t)){ | ||
+ | nfs[[i]] <- abs(round(sum(t[[i]])^2/2.706 - length(zr.t[[i]]))) | ||
+ | i = i + 1} | ||
+ | final.nfs.t = data.frame(names(zr.t),nfs)%>% set_colnames(c("name", "nfs")) | ||
+ | nfs = rbind(final.nfs, final.nfs.t) | ||
+ | |||
+ | order <- data.frame(c("消极情绪", "愤怒", "无聊", | ||
+ | "积极自我概念", "一般效能感", "其他效能感", "一般自尊", "基于组织的自尊", | ||
+ | "消极行为", "反生产行为", "离职意愿", | ||
+ | "积极行为", "创新", "工作重塑", "建言", "前瞻行为", | ||
+ | "知识共享", "组织公民行为", "任务绩效")) %>% set_colnames("order") | ||
+ | |||
+ | t.nfs = left_join(order, nfs, by=c("order"="name")) | ||
+ | write.csv(t.nfs, "nfs.csv") | ||
+ | |||
+ | attach(orig.data) | ||
+ | #### 主要变量直接效应 #### | ||
+ | main_r <- ma_r(rxyi = rxy, n = n, | ||
+ | sample_id = id, citekey = id, | ||
+ | construct_x = orig.data$x.frame.all, | ||
+ | construct_y = orig.data$y.frame.all, | ||
+ | moderators = orig.data$y.coding.t, | ||
+ | data = orig.data) | ||
+ | main_rho <- ma_r(rxyi = rtp, n = n, | ||
+ | sample_id = id, citekey = id, | ||
+ | construct_x = orig.data$x.frame.all, | ||
+ | construct_y = orig.data$y.frame.all, | ||
+ | moderators = orig.data$y.coding.t, | ||
+ | data = orig.data) | ||
+ | |||
+ | #### 异质性检验 #### | ||
+ | hetero <- heterogeneity(main_rho)%>%get_heterogeneity | ||
+ | data.hetero = data.frame(matrix(NA, nrow = length(hetero), ncol=2)) | ||
+ | names(data.hetero) = c("id","var") | ||
+ | data.hetero$id = colnames(sapply(hetero, function(x) x[[1]])) | ||
+ | data.hetero$var = sapply(hetero, function(x) x[[1]]$percent_var_accounted[[1]]) | ||
+ | |||
+ | #### 主效应分析表制作 #### | ||
+ | main_r <- main_r %>% summary %>% get_metatab | ||
+ | main_rho <- main_rho %>% summary %>% get_metatab | ||
+ | maineffects <- data.frame(main_r$analysis_id, | ||
+ | main_r$construct_x, | ||
+ | main_r$construct_y, | ||
+ | main_r$`orig.data$y.coding.t`, | ||
+ | main_r$k, main_r$N, | ||
+ | round(cbind(main_r$mean_r, main_r$sd_r, | ||
+ | main_rho$mean_r,main_rho$sd_r),2), | ||
+ | paste("[", round(main_rho$CI_LL_95, 2), ", ", | ||
+ | round(main_rho$CI_UL_95, 2), "]"), | ||
+ | paste("[", round(main_rho$CR_LL_80, 2), ", ", | ||
+ | round(main_rho$CR_UL_80, 2),"]"), | ||
+ | data.hetero) %>% | ||
+ | set_colnames(c("id", "x", "y", "dim", "k", "n", | ||
+ | "r", "SD_r","rho", "SD_rho", | ||
+ | "95% CI", "80% CV", | ||
+ | "var%")) | ||
+ | main.poq <- subset(maineffects, maineffects$x == "资质过剩感" & | ||
+ | maineffects$y != "个人工作匹配"& | ||
+ | maineffects$y != "个人组织匹配"& | ||
+ | maineffects$y != "健康"& | ||
+ | maineffects$y != "对工作的态度"& | ||
+ | maineffects$y != "对组织的态度") | ||
+ | main.poq$`5k+10` = main.poq$k * 5 + 10 | ||
+ | |||
+ | maineffects.poq = left_join(main.poq, t.nfs, by=c("dim"="order")) %>% | ||
+ | left_join(t.nfs, by=c("y"="order")) %>% unique | ||
+ | |||
+ | mainpoq <- data.frame(maineffects.poq[, 3:12], | ||
+ | round(unlist(maineffects.poq$`var%`),2), | ||
+ | maineffects.poq[, 14:16])%>%set_colnames( | ||
+ | c("y", "dim", "k", "n", "r", | ||
+ | "SD_r", "rho", "SD_rho", "95%CI", "80%CV", | ||
+ | "var", "5k+10", "nfs.dim", "nfs.all")) | ||
+ | write.csv(mainpoq, file = "poq直接效应.csv") | ||
+ | |||
+ | |||
+ | attach(maineffects) | ||
+ | maineffects$word <- paste("(", r,", ", rho, ")","\n", | ||
+ | "(", k,", ", maineffects$n, ")","\n", | ||
+ | `95% CI`,"\n", | ||
+ | `80% CV`) | ||
+ | |||
+ | |||
+ | #### 2………………中介效应检验………………#### | ||
+ | #### 数据准备:全模型数据 #### | ||
+ | varnames <- c("POQ","NE", "PS", "NB", "PB", "JP") | ||
+ | attach(maineffects) | ||
+ | poq.ne <- subset(maineffects, x == "资质过剩感" & | ||
+ | y == "消极情绪" & | ||
+ | dim == "All Levels") | ||
+ | poq.ps <- subset(maineffects, x == "资质过剩感" & | ||
+ | y == "积极自我概念" & | ||
+ | dim == "All Levels") | ||
+ | poq.nb <- subset(maineffects, x == "资质过剩感" & | ||
+ | y == "消极行为" & | ||
+ | dim == "All Levels") | ||
+ | poq.pb <- subset(maineffects, x == "资质过剩感" & | ||
+ | y == "积极行为" & | ||
+ | dim == "All Levels") | ||
+ | poq.jp <- subset(maineffects, x == "资质过剩感" & | ||
+ | y == "任务绩效" & | ||
+ | dim == "All Levels") | ||
+ | |||
+ | ne.ps <- subset(maineffects, (x == "消极情绪" & | ||
+ | y == "积极自我概念" & | ||
+ | dim == "All Levels")| | ||
+ | (y == "消极情绪" & | ||
+ | x == "积极自我概念" & | ||
+ | dim == "All Levels")) | ||
+ | ne.nb <- subset(maineffects, (x == "消极情绪" & | ||
+ | y == "消极行为" & | ||
+ | dim == "All Levels")| | ||
+ | (y == "消极情绪" & | ||
+ | x == "消极行为" & | ||
+ | dim == "All Levels")) | ||
+ | ne.pb <- subset(maineffects, (x == "消极情绪" & | ||
+ | y == "积极行为" & | ||
+ | dim == "All Levels")| | ||
+ | (y == "消极情绪" & | ||
+ | x == "积极行为" & | ||
+ | dim == "All Levels")) | ||
+ | ne.jp <- subset(maineffects, (x == "消极情绪" & | ||
+ | y == "任务绩效" & | ||
+ | dim == "All Levels")| | ||
+ | (y == "消极情绪" & | ||
+ | x == "任务绩效" & | ||
+ | dim == "All Levels")) | ||
+ | |||
+ | ps.nb <- subset(maineffects, (x == "积极自我概念" & | ||
+ | y == "消极行为" & | ||
+ | dim == "All Levels")| | ||
+ | (y == "积极自我概念" & | ||
+ | x == "消极行为" & | ||
+ | dim == "All Levels")) | ||
+ | ps.pb <- subset(maineffects, (x == "积极自我概念" & | ||
+ | y == "积极行为" & | ||
+ | dim == "All Levels")| | ||
+ | (y == "积极自我概念" & | ||
+ | x == "积极行为" & | ||
+ | dim == "All Levels")) | ||
+ | ps.jp <- subset(maineffects, (x == "积极自我概念" & | ||
+ | y == "任务绩效" & | ||
+ | dim == "All Levels")| | ||
+ | (y == "积极自我概念" & | ||
+ | x == "任务绩效" & | ||
+ | dim == "All Levels")) | ||
+ | |||
+ | nb.pb <- subset(maineffects, (x == "消极行为" & | ||
+ | y == "积极行为" & | ||
+ | dim == "All Levels")| | ||
+ | (y == "消极行为" & | ||
+ | x == "积极行为" & | ||
+ | dim == "All Levels")) | ||
+ | nb.jp <- subset(maineffects, (x == "消极行为" & | ||
+ | y == "任务绩效" & | ||
+ | dim == "All Levels")| | ||
+ | (y == "消极行为" & | ||
+ | x == "任务绩效" & | ||
+ | dim == "All Levels")) | ||
+ | |||
+ | pb.jp <- subset(maineffects, (x == "积极行为" & | ||
+ | y == "任务绩效" & | ||
+ | dim == "All Levels")| | ||
+ | (y == "积极行为" & | ||
+ | x == "任务绩效" & | ||
+ | dim == "All Levels")) | ||
+ | all.matrix <- vec2symMat(c(poq.ne$rho, poq.ps$rho, poq.nb$rho, poq.pb$rho, poq.jp$rho, | ||
+ | ne.ps$rho, ne.nb$rho, ne.pb$rho, ne.jp$rho, | ||
+ | ps.nb$rho, ps.pb$rho, ps.jp$rho, | ||
+ | nb.pb$rho, nb.jp$rho, | ||
+ | pb.jp$rho), | ||
+ | diag = FALSE, byrow = FALSE) %>% | ||
+ | set_colnames(varnames) %>% | ||
+ | set_rownames(varnames) | ||
+ | |||
+ | all_dat <- list(all.matrix) | ||
+ | is.pd(all_dat) | ||
+ | |||
+ | |||
+ | attach(orig.data) | ||
+ | main_in_r <- ma_r(rxyi = rxy, n = n, | ||
+ | sample_id = id, citekey = id, | ||
+ | construct_x = orig.data$x.frame.all, | ||
+ | construct_y = orig.data$y.frame.all, | ||
+ | moderators = orig.data$indi, | ||
+ | data = orig.data) | ||
+ | main_in_rho <- ma_r(rxyi = rtp, n = n, | ||
+ | sample_id = id, citekey = id, | ||
+ | construct_x = orig.data$x.frame.all, | ||
+ | construct_y = orig.data$y.frame.all, | ||
+ | moderators = orig.data$indi, | ||
+ | data = orig.data) | ||
+ | hetero_in <- heterogeneity(main_in_rho)%>%get_heterogeneity | ||
+ | data.hetero_in = data.frame(matrix(NA, nrow = length(hetero_in), ncol=2)) | ||
+ | names(data.hetero_in) = c("id","var") | ||
+ | data.hetero_in$id = colnames(sapply(hetero_in, function(x) x[[1]])) | ||
+ | data.hetero_in$var = sapply(hetero_in, function(x) x[[1]]$percent_var_accounted[[1]]) | ||
+ | |||
+ | |||
+ | main_in_r <- main_in_r %>% summary %>% get_metatab %>% na.omit | ||
+ | main_in_rho <- main_in_rho %>% summary %>% get_metatab %>% na.omit | ||
+ | |||
+ | main_indi <- data.frame(main_in_r$analysis_id, | ||
+ | main_in_r$construct_x, | ||
+ | main_in_r$construct_y, | ||
+ | main_in_r$`orig.data$indi`, | ||
+ | main_in_r$k, main_in_r$N, | ||
+ | round(cbind(main_in_r$mean_r, main_in_r$sd_r, | ||
+ | main_in_rho$mean_r,main_in_rho$sd_r),2), | ||
+ | paste("[", round(main_in_rho$CI_LL_95, 2), ", ", | ||
+ | round(main_in_rho$CI_UL_95, 2), "]"), | ||
+ | paste("[", round(main_in_rho$CR_LL_80, 2), ", ", | ||
+ | round(main_in_rho$CR_UL_80, 2),"]") | ||
+ | ) %>% | ||
+ | set_colnames(c("id", "x", "y", "indi", "k", "n", | ||
+ | "r", "SD_r","rho", "SD_rho", | ||
+ | "95% CI", "80% CV")) | ||
+ | |||
+ | #### 数据准备:低个人主义(高集体主义)数据 #### | ||
+ | attach(main_indi) | ||
+ | poq.ne.l <- subset(main_indi, x == "资质过剩感" & y == "消极情绪" & indi == "L") | ||
+ | |||
+ | poq.ps.l <- subset(main_indi, x == "资质过剩感" & | ||
+ | y == "积极自我概念" & | ||
+ | indi == "L") | ||
+ | poq.nb.l <- subset(main_indi, x == "资质过剩感" & | ||
+ | y == "消极行为" & | ||
+ | indi == "L") | ||
+ | poq.pb.l <- subset(main_indi, x == "资质过剩感" & | ||
+ | y == "积极行为" & | ||
+ | indi == "L") | ||
+ | poq.jp.l <- subset(main_indi, x == "资质过剩感" & | ||
+ | y == "任务绩效" & | ||
+ | indi == "L") | ||
+ | |||
+ | ne.ps.l <- subset(main_indi, (x == "消极情绪" & | ||
+ | y == "积极自我概念" & | ||
+ | indi == "L")| | ||
+ | (y == "消极情绪" & | ||
+ | x == "积极自我概念" & | ||
+ | indi == "L")) | ||
+ | ne.nb.l <- subset(main_indi, (x == "消极情绪" & | ||
+ | y == "消极行为" & | ||
+ | indi == "L")| | ||
+ | (y == "消极情绪" & | ||
+ | x == "消极行为" & | ||
+ | indi == "L")) | ||
+ | ne.pb.l <- subset(main_indi, (x == "消极情绪" & | ||
+ | y == "积极行为" & | ||
+ | indi == "L")| | ||
+ | (y == "消极情绪" & | ||
+ | x == "积极行为" & | ||
+ | indi == "L")) | ||
+ | ne.jp.l <- subset(main_indi, (x == "消极情绪" & | ||
+ | y == "任务绩效" & | ||
+ | indi == "L")| | ||
+ | (y == "消极情绪" & | ||
+ | x == "任务绩效" & | ||
+ | indi == "L")) | ||
+ | |||
+ | ps.nb.l <- subset(main_indi, (x == "积极自我概念" & | ||
+ | y == "消极行为" & | ||
+ | indi == "L")| | ||
+ | (y == "积极自我概念" & | ||
+ | x == "消极行为" & | ||
+ | indi == "L")) | ||
+ | ps.pb.l <- subset(main_indi, (x == "积极自我概念" & | ||
+ | y == "积极行为" & | ||
+ | indi == "L")| | ||
+ | (y == "积极自我概念" & | ||
+ | x == "积极行为" & | ||
+ | indi == "L")) | ||
+ | ps.jp.l <- subset(main_indi, (x == "积极自我概念" & | ||
+ | y == "任务绩效" & | ||
+ | indi == "L")| | ||
+ | (y == "积极自我概念" & | ||
+ | x == "任务绩效" & | ||
+ | indi == "L")) | ||
+ | |||
+ | nb.pb.l <- subset(main_indi, (x == "消极行为" & | ||
+ | y == "积极行为" & | ||
+ | indi == "L")| | ||
+ | (y == "消极行为" & | ||
+ | x == "积极行为" & | ||
+ | indi == "L")) | ||
+ | nb.jp.l <- subset(main_indi, (x == "消极行为" & | ||
+ | y == "任务绩效" & | ||
+ | indi == "L")| | ||
+ | (y == "消极行为" & | ||
+ | x == "任务绩效" & | ||
+ | indi == "L")) | ||
+ | |||
+ | pb.jp.l <- subset(main_indi, (x == "积极行为" & | ||
+ | y == "任务绩效" & | ||
+ | indi == "L")| | ||
+ | (y == "积极行为" & | ||
+ | x == "任务绩效" & | ||
+ | indi == "L")) | ||
+ | all.matrix.l <- vec2symMat(c(poq.ne.l$rho, poq.ps.l$rho, poq.nb.l$rho, poq.pb.l$rho, poq.jp.l$rho, | ||
+ | ne.ps.l$rho, ne.nb.l$rho, ne.pb.l$rho, ne.jp.l$rho, | ||
+ | ps.nb.l$rho, ps.pb.l$rho, ps.jp.l$rho, | ||
+ | nb.pb.l$rho, nb.jp.l$rho, | ||
+ | pb.jp.l$rho), | ||
+ | diag = FALSE, byrow = FALSE) %>% | ||
+ | set_colnames(varnames) %>% | ||
+ | set_rownames(varnames) | ||
+ | |||
+ | all_dat.l <- list(all.matrix.l) | ||
+ | is.pd(all_dat.l) | ||
+ | #### 数据准备:高个人主义(低集体主义)数据 #### | ||
+ | attach(main_indi) | ||
+ | poq.ne.h <- subset(main_indi, x == "资质过剩感" & | ||
+ | y == "消极情绪" & | ||
+ | indi == "H") | ||
+ | poq.ps.h <- subset(main_indi, x == "资质过剩感" & | ||
+ | y == "积极自我概念" & | ||
+ | indi == "H") | ||
+ | poq.nb.h <- subset(main_indi, x == "资质过剩感" & | ||
+ | y == "消极行为" & | ||
+ | indi == "H") | ||
+ | poq.pb.h <- subset(main_indi, x == "资质过剩感" & | ||
+ | y == "积极行为" & | ||
+ | indi == "H") | ||
+ | poq.jp.h <- subset(main_indi, x == "资质过剩感" & | ||
+ | y == "任务绩效" & | ||
+ | indi == "H") | ||
+ | |||
+ | ne.ps.h <- subset(main_indi, (x == "消极情绪" & | ||
+ | y == "积极自我概念" & | ||
+ | indi == "H")| | ||
+ | (y == "消极情绪" & | ||
+ | x == "积极自我概念" & | ||
+ | indi == "H")) | ||
+ | ne.nb.h <- subset(main_indi, (x == "消极情绪" & | ||
+ | y == "消极行为" & | ||
+ | indi == "H")| | ||
+ | (y == "消极情绪" & | ||
+ | x == "消极行为" & | ||
+ | indi == "H")) | ||
+ | ne.pb.h <- subset(main_indi, (x == "消极情绪" & | ||
+ | y == "积极行为" & | ||
+ | indi == "H")| | ||
+ | (y == "消极情绪" & | ||
+ | x == "积极行为" & | ||
+ | indi == "H")) | ||
+ | ne.jp.h <- subset(main_indi, (x == "消极情绪" & | ||
+ | y == "任务绩效" & | ||
+ | indi == "H")| | ||
+ | (y == "消极情绪" & | ||
+ | x == "任务绩效" & | ||
+ | indi == "H")) | ||
+ | |||
+ | ps.nb.h <- subset(main_indi, (x == "积极自我概念" & | ||
+ | y == "消极行为" & | ||
+ | indi == "H")| | ||
+ | (y == "积极自我概念" & | ||
+ | x == "消极行为" & | ||
+ | indi == "H")) | ||
+ | ps.pb.h <- subset(main_indi, (x == "积极自我概念" & | ||
+ | y == "积极行为" & | ||
+ | indi == "H")| | ||
+ | (y == "积极自我概念" & | ||
+ | x == "积极行为" & | ||
+ | indi == "H")) | ||
+ | ps.jp.h <- subset(main_indi, (x == "积极自我概念" & | ||
+ | y == "任务绩效" & | ||
+ | indi == "H")| | ||
+ | (y == "积极自我概念" & | ||
+ | x == "任务绩效" & | ||
+ | indi == "H")) | ||
+ | |||
+ | nb.pb.h <- subset(main_indi, (x == "消极行为" & | ||
+ | y == "积极行为" & | ||
+ | indi == "H")| | ||
+ | (y == "消极行为" & | ||
+ | x == "积极行为" & | ||
+ | indi == "H")) | ||
+ | nb.jp.h <- subset(main_indi, (x == "消极行为" & | ||
+ | y == "任务绩效" & | ||
+ | indi == "H")| | ||
+ | (y == "消极行为" & | ||
+ | x == "任务绩效" & | ||
+ | indi == "H")) | ||
+ | |||
+ | pb.jp.h <- subset(main_indi, (x == "积极行为" & | ||
+ | y == "任务绩效" & | ||
+ | indi == "H")| | ||
+ | (y == "积极行为" & | ||
+ | x == "任务绩效" & | ||
+ | indi == "H")) | ||
+ | all.matrix.h <- vec2symMat(c(poq.ne.h$rho, poq.ps.h$rho, poq.nb.h$rho, poq.pb.h$rho, poq.jp.h$rho, | ||
+ | ne.ps.h$rho, ne.nb.h$rho, ne.pb.h$rho, ne.jp.h$rho, | ||
+ | ps.nb.h$rho, ps.pb.h$rho, ps.jp.h$rho, | ||
+ | nb.pb.h$rho, nb.jp.h$rho, | ||
+ | pb.jp.h$rho), | ||
+ | diag = FALSE, byrow = FALSE) %>% | ||
+ | set_colnames(varnames) %>% | ||
+ | set_rownames(varnames) | ||
+ | |||
+ | all_dat.h <- list(all.matrix.h) | ||
+ | is.pd(all_dat.h) | ||
+ | #### 调和平均数 #### | ||
+ | library(psych) | ||
+ | all_n <- c(poq.ne$n, poq.ps$n, poq.nb$n, poq.pb$n, poq.jp$n, | ||
+ | ne.ps$n, ne.nb$n, ne.pb$n, ne.jp$n, | ||
+ | ps.nb$n, ps.pb$n, ps.jp$n, | ||
+ | nb.pb$n, nb.jp$n, | ||
+ | pb.jp$n) %>% harmonic.mean %>% round | ||
+ | n_l <- c(poq.ne.l$n, poq.ps.l$n, poq.nb.l$n, poq.pb.l$n, poq.jp.l$n, | ||
+ | ne.ps.l$n, ne.nb.l$n, ne.pb.l$n, ne.jp.l$n, | ||
+ | ps.nb.l$n, ps.pb.l$n, ps.jp.l$n, | ||
+ | nb.pb.l$n, nb.jp.l$n, | ||
+ | pb.jp.l$n) %>% harmonic.mean %>% round | ||
+ | n_h <- c(poq.ne.h$n, poq.ps.h$n, poq.nb.h$n, poq.pb.h$n, poq.jp.h$n, | ||
+ | ne.ps.h$n, ne.nb.h$n, ne.pb.h$n, ne.jp.h$n, | ||
+ | ps.nb.h$n, ps.pb.h$n, ps.jp.h$n, | ||
+ | nb.pb.h$n, nb.jp.h$n, | ||
+ | pb.jp.h$n) %>% harmonic.mean %>% round | ||
+ | |||
+ | ####模型设置 #### | ||
+ | |||
+ | model_all <- 'NB ~ POQ + PS + NE | ||
+ | PB ~ POQ + PS + NE | ||
+ | JP ~ POQ + PS + NE | ||
+ | |||
+ | NE ~ POQ | ||
+ | PS ~ POQ | ||
+ | |||
+ | NE ~~ 1*NE | ||
+ | PS ~~ 1*PS | ||
+ | POQ ~~ 1*POQ | ||
+ | |||
+ | NE ~~ 0.1*PS | ||
+ | |||
+ | NB ~~ 0.1*NB | ||
+ | PB ~~ 0.1*PB | ||
+ | JP ~~ 0.1*JP | ||
+ | |||
+ | NB ~~ 0.1*PB | ||
+ | NB ~~ 0.1*JP | ||
+ | JP ~~ 0.1*PB' | ||
+ | |||
+ | plot(model_all, col="yellow") | ||
+ | |||
+ | RAM_all <- lavaan2RAM(model_all, obs.variables = varnames) | ||
+ | RAM_all | ||
+ | |||
+ | |||
+ | #### SEM全部数据及调和平均数 #### | ||
+ | fin_dat <- list(all_dat, all_dat.l, all_dat.h) | ||
+ | fin_n <- c(all_n, n_l, n_h) | ||
+ | |||
+ | |||
+ | stage1 <- list() | ||
+ | stage2 <- list() | ||
+ | stage2_LB <- list() | ||
+ | stage2_Z <- list() | ||
+ | ind_LB <- list() | ||
+ | ind_Z <- list() | ||
+ | fitness <- list() | ||
+ | path <- list() | ||
+ | ind <- list() | ||
+ | sem <- list() | ||
+ | name <- c("all", "low individualism", "high individualism") | ||
+ | for (i in 1:length(fin_dat)){ | ||
+ | #### stage1 #### | ||
+ | stage1[[i]] <- tssem1(Cov = fin_dat[[i]], n = fin_n[i], method = "FEM", | ||
+ | RE.type = "Diag", RE.startvalues=0.1, | ||
+ | acov = "weighted") | ||
+ | |||
+ | summary(stage1[[i]]) | ||
+ | #### stage2 #### | ||
+ | stage2[[i]] <- tssem2(stage1[[i]], Amatrix = RAM_all$A, Smatrix = RAM_all$S) | ||
+ | summary(stage2[[i]]) | ||
+ | |||
+ | stage2_LB[[i]] <- tssem2(stage1[[i]], Amatrix = RAM_all$A, Smatrix = RAM_all$S, | ||
+ | diag.constraints = TRUE, intervals.type = "LB", | ||
+ | mx.algebras = list( | ||
+ | #POQ-NE-Y | ||
+ | IndNE_NB = mxAlgebra(NEONPOQ*NBONNE, name = "IndNE_NB"), | ||
+ | IndNE_PB = mxAlgebra(NEONPOQ*PBONNE, name = "IndNE_PB"), | ||
+ | IndNE_JP = mxAlgebra(NEONPOQ*JPONNE, name = "IndNE_JP"), | ||
+ | #POQ-PS-Y | ||
+ | IndPS_NB = mxAlgebra(PSONPOQ*NBONPS, name = "IndPS_NB"), | ||
+ | IndPS_PB = mxAlgebra(PSONPOQ*PBONPS, name = "IndPS_PB"), | ||
+ | IndPS_JP = mxAlgebra(PSONPOQ*JPONPS, name = "IndPS_JP"), | ||
+ | #POQ-NE+PS-Y | ||
+ | Indall_NB = mxAlgebra(NEONPOQ*NBONNE + PSONPOQ*NBONPS, name = "Indall_NB"), | ||
+ | Indall_PB = mxAlgebra(NEONPOQ*PBONNE + PSONPOQ*PBONPS, name = "Indall_PB"), | ||
+ | Indall_JP = mxAlgebra(NEONPOQ*JPONNE + PSONPOQ*JPONPS, name = "Indall_JP"), | ||
+ | #POQ-NE+PS-Y PLUS POQ-Y | ||
+ | Total_NB = mxAlgebra(NEONPOQ*NBONNE + PSONPOQ*NBONPS + NBONPOQ, name = "Total_NB"), | ||
+ | Total_PB = mxAlgebra(NEONPOQ*PBONNE + PSONPOQ*PBONPS + PBONPOQ, name = "Total_PB"), | ||
+ | Total_JP = mxAlgebra(NEONPOQ*JPONNE + PSONPOQ*JPONPS + JPONPOQ, name = "Total_JP"), | ||
+ | #Diff POQ-(NE-PS)-Y | ||
+ | DIF_NEminusPS_NB= mxAlgebra(NEONPOQ*NBONNE - PSONPOQ*NBONPS, name = "DIF_NEminusPS_NB"), | ||
+ | DIF_NEminusPS_PB= mxAlgebra(NEONPOQ*PBONNE - PSONPOQ*PBONPS, name = "DIF_NEminusPS_PB"), | ||
+ | DIF_NEminusPS_JP= mxAlgebra(NEONPOQ*JPONNE - PSONPOQ*JPONPS, name = "DIF_NEminusPS_JP"))) | ||
+ | stage2_LB[[i]] <- rerun(stage2_LB[[i]]) | ||
+ | ind_LB[[i]] <- summary(stage2_LB[[i]]) | ||
+ | |||
+ | stage2_Z[[i]] <- tssem2(stage1[[i]], Amatrix = RAM_all$A, Smatrix = RAM_all$S, | ||
+ | diag.constraints = FALSE, intervals.type = "z", | ||
+ | mx.algebras = list( | ||
+ | IndNE_NB = mxAlgebra(NEONPOQ*NBONNE, name = "IndNE_NB"), | ||
+ | IndNE_PB = mxAlgebra(NEONPOQ*PBONNE, name = "IndNE_PB"), | ||
+ | IndNE_JP = mxAlgebra(NEONPOQ*JPONNE, name = "IndNE_JP"), | ||
+ | |||
+ | IndPS_NB = mxAlgebra(PSONPOQ*NBONPS, name = "IndPS_NB"), | ||
+ | IndPS_PB = mxAlgebra(PSONPOQ*PBONPS, name = "IndPS_PB"), | ||
+ | IndPS_JP = mxAlgebra(PSONPOQ*JPONPS, name = "IndPS_JP"), | ||
+ | |||
+ | Indall_NB = mxAlgebra(NEONPOQ*NBONNE + PSONPOQ*NBONPS, name = "Indall_NB"), | ||
+ | Indall_PB = mxAlgebra(NEONPOQ*PBONNE + PSONPOQ*PBONPS, name = "Indall_PB"), | ||
+ | Indall_JP = mxAlgebra(NEONPOQ*JPONNE + PSONPOQ*JPONPS, name = "Indall_JP"), | ||
+ | |||
+ | Total_NB = mxAlgebra(NEONPOQ*NBONNE + PSONPOQ*NBONPS + NBONPOQ, name = "Total_NB"), | ||
+ | Total_PB = mxAlgebra(NEONPOQ*PBONNE + PSONPOQ*PBONPS + PBONPOQ, name = "Total_PB"), | ||
+ | Total_JP = mxAlgebra(NEONPOQ*JPONNE + PSONPOQ*JPONPS + JPONPOQ, name = "Total_JP"), | ||
+ | |||
+ | DIF_NEminusPS_NB= mxAlgebra(NEONPOQ*NBONNE - PSONPOQ*NBONPS, name = "DIF_NEminusPS_NB"), | ||
+ | DIF_NEminusPS_PB= mxAlgebra(NEONPOQ*PBONNE - PSONPOQ*PBONPS, name = "DIF_NEminusPS_PB"), | ||
+ | DIF_NEminusPS_JP= mxAlgebra(NEONPOQ*JPONNE - PSONPOQ*JPONPS, name = "DIF_NEminusPS_JP"))) | ||
+ | stage2_Z[[i]] <- rerun(stage2_Z[[i]]) | ||
+ | ind_Z[[i]] <- summary(stage2_Z[[i]]) | ||
+ | #### 拟合系数 #### | ||
+ | fitness[[i]] <- ind_LB[[i]][["stat"]]%>%as.data.frame%>%round(2)%>% | ||
+ | set_colnames("Goodness-of-fit indices") | ||
+ | #### 路径系数 #### | ||
+ | path[[i]] <- data.frame(round(ind_Z[[i]][["coefficients"]][,1], 2), | ||
+ | paste("[", round(ind_Z[[i]][["coefficients"]][,3], 2),",", | ||
+ | round(ind_Z[[i]][["coefficients"]][,4], 2), "]"), | ||
+ | round(ind_Z[[i]][["coefficients"]][,2], 2), | ||
+ | round(ind_Z[[i]][["coefficients"]][,5], 2), | ||
+ | round(ind_Z[[i]][["coefficients"]][,6], 2)) %>% | ||
+ | set_colnames(c("β", "95% CI", "SE", "z", "p")) %>% | ||
+ | set_rownames(c("JPONNE", "JPONPOQ", "JPONPS", | ||
+ | "NBONNE", "NBONPOQ", "NBONPS", | ||
+ | "NEONPOQ", "PBONNE", "PBONPOQ", | ||
+ | "PBONPS", "PSONPOQ")) | ||
+ | #### 中介效应 #### | ||
+ | ind[[i]] <- data.frame(round(ind_LB[[i]][["mx.algebras"]][,2],2), | ||
+ | paste("[", round(ind_LB[[i]][["mx.algebras"]][,1],2), ",", | ||
+ | round(ind_LB[[i]][["mx.algebras"]][,3],2), "]")) %>% | ||
+ | set_colnames(c("β", "95%CI"))%>% | ||
+ | set_rownames(c("IndNE_NB", "IndNE_PB", "IndNE_JP", | ||
+ | "IndPS_NB", "IndPS_PB", "IndPS_JP", | ||
+ | "Indall_NB", "Indall_PB", "Indall_JP", | ||
+ | "Total_NB", "Total_PB", "Total_JP", | ||
+ | "DIF_NEminusPS_NB", "DIF_NEminusPS_PB", "DIF_NEminusPS_JP")) | ||
+ | sem[[i]] <- list(name = name[i], | ||
+ | fit=fitness[[i]], path = path[[i]], ind = ind[[i]]) | ||
+ | sem[[i]] | ||
+ | |||
+ | i = i + 1} | ||
+ | sem | ||
+ | #### 结构方程分析结果表格 #### | ||
+ | final_fit <- cbind(sem[[1]][["fit"]][c(1,7,4),], | ||
+ | sem[[2]][["fit"]][c(1,7,4),], | ||
+ | sem[[3]][["fit"]][c(1,7,4),])%>% | ||
+ | set_rownames(c("n", "Chi", "p"))%>% | ||
+ | set_colnames(c("全样本", "高集体主义", "低集体主义")) | ||
+ | final_path <- rbind(c("全样本", " "," ", " ", " ", | ||
+ | "高集体主义", " "," ", " ", " ", | ||
+ | "低集体主义", " "," ", " ", " "), | ||
+ | rep(c("β", "95%CI", "SE", "z", "p"), 3), | ||
+ | cbind(rbind(sem[[1]][["path"]]), | ||
+ | rbind(sem[[2]][["path"]]), | ||
+ | rbind(sem[[3]][["path"]])))%>% | ||
+ | set_colnames(c(1:15)) | ||
+ | final_ind <- rbind(rep(c("β", "95%CI"),3), | ||
+ | cbind(sem[[1]][["ind"]], | ||
+ | sem[[2]][["ind"]], | ||
+ | sem[[3]][["ind"]]))%>% | ||
+ | set_colnames(c(1:6)) | ||
+ | write.csv(final_ind, "ind.csv") | ||
+ | #### 相关系数文本 #### | ||
+ | sem.matrix <- cbind(c(poq.ne$word, poq.ps$word, poq.nb$word, poq.pb$word, poq.jp$word), | ||
+ | c(" ", ne.ps$word, ne.nb$word, ne.pb$word, ne.jp$word), | ||
+ | c(" ", " ", ps.nb$word, ps.pb$word,ps.jp$word), | ||
+ | c(" ", " ", " ", nb.pb$word, nb.jp$word), | ||
+ | c(" ", " "," ", " ", pb.jp$word))%>% | ||
+ | set_colnames(c("资质过剩感", "消极情绪", "积极自我概念", "消极角色外行为", "积极角色外行为"))%>% | ||
+ | set_rownames(c("消极情绪", "积极自我概念", "消极角色外行为", "积极角色外行为", "任务绩效")) | ||
+ | sem.matrix | ||
+ | |||
+ | #### 3………………概念冗余度检验………………#### | ||
+ | #### 相关矩阵构建 #### | ||
+ | attach(maineffects) | ||
+ | matrix <- data.frame(x, y, dim, | ||
+ | paste( "(", k, ",", maineffects$n, ")" ) , | ||
+ | paste( "(", r, ",", rho, ")" ) , | ||
+ | `95% CI`, `80% CV`, rho)%>% | ||
+ | set_colnames(c("x", "dim", "y", "(k, n)", "(r, ρ)", "95% CI", "80% CV", "rho")) | ||
+ | |||
+ | matrix$all = paste(matrix$`(k, n)`, "\n", matrix$`(r, ρ)`, "\n", | ||
+ | matrix$`95% CI`, "\n", matrix$`80% CV`) | ||
+ | |||
+ | |||
+ | attach(matrix) | ||
+ | poq_pj <- subset(matrix, x == "资质过剩感" & y == "个人工作匹配") | ||
+ | poq_po <- subset(matrix, x == "资质过剩感" & y == "个人组织匹配") | ||
+ | poq_y <- subset(matrix, (y == "压力(反向)"| | ||
+ | y == "组织承诺"| | ||
+ | y == "工作满意度"| | ||
+ | y == "创新"| | ||
+ | y == "组织公民行为"| | ||
+ | y == "反生产行为"| | ||
+ | y == "离职意愿"| | ||
+ | y == "任务绩效")& | ||
+ | x == "资质过剩感") | ||
+ | pj_po <- subset(matrix, x == "个人工作匹配" & | ||
+ | dim == "个人组织匹配") | ||
+ | pj_y<- subset(matrix, (x == "个人工作匹配"& | ||
+ | (y == "压力(反向)"| | ||
+ | y == "组织承诺"| | ||
+ | y == "工作满意度"))| | ||
+ | (dim == "个人工作匹配"& | ||
+ | (y == "创新"| | ||
+ | y == "组织公民行为"| | ||
+ | y == "反生产行为"| | ||
+ | y == "离职意愿"| | ||
+ | y == "任务绩效"))) | ||
+ | po_y <- subset(matrix, (x == "个人组织匹配"& | ||
+ | (y == "压力(反向)"| | ||
+ | y == "组织承诺"| | ||
+ | y == "工作满意度"))| | ||
+ | (dim == "个人组织匹配"& | ||
+ | (y == "创新"| | ||
+ | y == "组织公民行为"| | ||
+ | y == "反生产行为"| | ||
+ | y == "离职意愿"| | ||
+ | y == "任务绩效"))) | ||
+ | |||
+ | #### 相关矩阵表格 #### | ||
+ | ynames <- c("创新", "组织公民行为", "反生产行为", "离职意愿", | ||
+ | "任务绩效", "压力(反向)", "工作满意度", "组织承诺") | ||
+ | rwa.text <- data.frame(ynames, poq_y= poq_y$all, pj_y = pj_y$all, po_y = po_y$all, | ||
+ | poq_pj = poq_pj$all, poq_po = poq_po$all, | ||
+ | pj_po = pj_po$all) | ||
+ | |||
+ | varnames <- list() | ||
+ | lables <- list() | ||
+ | text.mx <- list() | ||
+ | for (i in 1:nrow(rwa.text)){ | ||
+ | varnames[[i]] <- c(ynames[[i]], "资质过剩感", "个人工作匹配", "个人组织匹配") | ||
+ | lables[[i]] <- list (varnames[[i]], varnames[[i]]) | ||
+ | text.mx[[i]] <- vec2symMat(as.matrix(rwa.text[i,2:ncol(rwa.text)]), | ||
+ | diag = FALSE, byrow = FALSE) | ||
+ | dimnames(text.mx[[i]]) <- lables[[i]] | ||
+ | i = i+1} | ||
+ | as.vector(poq_y$y) | ||
+ | poqfit.text.all <- t(data.frame(text.mx[[1]][2:4,2:4], text.mx[[1]][2:4,1], | ||
+ | text.mx[[2]][2:4,1], text.mx[[3]][2:4,1], | ||
+ | text.mx[[4]][2:4,1], text.mx[[5]][2:4,1], | ||
+ | text.mx[[6]][2:4,1], text.mx[[7]][2:4,1], | ||
+ | text.mx[[8]][2:4,1])) %>% | ||
+ | set_rownames(c("资质过剩感", "个人工作匹配", "个人组织匹配", | ||
+ | "创新", "组织公民行为", "反生产行为", "离职意愿", | ||
+ | "任务绩效", "压力(反向)", "工作满意度", "组织承诺")) | ||
+ | write.csv(poqfit.text.all, file = "poq_fit相对矩阵文本.csv") | ||
+ | |||
+ | |||
+ | #### 数据准备:相对权重分析 #### | ||
+ | data.rwa <- data.frame(ynames, poq_y= poq_y$rho, pj_y = pj_y$rho, po_y = po_y$rho, | ||
+ | poq_pj = poq_pj$rho, poq_po = poq_po$rho, | ||
+ | pj_po = pj_po$rho) | ||
+ | |||
+ | varnames <- c("y", "poq", "pj", "po") | ||
+ | lables <- list(varnames, varnames) | ||
+ | cordat <- list() | ||
+ | for (i in 1:nrow(data.rwa)){ | ||
+ | cordat[[i]] <- vec2symMat(as.matrix(data.rwa[i,2:ncol(data.rwa)]), | ||
+ | diag = FALSE, byrow = FALSE) | ||
+ | dimnames(cordat[[i]]) <- lables} | ||
+ | |||
+ | #### 相对权重分析函数 #### | ||
+ | #注:函数来源参考https://relativeimportance.davidson.edu/ | ||
+ | #根据本研究做相应调整 | ||
+ | multRegress<-function(mydata){ | ||
+ | numVar<<-NCOL(mydata) | ||
+ | Variables<<- names(mydata)[2:numVar] | ||
+ | RXX<-mydata[2:numVar,2:numVar] | ||
+ | RXY<-mydata[2:numVar,1] | ||
+ | RXX.eigen<-eigen(RXX) | ||
+ | D<-diag(RXX.eigen$val) | ||
+ | delta<-sqrt(D) | ||
+ | lambda<-RXX.eigen$vec%*%delta%*%t(RXX.eigen$vec) | ||
+ | lambdasq<-lambda^2 | ||
+ | beta<-solve(lambda)%*%RXY | ||
+ | rsquare<<-sum(beta^2) | ||
+ | RawWgt<-lambdasq%*%beta^2 | ||
+ | import<-(RawWgt/rsquare)*100 | ||
+ | result<-data.frame(Variables, Raw.W=round(RawWgt,2), | ||
+ | R.perc=round(import,2), | ||
+ | R2 = round(rsquare,2)) | ||
+ | } | ||
+ | |||
+ | #### POQ fit 相对权重计算 #### | ||
+ | rawdata <- list() | ||
+ | thedata <- list() | ||
+ | Labels <- list() | ||
+ | a <- list() | ||
+ | title <- list() | ||
+ | R_square <- list() | ||
+ | rwa.results <- list() | ||
+ | |||
+ | for (i in 1:length(cordat)) | ||
+ | { | ||
+ | rawdata[[i]]<- data.frame(cordat[[i]]) | ||
+ | attach(rawdata[[i]]) | ||
+ | thedata[[i]] <- data.frame(y, poq, pj, po) | ||
+ | Labels[[i]] <- names(thedata[[i]])[2:length(thedata[[i]])] | ||
+ | a[[i]] <- multRegress(thedata[[i]]) %>% set_colnames(c("变量", "W", "%R", "R2")) | ||
+ | title[[i]] <- data.frame("", ynames[[i]], "", "") %>% set_colnames(c("变量", "W", "%R", "R2")) | ||
+ | R_square[[i]] <- data.frame("R2", unique(a[[i]][,4]), "", "") %>% set_colnames(c("变量", "W", "%R", "R2")) | ||
+ | rwa.results[[i]] <- rbind(a[[i]], R_square[[i]], title[[i]], | ||
+ | data.frame("变量", "W", "%R", "R2") %>% | ||
+ | set_colnames(c("变量", "W", "%R", "R2")))[, 1:3] | ||
+ | rwa.results[[i]] <- data.frame(id = c(1:nrow(rwa.results[[i]])), rwa.results[[i]]) | ||
+ | i = i + 1 | ||
+ | } | ||
+ | |||
+ | rwa.results | ||
+ | |||
+ | total<-merge(rwa.results[[1]], | ||
+ | rwa.results[2:length(rwa.results)], by="id")%>%t%>%unique%>%t | ||
+ | |||
+ | total.rwa <- rbind(total[5:6,], total[1:4,]) | ||
+ | write.csv(total.rwa, file = "poq_fit相对权重分析结果.csv") | ||
+ | </pre> | ||
==纳入元分析文献== | ==纳入元分析文献== |
2021年1月1日 (五) 20:28的版本
论文基本信息
杨伟文 李超平. 资质过剩感对个体绩效的作用效果及机制:基于情绪-认知加工系统与文化情境的元分析研究. 心理学报, 53(4),100-120
论文数据
论文R代码
#加载安装包 library(psychmeta) library(tidyr) library(magrittr) library(dplyr) library(tidyverse) library(rio) library(metaSEM) library(semPlot) library(plyr) library(meta) setwd("D:\\") #请将data20201209.xlsx放在D盘根目录下。 #如果放在其他目录下,请在此做相应调整。 ################## 全部数据准备 ###################### data <- import("data20201209.xlsx") attach(data) correct_main <- correct_r(correction = c("meas", "uvdrr_x", "uvdrr_y", "uvirr_x", "uvirr_y", "bvdrr", "bvirr"), rxyi = rxy, ux = 1, uy = 1, rxx = rxx, ryy = ryy, ux_observed = TRUE, uy_observed = TRUE, rxx_restricted = TRUE, rxx_type = "alpha", k_items_x = NA, ryy_restricted = TRUE, ryy_type = "alpha", k_items_y = NA, sign_rxz = 1, sign_ryz = 1, n = NULL, conf_level = 0.95, correct_bias = FALSE) data$rtp = correct_main[["correlations"]][["rtp"]] write.csv(data, "data.csv") data <- import("data.csv") orig.data <- subset(data.frame(data, correct_main$correlations), rtp <1) k.article <- length(unique(paste(orig.data$author, orig.data$title))) k.inde.sample <- length(unique(orig.data$id)) k.eff.size <- nrow(unique(data.frame(orig.data$title, orig.data$rxy, orig.data$x, orig.data$y))) sample.size <- unique(data.frame(orig.data$title, orig.data$n)) n.sample.size <- as.vector(sample.size$orig.data.n)%>%sum descr <- data.frame(c("文献", "独立样本", "效应值", "样本规模"), c(k.article, k.inde.sample, k.eff.size, n.sample.size))%>% set_colnames(c("类型", "数量")) #### 1………………直接效应分析………………#### #### 失安全系数计算 #### d <- subset(orig.data, orig.data$x.frame.all == "资质过剩感") attach(d) d$zr <- 0.5*log((1+rxy)/(1-rxy)) zr <- split(d$zr, d$y.coding.t) n <- split(d$n, d$y.coding.t) t <- list() for (i in 1:length(n)){ t[[i]] <- zr[[i]]*sqrt(n[[i]]-3) i = i + 1} nfs <- vector() for (i in 1:length(zr)){ nfs[[i]] <- abs(round(sum(t[[i]])^2/2.706 - length(zr[[i]]))) i = i + 1} final.nfs = data.frame(names(zr),nfs) %>% set_colnames(c("name", "nfs")) zr.t <- split(d$zr, d$y.frame.all) n.t <- split(d$n, d$y.frame.all) for (i in 1:length(n.t)){ t[[i]] <- zr.t[[i]]*sqrt(n.t[[i]]-3) i = i + 1} nfs <- vector() for (i in 1:length(zr.t)){ nfs[[i]] <- abs(round(sum(t[[i]])^2/2.706 - length(zr.t[[i]]))) i = i + 1} final.nfs.t = data.frame(names(zr.t),nfs)%>% set_colnames(c("name", "nfs")) nfs = rbind(final.nfs, final.nfs.t) order <- data.frame(c("消极情绪", "愤怒", "无聊", "积极自我概念", "一般效能感", "其他效能感", "一般自尊", "基于组织的自尊", "消极行为", "反生产行为", "离职意愿", "积极行为", "创新", "工作重塑", "建言", "前瞻行为", "知识共享", "组织公民行为", "任务绩效")) %>% set_colnames("order") t.nfs = left_join(order, nfs, by=c("order"="name")) write.csv(t.nfs, "nfs.csv") attach(orig.data) #### 主要变量直接效应 #### main_r <- ma_r(rxyi = rxy, n = n, sample_id = id, citekey = id, construct_x = orig.data$x.frame.all, construct_y = orig.data$y.frame.all, moderators = orig.data$y.coding.t, data = orig.data) main_rho <- ma_r(rxyi = rtp, n = n, sample_id = id, citekey = id, construct_x = orig.data$x.frame.all, construct_y = orig.data$y.frame.all, moderators = orig.data$y.coding.t, data = orig.data) #### 异质性检验 #### hetero <- heterogeneity(main_rho)%>%get_heterogeneity data.hetero = data.frame(matrix(NA, nrow = length(hetero), ncol=2)) names(data.hetero) = c("id","var") data.hetero$id = colnames(sapply(hetero, function(x) x[[1]])) data.hetero$var = sapply(hetero, function(x) x[[1]]$percent_var_accounted[[1]]) #### 主效应分析表制作 #### main_r <- main_r %>% summary %>% get_metatab main_rho <- main_rho %>% summary %>% get_metatab maineffects <- data.frame(main_r$analysis_id, main_r$construct_x, main_r$construct_y, main_r$`orig.data$y.coding.t`, main_r$k, main_r$N, round(cbind(main_r$mean_r, main_r$sd_r, main_rho$mean_r,main_rho$sd_r),2), paste("[", round(main_rho$CI_LL_95, 2), ", ", round(main_rho$CI_UL_95, 2), "]"), paste("[", round(main_rho$CR_LL_80, 2), ", ", round(main_rho$CR_UL_80, 2),"]"), data.hetero) %>% set_colnames(c("id", "x", "y", "dim", "k", "n", "r", "SD_r","rho", "SD_rho", "95% CI", "80% CV", "var%")) main.poq <- subset(maineffects, maineffects$x == "资质过剩感" & maineffects$y != "个人工作匹配"& maineffects$y != "个人组织匹配"& maineffects$y != "健康"& maineffects$y != "对工作的态度"& maineffects$y != "对组织的态度") main.poq$`5k+10` = main.poq$k * 5 + 10 maineffects.poq = left_join(main.poq, t.nfs, by=c("dim"="order")) %>% left_join(t.nfs, by=c("y"="order")) %>% unique mainpoq <- data.frame(maineffects.poq[, 3:12], round(unlist(maineffects.poq$`var%`),2), maineffects.poq[, 14:16])%>%set_colnames( c("y", "dim", "k", "n", "r", "SD_r", "rho", "SD_rho", "95%CI", "80%CV", "var", "5k+10", "nfs.dim", "nfs.all")) write.csv(mainpoq, file = "poq直接效应.csv") attach(maineffects) maineffects$word <- paste("(", r,", ", rho, ")","\n", "(", k,", ", maineffects$n, ")","\n", `95% CI`,"\n", `80% CV`) #### 2………………中介效应检验………………#### #### 数据准备:全模型数据 #### varnames <- c("POQ","NE", "PS", "NB", "PB", "JP") attach(maineffects) poq.ne <- subset(maineffects, x == "资质过剩感" & y == "消极情绪" & dim == "All Levels") poq.ps <- subset(maineffects, x == "资质过剩感" & y == "积极自我概念" & dim == "All Levels") poq.nb <- subset(maineffects, x == "资质过剩感" & y == "消极行为" & dim == "All Levels") poq.pb <- subset(maineffects, x == "资质过剩感" & y == "积极行为" & dim == "All Levels") poq.jp <- subset(maineffects, x == "资质过剩感" & y == "任务绩效" & dim == "All Levels") ne.ps <- subset(maineffects, (x == "消极情绪" & y == "积极自我概念" & dim == "All Levels")| (y == "消极情绪" & x == "积极自我概念" & dim == "All Levels")) ne.nb <- subset(maineffects, (x == "消极情绪" & y == "消极行为" & dim == "All Levels")| (y == "消极情绪" & x == "消极行为" & dim == "All Levels")) ne.pb <- subset(maineffects, (x == "消极情绪" & y == "积极行为" & dim == "All Levels")| (y == "消极情绪" & x == "积极行为" & dim == "All Levels")) ne.jp <- subset(maineffects, (x == "消极情绪" & y == "任务绩效" & dim == "All Levels")| (y == "消极情绪" & x == "任务绩效" & dim == "All Levels")) ps.nb <- subset(maineffects, (x == "积极自我概念" & y == "消极行为" & dim == "All Levels")| (y == "积极自我概念" & x == "消极行为" & dim == "All Levels")) ps.pb <- subset(maineffects, (x == "积极自我概念" & y == "积极行为" & dim == "All Levels")| (y == "积极自我概念" & x == "积极行为" & dim == "All Levels")) ps.jp <- subset(maineffects, (x == "积极自我概念" & y == "任务绩效" & dim == "All Levels")| (y == "积极自我概念" & x == "任务绩效" & dim == "All Levels")) nb.pb <- subset(maineffects, (x == "消极行为" & y == "积极行为" & dim == "All Levels")| (y == "消极行为" & x == "积极行为" & dim == "All Levels")) nb.jp <- subset(maineffects, (x == "消极行为" & y == "任务绩效" & dim == "All Levels")| (y == "消极行为" & x == "任务绩效" & dim == "All Levels")) pb.jp <- subset(maineffects, (x == "积极行为" & y == "任务绩效" & dim == "All Levels")| (y == "积极行为" & x == "任务绩效" & dim == "All Levels")) all.matrix <- vec2symMat(c(poq.ne$rho, poq.ps$rho, poq.nb$rho, poq.pb$rho, poq.jp$rho, ne.ps$rho, ne.nb$rho, ne.pb$rho, ne.jp$rho, ps.nb$rho, ps.pb$rho, ps.jp$rho, nb.pb$rho, nb.jp$rho, pb.jp$rho), diag = FALSE, byrow = FALSE) %>% set_colnames(varnames) %>% set_rownames(varnames) all_dat <- list(all.matrix) is.pd(all_dat) attach(orig.data) main_in_r <- ma_r(rxyi = rxy, n = n, sample_id = id, citekey = id, construct_x = orig.data$x.frame.all, construct_y = orig.data$y.frame.all, moderators = orig.data$indi, data = orig.data) main_in_rho <- ma_r(rxyi = rtp, n = n, sample_id = id, citekey = id, construct_x = orig.data$x.frame.all, construct_y = orig.data$y.frame.all, moderators = orig.data$indi, data = orig.data) hetero_in <- heterogeneity(main_in_rho)%>%get_heterogeneity data.hetero_in = data.frame(matrix(NA, nrow = length(hetero_in), ncol=2)) names(data.hetero_in) = c("id","var") data.hetero_in$id = colnames(sapply(hetero_in, function(x) x[[1]])) data.hetero_in$var = sapply(hetero_in, function(x) x[[1]]$percent_var_accounted[[1]]) main_in_r <- main_in_r %>% summary %>% get_metatab %>% na.omit main_in_rho <- main_in_rho %>% summary %>% get_metatab %>% na.omit main_indi <- data.frame(main_in_r$analysis_id, main_in_r$construct_x, main_in_r$construct_y, main_in_r$`orig.data$indi`, main_in_r$k, main_in_r$N, round(cbind(main_in_r$mean_r, main_in_r$sd_r, main_in_rho$mean_r,main_in_rho$sd_r),2), paste("[", round(main_in_rho$CI_LL_95, 2), ", ", round(main_in_rho$CI_UL_95, 2), "]"), paste("[", round(main_in_rho$CR_LL_80, 2), ", ", round(main_in_rho$CR_UL_80, 2),"]") ) %>% set_colnames(c("id", "x", "y", "indi", "k", "n", "r", "SD_r","rho", "SD_rho", "95% CI", "80% CV")) #### 数据准备:低个人主义(高集体主义)数据 #### attach(main_indi) poq.ne.l <- subset(main_indi, x == "资质过剩感" & y == "消极情绪" & indi == "L") poq.ps.l <- subset(main_indi, x == "资质过剩感" & y == "积极自我概念" & indi == "L") poq.nb.l <- subset(main_indi, x == "资质过剩感" & y == "消极行为" & indi == "L") poq.pb.l <- subset(main_indi, x == "资质过剩感" & y == "积极行为" & indi == "L") poq.jp.l <- subset(main_indi, x == "资质过剩感" & y == "任务绩效" & indi == "L") ne.ps.l <- subset(main_indi, (x == "消极情绪" & y == "积极自我概念" & indi == "L")| (y == "消极情绪" & x == "积极自我概念" & indi == "L")) ne.nb.l <- subset(main_indi, (x == "消极情绪" & y == "消极行为" & indi == "L")| (y == "消极情绪" & x == "消极行为" & indi == "L")) ne.pb.l <- subset(main_indi, (x == "消极情绪" & y == "积极行为" & indi == "L")| (y == "消极情绪" & x == "积极行为" & indi == "L")) ne.jp.l <- subset(main_indi, (x == "消极情绪" & y == "任务绩效" & indi == "L")| (y == "消极情绪" & x == "任务绩效" & indi == "L")) ps.nb.l <- subset(main_indi, (x == "积极自我概念" & y == "消极行为" & indi == "L")| (y == "积极自我概念" & x == "消极行为" & indi == "L")) ps.pb.l <- subset(main_indi, (x == "积极自我概念" & y == "积极行为" & indi == "L")| (y == "积极自我概念" & x == "积极行为" & indi == "L")) ps.jp.l <- subset(main_indi, (x == "积极自我概念" & y == "任务绩效" & indi == "L")| (y == "积极自我概念" & x == "任务绩效" & indi == "L")) nb.pb.l <- subset(main_indi, (x == "消极行为" & y == "积极行为" & indi == "L")| (y == "消极行为" & x == "积极行为" & indi == "L")) nb.jp.l <- subset(main_indi, (x == "消极行为" & y == "任务绩效" & indi == "L")| (y == "消极行为" & x == "任务绩效" & indi == "L")) pb.jp.l <- subset(main_indi, (x == "积极行为" & y == "任务绩效" & indi == "L")| (y == "积极行为" & x == "任务绩效" & indi == "L")) all.matrix.l <- vec2symMat(c(poq.ne.l$rho, poq.ps.l$rho, poq.nb.l$rho, poq.pb.l$rho, poq.jp.l$rho, ne.ps.l$rho, ne.nb.l$rho, ne.pb.l$rho, ne.jp.l$rho, ps.nb.l$rho, ps.pb.l$rho, ps.jp.l$rho, nb.pb.l$rho, nb.jp.l$rho, pb.jp.l$rho), diag = FALSE, byrow = FALSE) %>% set_colnames(varnames) %>% set_rownames(varnames) all_dat.l <- list(all.matrix.l) is.pd(all_dat.l) #### 数据准备:高个人主义(低集体主义)数据 #### attach(main_indi) poq.ne.h <- subset(main_indi, x == "资质过剩感" & y == "消极情绪" & indi == "H") poq.ps.h <- subset(main_indi, x == "资质过剩感" & y == "积极自我概念" & indi == "H") poq.nb.h <- subset(main_indi, x == "资质过剩感" & y == "消极行为" & indi == "H") poq.pb.h <- subset(main_indi, x == "资质过剩感" & y == "积极行为" & indi == "H") poq.jp.h <- subset(main_indi, x == "资质过剩感" & y == "任务绩效" & indi == "H") ne.ps.h <- subset(main_indi, (x == "消极情绪" & y == "积极自我概念" & indi == "H")| (y == "消极情绪" & x == "积极自我概念" & indi == "H")) ne.nb.h <- subset(main_indi, (x == "消极情绪" & y == "消极行为" & indi == "H")| (y == "消极情绪" & x == "消极行为" & indi == "H")) ne.pb.h <- subset(main_indi, (x == "消极情绪" & y == "积极行为" & indi == "H")| (y == "消极情绪" & x == "积极行为" & indi == "H")) ne.jp.h <- subset(main_indi, (x == "消极情绪" & y == "任务绩效" & indi == "H")| (y == "消极情绪" & x == "任务绩效" & indi == "H")) ps.nb.h <- subset(main_indi, (x == "积极自我概念" & y == "消极行为" & indi == "H")| (y == "积极自我概念" & x == "消极行为" & indi == "H")) ps.pb.h <- subset(main_indi, (x == "积极自我概念" & y == "积极行为" & indi == "H")| (y == "积极自我概念" & x == "积极行为" & indi == "H")) ps.jp.h <- subset(main_indi, (x == "积极自我概念" & y == "任务绩效" & indi == "H")| (y == "积极自我概念" & x == "任务绩效" & indi == "H")) nb.pb.h <- subset(main_indi, (x == "消极行为" & y == "积极行为" & indi == "H")| (y == "消极行为" & x == "积极行为" & indi == "H")) nb.jp.h <- subset(main_indi, (x == "消极行为" & y == "任务绩效" & indi == "H")| (y == "消极行为" & x == "任务绩效" & indi == "H")) pb.jp.h <- subset(main_indi, (x == "积极行为" & y == "任务绩效" & indi == "H")| (y == "积极行为" & x == "任务绩效" & indi == "H")) all.matrix.h <- vec2symMat(c(poq.ne.h$rho, poq.ps.h$rho, poq.nb.h$rho, poq.pb.h$rho, poq.jp.h$rho, ne.ps.h$rho, ne.nb.h$rho, ne.pb.h$rho, ne.jp.h$rho, ps.nb.h$rho, ps.pb.h$rho, ps.jp.h$rho, nb.pb.h$rho, nb.jp.h$rho, pb.jp.h$rho), diag = FALSE, byrow = FALSE) %>% set_colnames(varnames) %>% set_rownames(varnames) all_dat.h <- list(all.matrix.h) is.pd(all_dat.h) #### 调和平均数 #### library(psych) all_n <- c(poq.ne$n, poq.ps$n, poq.nb$n, poq.pb$n, poq.jp$n, ne.ps$n, ne.nb$n, ne.pb$n, ne.jp$n, ps.nb$n, ps.pb$n, ps.jp$n, nb.pb$n, nb.jp$n, pb.jp$n) %>% harmonic.mean %>% round n_l <- c(poq.ne.l$n, poq.ps.l$n, poq.nb.l$n, poq.pb.l$n, poq.jp.l$n, ne.ps.l$n, ne.nb.l$n, ne.pb.l$n, ne.jp.l$n, ps.nb.l$n, ps.pb.l$n, ps.jp.l$n, nb.pb.l$n, nb.jp.l$n, pb.jp.l$n) %>% harmonic.mean %>% round n_h <- c(poq.ne.h$n, poq.ps.h$n, poq.nb.h$n, poq.pb.h$n, poq.jp.h$n, ne.ps.h$n, ne.nb.h$n, ne.pb.h$n, ne.jp.h$n, ps.nb.h$n, ps.pb.h$n, ps.jp.h$n, nb.pb.h$n, nb.jp.h$n, pb.jp.h$n) %>% harmonic.mean %>% round ####模型设置 #### model_all <- 'NB ~ POQ + PS + NE PB ~ POQ + PS + NE JP ~ POQ + PS + NE NE ~ POQ PS ~ POQ NE ~~ 1*NE PS ~~ 1*PS POQ ~~ 1*POQ NE ~~ 0.1*PS NB ~~ 0.1*NB PB ~~ 0.1*PB JP ~~ 0.1*JP NB ~~ 0.1*PB NB ~~ 0.1*JP JP ~~ 0.1*PB' plot(model_all, col="yellow") RAM_all <- lavaan2RAM(model_all, obs.variables = varnames) RAM_all #### SEM全部数据及调和平均数 #### fin_dat <- list(all_dat, all_dat.l, all_dat.h) fin_n <- c(all_n, n_l, n_h) stage1 <- list() stage2 <- list() stage2_LB <- list() stage2_Z <- list() ind_LB <- list() ind_Z <- list() fitness <- list() path <- list() ind <- list() sem <- list() name <- c("all", "low individualism", "high individualism") for (i in 1:length(fin_dat)){ #### stage1 #### stage1[[i]] <- tssem1(Cov = fin_dat[[i]], n = fin_n[i], method = "FEM", RE.type = "Diag", RE.startvalues=0.1, acov = "weighted") summary(stage1[[i]]) #### stage2 #### stage2[[i]] <- tssem2(stage1[[i]], Amatrix = RAM_all$A, Smatrix = RAM_all$S) summary(stage2[[i]]) stage2_LB[[i]] <- tssem2(stage1[[i]], Amatrix = RAM_all$A, Smatrix = RAM_all$S, diag.constraints = TRUE, intervals.type = "LB", mx.algebras = list( #POQ-NE-Y IndNE_NB = mxAlgebra(NEONPOQ*NBONNE, name = "IndNE_NB"), IndNE_PB = mxAlgebra(NEONPOQ*PBONNE, name = "IndNE_PB"), IndNE_JP = mxAlgebra(NEONPOQ*JPONNE, name = "IndNE_JP"), #POQ-PS-Y IndPS_NB = mxAlgebra(PSONPOQ*NBONPS, name = "IndPS_NB"), IndPS_PB = mxAlgebra(PSONPOQ*PBONPS, name = "IndPS_PB"), IndPS_JP = mxAlgebra(PSONPOQ*JPONPS, name = "IndPS_JP"), #POQ-NE+PS-Y Indall_NB = mxAlgebra(NEONPOQ*NBONNE + PSONPOQ*NBONPS, name = "Indall_NB"), Indall_PB = mxAlgebra(NEONPOQ*PBONNE + PSONPOQ*PBONPS, name = "Indall_PB"), Indall_JP = mxAlgebra(NEONPOQ*JPONNE + PSONPOQ*JPONPS, name = "Indall_JP"), #POQ-NE+PS-Y PLUS POQ-Y Total_NB = mxAlgebra(NEONPOQ*NBONNE + PSONPOQ*NBONPS + NBONPOQ, name = "Total_NB"), Total_PB = mxAlgebra(NEONPOQ*PBONNE + PSONPOQ*PBONPS + PBONPOQ, name = "Total_PB"), Total_JP = mxAlgebra(NEONPOQ*JPONNE + PSONPOQ*JPONPS + JPONPOQ, name = "Total_JP"), #Diff POQ-(NE-PS)-Y DIF_NEminusPS_NB= mxAlgebra(NEONPOQ*NBONNE - PSONPOQ*NBONPS, name = "DIF_NEminusPS_NB"), DIF_NEminusPS_PB= mxAlgebra(NEONPOQ*PBONNE - PSONPOQ*PBONPS, name = "DIF_NEminusPS_PB"), DIF_NEminusPS_JP= mxAlgebra(NEONPOQ*JPONNE - PSONPOQ*JPONPS, name = "DIF_NEminusPS_JP"))) stage2_LB[[i]] <- rerun(stage2_LB[[i]]) ind_LB[[i]] <- summary(stage2_LB[[i]]) stage2_Z[[i]] <- tssem2(stage1[[i]], Amatrix = RAM_all$A, Smatrix = RAM_all$S, diag.constraints = FALSE, intervals.type = "z", mx.algebras = list( IndNE_NB = mxAlgebra(NEONPOQ*NBONNE, name = "IndNE_NB"), IndNE_PB = mxAlgebra(NEONPOQ*PBONNE, name = "IndNE_PB"), IndNE_JP = mxAlgebra(NEONPOQ*JPONNE, name = "IndNE_JP"), IndPS_NB = mxAlgebra(PSONPOQ*NBONPS, name = "IndPS_NB"), IndPS_PB = mxAlgebra(PSONPOQ*PBONPS, name = "IndPS_PB"), IndPS_JP = mxAlgebra(PSONPOQ*JPONPS, name = "IndPS_JP"), Indall_NB = mxAlgebra(NEONPOQ*NBONNE + PSONPOQ*NBONPS, name = "Indall_NB"), Indall_PB = mxAlgebra(NEONPOQ*PBONNE + PSONPOQ*PBONPS, name = "Indall_PB"), Indall_JP = mxAlgebra(NEONPOQ*JPONNE + PSONPOQ*JPONPS, name = "Indall_JP"), Total_NB = mxAlgebra(NEONPOQ*NBONNE + PSONPOQ*NBONPS + NBONPOQ, name = "Total_NB"), Total_PB = mxAlgebra(NEONPOQ*PBONNE + PSONPOQ*PBONPS + PBONPOQ, name = "Total_PB"), Total_JP = mxAlgebra(NEONPOQ*JPONNE + PSONPOQ*JPONPS + JPONPOQ, name = "Total_JP"), DIF_NEminusPS_NB= mxAlgebra(NEONPOQ*NBONNE - PSONPOQ*NBONPS, name = "DIF_NEminusPS_NB"), DIF_NEminusPS_PB= mxAlgebra(NEONPOQ*PBONNE - PSONPOQ*PBONPS, name = "DIF_NEminusPS_PB"), DIF_NEminusPS_JP= mxAlgebra(NEONPOQ*JPONNE - PSONPOQ*JPONPS, name = "DIF_NEminusPS_JP"))) stage2_Z[[i]] <- rerun(stage2_Z[[i]]) ind_Z[[i]] <- summary(stage2_Z[[i]]) #### 拟合系数 #### fitness[[i]] <- ind_LB[[i]][["stat"]]%>%as.data.frame%>%round(2)%>% set_colnames("Goodness-of-fit indices") #### 路径系数 #### path[[i]] <- data.frame(round(ind_Z[[i]][["coefficients"]][,1], 2), paste("[", round(ind_Z[[i]][["coefficients"]][,3], 2),",", round(ind_Z[[i]][["coefficients"]][,4], 2), "]"), round(ind_Z[[i]][["coefficients"]][,2], 2), round(ind_Z[[i]][["coefficients"]][,5], 2), round(ind_Z[[i]][["coefficients"]][,6], 2)) %>% set_colnames(c("β", "95% CI", "SE", "z", "p")) %>% set_rownames(c("JPONNE", "JPONPOQ", "JPONPS", "NBONNE", "NBONPOQ", "NBONPS", "NEONPOQ", "PBONNE", "PBONPOQ", "PBONPS", "PSONPOQ")) #### 中介效应 #### ind[[i]] <- data.frame(round(ind_LB[[i]][["mx.algebras"]][,2],2), paste("[", round(ind_LB[[i]][["mx.algebras"]][,1],2), ",", round(ind_LB[[i]][["mx.algebras"]][,3],2), "]")) %>% set_colnames(c("β", "95%CI"))%>% set_rownames(c("IndNE_NB", "IndNE_PB", "IndNE_JP", "IndPS_NB", "IndPS_PB", "IndPS_JP", "Indall_NB", "Indall_PB", "Indall_JP", "Total_NB", "Total_PB", "Total_JP", "DIF_NEminusPS_NB", "DIF_NEminusPS_PB", "DIF_NEminusPS_JP")) sem[[i]] <- list(name = name[i], fit=fitness[[i]], path = path[[i]], ind = ind[[i]]) sem[[i]] i = i + 1} sem #### 结构方程分析结果表格 #### final_fit <- cbind(sem[[1]][["fit"]][c(1,7,4),], sem[[2]][["fit"]][c(1,7,4),], sem[[3]][["fit"]][c(1,7,4),])%>% set_rownames(c("n", "Chi", "p"))%>% set_colnames(c("全样本", "高集体主义", "低集体主义")) final_path <- rbind(c("全样本", " "," ", " ", " ", "高集体主义", " "," ", " ", " ", "低集体主义", " "," ", " ", " "), rep(c("β", "95%CI", "SE", "z", "p"), 3), cbind(rbind(sem[[1]][["path"]]), rbind(sem[[2]][["path"]]), rbind(sem[[3]][["path"]])))%>% set_colnames(c(1:15)) final_ind <- rbind(rep(c("β", "95%CI"),3), cbind(sem[[1]][["ind"]], sem[[2]][["ind"]], sem[[3]][["ind"]]))%>% set_colnames(c(1:6)) write.csv(final_ind, "ind.csv") #### 相关系数文本 #### sem.matrix <- cbind(c(poq.ne$word, poq.ps$word, poq.nb$word, poq.pb$word, poq.jp$word), c(" ", ne.ps$word, ne.nb$word, ne.pb$word, ne.jp$word), c(" ", " ", ps.nb$word, ps.pb$word,ps.jp$word), c(" ", " ", " ", nb.pb$word, nb.jp$word), c(" ", " "," ", " ", pb.jp$word))%>% set_colnames(c("资质过剩感", "消极情绪", "积极自我概念", "消极角色外行为", "积极角色外行为"))%>% set_rownames(c("消极情绪", "积极自我概念", "消极角色外行为", "积极角色外行为", "任务绩效")) sem.matrix #### 3………………概念冗余度检验………………#### #### 相关矩阵构建 #### attach(maineffects) matrix <- data.frame(x, y, dim, paste( "(", k, ",", maineffects$n, ")" ) , paste( "(", r, ",", rho, ")" ) , `95% CI`, `80% CV`, rho)%>% set_colnames(c("x", "dim", "y", "(k, n)", "(r, ρ)", "95% CI", "80% CV", "rho")) matrix$all = paste(matrix$`(k, n)`, "\n", matrix$`(r, ρ)`, "\n", matrix$`95% CI`, "\n", matrix$`80% CV`) attach(matrix) poq_pj <- subset(matrix, x == "资质过剩感" & y == "个人工作匹配") poq_po <- subset(matrix, x == "资质过剩感" & y == "个人组织匹配") poq_y <- subset(matrix, (y == "压力(反向)"| y == "组织承诺"| y == "工作满意度"| y == "创新"| y == "组织公民行为"| y == "反生产行为"| y == "离职意愿"| y == "任务绩效")& x == "资质过剩感") pj_po <- subset(matrix, x == "个人工作匹配" & dim == "个人组织匹配") pj_y<- subset(matrix, (x == "个人工作匹配"& (y == "压力(反向)"| y == "组织承诺"| y == "工作满意度"))| (dim == "个人工作匹配"& (y == "创新"| y == "组织公民行为"| y == "反生产行为"| y == "离职意愿"| y == "任务绩效"))) po_y <- subset(matrix, (x == "个人组织匹配"& (y == "压力(反向)"| y == "组织承诺"| y == "工作满意度"))| (dim == "个人组织匹配"& (y == "创新"| y == "组织公民行为"| y == "反生产行为"| y == "离职意愿"| y == "任务绩效"))) #### 相关矩阵表格 #### ynames <- c("创新", "组织公民行为", "反生产行为", "离职意愿", "任务绩效", "压力(反向)", "工作满意度", "组织承诺") rwa.text <- data.frame(ynames, poq_y= poq_y$all, pj_y = pj_y$all, po_y = po_y$all, poq_pj = poq_pj$all, poq_po = poq_po$all, pj_po = pj_po$all) varnames <- list() lables <- list() text.mx <- list() for (i in 1:nrow(rwa.text)){ varnames[[i]] <- c(ynames[[i]], "资质过剩感", "个人工作匹配", "个人组织匹配") lables[[i]] <- list (varnames[[i]], varnames[[i]]) text.mx[[i]] <- vec2symMat(as.matrix(rwa.text[i,2:ncol(rwa.text)]), diag = FALSE, byrow = FALSE) dimnames(text.mx[[i]]) <- lables[[i]] i = i+1} as.vector(poq_y$y) poqfit.text.all <- t(data.frame(text.mx[[1]][2:4,2:4], text.mx[[1]][2:4,1], text.mx[[2]][2:4,1], text.mx[[3]][2:4,1], text.mx[[4]][2:4,1], text.mx[[5]][2:4,1], text.mx[[6]][2:4,1], text.mx[[7]][2:4,1], text.mx[[8]][2:4,1])) %>% set_rownames(c("资质过剩感", "个人工作匹配", "个人组织匹配", "创新", "组织公民行为", "反生产行为", "离职意愿", "任务绩效", "压力(反向)", "工作满意度", "组织承诺")) write.csv(poqfit.text.all, file = "poq_fit相对矩阵文本.csv") #### 数据准备:相对权重分析 #### data.rwa <- data.frame(ynames, poq_y= poq_y$rho, pj_y = pj_y$rho, po_y = po_y$rho, poq_pj = poq_pj$rho, poq_po = poq_po$rho, pj_po = pj_po$rho) varnames <- c("y", "poq", "pj", "po") lables <- list(varnames, varnames) cordat <- list() for (i in 1:nrow(data.rwa)){ cordat[[i]] <- vec2symMat(as.matrix(data.rwa[i,2:ncol(data.rwa)]), diag = FALSE, byrow = FALSE) dimnames(cordat[[i]]) <- lables} #### 相对权重分析函数 #### #注:函数来源参考https://relativeimportance.davidson.edu/ #根据本研究做相应调整 multRegress<-function(mydata){ numVar<<-NCOL(mydata) Variables<<- names(mydata)[2:numVar] RXX<-mydata[2:numVar,2:numVar] RXY<-mydata[2:numVar,1] RXX.eigen<-eigen(RXX) D<-diag(RXX.eigen$val) delta<-sqrt(D) lambda<-RXX.eigen$vec%*%delta%*%t(RXX.eigen$vec) lambdasq<-lambda^2 beta<-solve(lambda)%*%RXY rsquare<<-sum(beta^2) RawWgt<-lambdasq%*%beta^2 import<-(RawWgt/rsquare)*100 result<-data.frame(Variables, Raw.W=round(RawWgt,2), R.perc=round(import,2), R2 = round(rsquare,2)) } #### POQ fit 相对权重计算 #### rawdata <- list() thedata <- list() Labels <- list() a <- list() title <- list() R_square <- list() rwa.results <- list() for (i in 1:length(cordat)) { rawdata[[i]]<- data.frame(cordat[[i]]) attach(rawdata[[i]]) thedata[[i]] <- data.frame(y, poq, pj, po) Labels[[i]] <- names(thedata[[i]])[2:length(thedata[[i]])] a[[i]] <- multRegress(thedata[[i]]) %>% set_colnames(c("变量", "W", "%R", "R2")) title[[i]] <- data.frame("", ynames[[i]], "", "") %>% set_colnames(c("变量", "W", "%R", "R2")) R_square[[i]] <- data.frame("R2", unique(a[[i]][,4]), "", "") %>% set_colnames(c("变量", "W", "%R", "R2")) rwa.results[[i]] <- rbind(a[[i]], R_square[[i]], title[[i]], data.frame("变量", "W", "%R", "R2") %>% set_colnames(c("变量", "W", "%R", "R2")))[, 1:3] rwa.results[[i]] <- data.frame(id = c(1:nrow(rwa.results[[i]])), rwa.results[[i]]) i = i + 1 } rwa.results total<-merge(rwa.results[[1]], rwa.results[2:length(rwa.results)], by="id")%>%t%>%unique%>%t total.rwa <- rbind(total[5:6,], total[1:4,]) write.csv(total.rwa, file = "poq_fit相对权重分析结果.csv")