unlink('Propiedades_Psicometricas_corr_cache', recursive = TRUE)
load("__accion_salud_exp_post_crash.RData")

if(isTRUE(getOption('knitr.in.progress'))==T){
    clus_iter=5000
} else {
  input <- readline('¿Are you gonna run the dataset with the whole iterations? (Si/No): ')
  if(input=="Si"){
    clus_iter=10000
  } else {
    clus_iter=1000
  }
}
library(tm)
## Loading required package: NLP
if(isTRUE(getOption('knitr.in.progress'))==T){
  input2 <- "todas"
} else {
    input2 <- "todas"
    input2 <- Corpus(VectorSource(input2))
    input2 <- tm_map(input2, tolower)
    input2 <- tm_map(input2,stripWhitespace)
    input2 <- gsub(" ","_",as.character(unlist(input2)[1]))
}
#evitar que ocupe curl
#options(renv.download.override = utils::download.file)


#arriba puse algunas opciones para que por defecto escondiera el código
#también cargue algunos estilo .css para que el texto me apareciera justificado, entre otras cosas.
local({r <- getOption("repos")
       r["CRAN"] <- "http://cran.r-project.org" 
       options(repos=r)
})

clipboard <- function(x, sep="\t", row.names=FALSE, col.names=TRUE){
     con <- pipe("xclip -selection clipboard -i", open="w")
     write.table(x, con, sep=sep, row.names=row.names, col.names=col.names)
     close(con)
}

`%>%` <- magrittr::`%>%`
copy_names <- function(x,row.names=FALSE,col.names=TRUE,dec=",",...) {
  library(dplyr)
  if(class(ungroup(x))[1]=="tbl_df"){
    if(options()$OutDec=="."){
      options(OutDec = dec)
      write.table(format(data.frame(x)),"clipboard",sep="\t",row.names=FALSE,col.names=col.names,...)
      options(OutDec = ".")
      return(x)
    } else {
      options(OutDec = ",")
      write.table(format(data.frame(x)),"clipboard",sep="\t",row.names=FALSE,col.names=col.names,...)
      options(OutDec = ",")
      return(x)    
    }
  } else {
    if(options()$OutDec=="."){
      options(OutDec = dec)
      write.table(format(x),"clipboard",sep="\t",row.names=FALSE,col.names=col.names,...)
      options(OutDec = ".")
      return(x)
    } else {
      options(OutDec = ",")
      write.table(format(x),"clipboard",sep="\t",row.names=FALSE,col.names=col.names,...)
      options(OutDec = ",")
      return(x)       
    }
  }
}  

if(!require(pacman)){install.packages("pacman")}

pacman::p_unlock(lib.loc = .libPaths()) #para no tener problemas reinstalando paquetes
knitr::opts_chunk$set(
    echo = TRUE,
    message = FALSE,
    warning = FALSE
)
#dejo los paquetes estadísticos que voy a utilizar

if(!require(plotly)){install.packages("plotly")}
if(!require(htmlwidgets)){install.packages("htmlwidgets")}
#if(!require(tidyverse)){install.packages("tidyverse")}
if(!require(gganimate)){install.packages("gganimate")}
if(!require(readr)){install.packages("readr")}
if(!require(stringr)){install.packages("stringr")}
if(!require(data.table)){install.packages("data.table")}
if(!require(DT)){install.packages("DT")}
if(!require(ggplot2)){install.packages("ggplot2")}
if(!require(lattice)){install.packages("lattice")}
if(!require(forecast)){install.packages("forecast")}
if(!require(zoo)){install.packages("zoo")}
if(!require(janitor)){install.packages("janitor")}
if(!require(rjson)){install.packages("rjson")}
if(!require(estimatr)){install.packages("estimatr")} 
if(!require(textreg)){install.packages("textreg")}
if(!require(sjPlot)){install.packages("sjPlot")}
if(!require(foreign)){install.packages("foreign")}
if(!require(tsModel)){install.packages("tsModel")}
if(!require(lmtest)){install.packages("lmtest")}
if(!require(Epi)){install.packages("Epi")}
if(!require(splines)){install.packages("splines")}
if(!require(vcd)){install.packages("vcd")}
if(!require(astsa)){install.packages("astsa")}
if(!require(MASS)){install.packages("MASS")}
if(!require(ggsci)){install.packages("ggsci")}
if(!require(Hmisc)){install.packages("Hmisc")}
if(!require(compareGroups)){install.packages("compareGroups")}
if(!require(dplyr)){install.packages("dplyr")}
if(!require(ggforce)){install.packages("ggforce")}
if(!require(doParallel)){install.packages("doParallel")}
if(!require(SCtools)){install.packages("SCtools")}
if(!require(rio)){install.packages("rio")}
if(!require(rbokeh)){install.packages("rbokeh")}
if(!require(altair)){install.packages("altair")}
if(!require(sqldf)){install.packages("sqldf")} 
if(!require(devtools)){install.packages("devtools")}
if(!require(skimr)){install.packages("skimr")}
if(!require(tm)){install.packages("tm")} 
if(!require(RColorBrewer)){install.packages("RColorBrewer")}
if(!require(psych)){install.packages("psych")}
if(!require(GPArotation)){install.packages("GPArotation")}
if(!require(mvtnorm)){install.packages("mvtnorm")}
if(!require(polycor)){install.packages("polycor")}
if(!require(MVN)){install.packages("MVN")}
if(!require(ggcorrplot)){install.packages("ggcorrplot")}
if(!require(radiant)){install.packages("radiant")}
if(!require(homals)){install.packages("homals")}
if(!require(nFactors)){install.packages("nFactors")}
if(!require(ggiraph)){install.packages("ggiraph")}
if(!require(factoextra)){install.packages("factoextra")}
if(!require(tidyverse)){install.packages("tidyverse")}
if(!require(lubridate)){install.packages("lubridate")}
if(!require(REdaS)){install.packages("REdaS")}
if(!require(jrt)){install.packages("jrt")}
if(!require(parameters)){install.packages("parameters")}
if(!require(lavaan)){install.packages("lavaan")}
if(!require(lavaan)){install.packages("lavaan")}
if(!require(semPlot)){install.packages("semPlot")}
if(!require(semTools)){install.packages("semTools")}
if(!require(random.polychor.pa)){install.packages("random.polychor.pa")}
if(!require(heatmaply)){install.packages("heatmaply")}

# Calculate the number of cores
#no_cores <- detectCores() - 1
##cl<-makeCluster(no_cores)
#registerDoParallel(cl)
# sudo apt -y install libfontconfig1-dev
# sudo apt-get install libxml2-dev
#Sys.setlocale(category = "LC_ALL", locale = "english")
#locale("es", decimal_mark = ",")


find_type <- function(x) {
  case_when(
    is.factor(x) ~ "factor",
    is.character(x) ~ "character",
    is.numeric(x) ~ "numeric",
    TRUE ~ "not sure"
  )
}

permute_icc <- function(x, y, n = 99) {
  actual <- ICCbare(x, y)
  nulls <- vector(length = length(n), mode = "numeric")
  for(i in seq_along(1:n)) {
    scrambled_x <- sample(x, length(x), replace = F)
    nulls[i] <- ICCbare(scrambled_x, y)
  }
  (sum(abs(nulls) > ifelse(actual > 0, actual, -actual)) + 1) / (n+1)
}

permute_tau <- function(x, y, n = 99) {
  actual <- GKtau(x, y)$tauxy
  nulls <- vector(length = length(n), mode = "numeric")
  for(i in seq_along(1:n)) {
    scrambled_x <- sample(x, length(x), replace = F)
    nulls[i] <- GKtau(scrambled_x, y)$tauxy
  }
  (sum(abs(nulls) > ifelse(actual > 0, actual, -actual)) + 1) / (n+1)
}

# to do:
## get p-values

eda <- function(x, plot = FALSE) {
  
  x <- as.data.frame(x)
  
  num_rows <- ncol(x)^2 - ncol(x)
  df <- tibble(var1 = vector(mode = "character", length = 1),
               var2 = vector(mode = "character", length = 1),
               statistic = vector(mode = "character", length = 1),
               value = vector(mode = "double", length = 1),
               p_value = vector(mode = "double", length = 1),
               n = vector(mode = "integer", length = 1))
  
  for(i in seq_along(1:ncol(x)))
    for(j in seq_along(1:ncol(x))) {
      if(i < j){
        # get type of columns i and j
        var_1_type <- find_type(x[,i])
        var_2_type <- find_type(x[,j])
        #print(paste("var1 type: ", var_1_type, "\nvar2 type: ", var_2_type, "\n\n"))
        
        x1 <- x[,i]
        x2 <- x[,j]
        
        # remove NAs for simplicity
        if(any(is.na(x1))){
          # get NA indicies
          ind <- which(is.na(x1))
          x1 <- x1[-ind]
          x2 <- x2[-ind]
        }
        
        if(any(is.na(x2))){
          # get NA indicies
          ind <- which(is.na(x2))
          x1 <- x1[-ind]
          x2 <- x2[-ind]
        }
        
        # make sure x1 and x2 are the same length
        stopifnot(length(x1) == length(x2))
        
        n <- length(x1)
        
        if(var_1_type == "numeric" & var_2_type == "numeric") {
          # run a correlation
          result <- cor.test(x1, x2)
          df <- add_row(df, 
                        var1 = names(x)[i],
                        var2 = names(x)[j],
                        statistic = "r",
                        value = result$estimate,
                        p_value = result$p.value,
                        n = n
          )
        } else if(var_1_type == "factor" & var_2_type == "numeric") {
          # run an ANOVA or t-test, depending on number of levels
          num_levels <- length(levels(x1))
          require(ICC)
          result <- ICCbare(x1, x2)
          p <- permute_icc(x1, x2)
          df <- add_row(df, 
                        var1 = names(x)[i],
                        var2 = names(x)[j],
                        statistic = "ICC",
                        value = result,
                        p_value = p,
                        n = n
          )
        } else if(var_1_type == "numeric" & var_2_type == "factor") {
          # run an ANOVA or t-test, depending on number of levels
          num_levels <- length(levels(x2))
          require(ICC)
          result <- ICCbare(x2, x1)
          p <- permute_icc(x2, x1)
          df <- add_row(df, 
                        var1 = names(x)[i],
                        var2 = names(x)[j],
                        statistic = "ICC",
                        value = result,
                        p_value = p,
                        n = n
          )
        } else if(var_1_type == "factor" & var_2_type == "factor") {
          require("GoodmanKruskal")
          # compute the GKtau statistic
          stat1 <- GKtau(x1, x2)$tauxy
          stat2 <- GKtau(x1, x2)$tauyx
          p1 <- permute_tau(x1, x2)
          p2 <- permute_tau(x2, x1)
          df <- add_row(df, 
                        var1 = names(x)[i],
                        var2 = names(x)[j],
                        statistic = "tau",
                        value = stat1,
                        p_value = p1,
                        n = n
          )
          df <- add_row(df, 
                        var1 = names(x)[j],
                        var2 = names(x)[i],
                        statistic = "tau",
                        value = stat2,
                        p_value = p2,
                        n = n
          )
        } else{
          # return an empty row
          df <- add_row(df, 
                        var1 = names(x)[i],
                        var2 = names(x)[j],
                        statistic = NA_character_,
                        value = NA_integer_,
                        p_value = NA_real_,
                        n = n
          )
        }
      }
    }
  if(plot == TRUE) {
    df[-1,] %>%
      filter(!is.na(value)) %>%
      unite(variables, var1, var2, sep = " by ") %>%
      mutate(`possibly significant` = if_else(p_value < 0.05, "significant", "NS")) %>%
      ggplot(aes(y = value, x = reorder(variables, value), color = `possibly significant`)) +
      geom_point() +
      coord_flip() +
      facet_wrap(~statistic, scales = "free") +
      theme_minimal() +
      scale_color_manual(values = c("#37454B", "#E84F22"))
  } else{
    df[-1,]
  }
  
}

#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#
#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#
ajusteAFC <- function (x) {as.data.frame(cbind("Modelo"=deparse(substitute(x)),
                    "gl"=round(lavaan::fitMeasures(x) ["df"],digits=3),
                    "WLS X2"=round(lavaan::fitMeasures(x)["chisq"],digits=3),
                    "CMIN/df"=round((lavaan::fitMeasures(x)["chisq"]/fitMeasures(x) ["df"]),digits=3),
                    "aGFI"=round(lavaan::fitMeasures(x)["agfi"],digits=3),
                    "GFI"=round(lavaan::fitMeasures(x)["gfi"],digits=3),
                    "RMSEA [90% IC]"=paste0(round(lavaan::fitMeasures(x) ["rmsea"],3),"[",round(lavaan::fitMeasures(x) ["rmsea.ci.lower"],3),"-",round(lavaan::fitMeasures(x) ["rmsea.ci.upper"],3),"]"),
                    "CFit"=round(lavaan::fitMeasures(x)["rmsea.pvalue"],digits=3),
                    "CFI"=round(lavaan::fitMeasures(x)["cfi"],digits=3),
                    "NNFI"=round(lavaan::fitMeasures(x)["nnfi"],digits=3)))

  
  return(
    as.data.frame(cbind("Modelo"=deparse(substitute(x)),
                    "gl"=round(lavaan::fitMeasures(x) ["df"],digits=3),
                    "WLS X2"=sprintf("%7.3f",round(lavaan::fitMeasures(x)["chisq"],digits=3)),
                    "CMIN/df"=sprintf("%5.3f",round((lavaan::fitMeasures(x)["chisq"]/fitMeasures(x) ["df"]),digits=3)),
                    "aGFI"=sprintf("%5.3f",round(lavaan::fitMeasures(x)["agfi"],digits=3)),
                    "GFI"=sprintf("%5.3f",round(lavaan::fitMeasures(x)["gfi"],digits=3)),
                    "RMSEA [90% IC]"=paste0(sprintf("%5.3f",round(lavaan::fitMeasures(x) ["rmsea"],3)),"[",sprintf("%5.3f",round(lavaan::fitMeasures(x) ["rmsea.ci.lower"],3)),"-",sprintf("%5.3f",round(lavaan::fitMeasures(x) ["rmsea.ci.upper"],3)),"]"),
                    "CFit"=sprintf("%5.3f",round(lavaan::fitMeasures(x)["rmsea.pvalue"],digits=3)),
                    "CFI"=sprintf("%5.3f",round(lavaan::fitMeasures(x)["cfi"],digits=3)),
                    "NNFI"=sprintf("%5.3f",round(lavaan::fitMeasures(x)["nnfi"],digits=3))))
  )
}

#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#
#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#

Propiedades Psicométricas

I) Indicadores de Salud Mental

I.1) Normalidad Multivariada

En primera instancia, se probó el supuesto de normalidad multivariante, el cual es un supuesto para la aplicación de determinados estimadores en modelos de ecuaciones estructurales.


#Ya existen "num_sms", por lo que debemos hacer 
dim_sm_p3<-surveymonkey_accionsalududp_df2_cor_sel_2 %>%dplyr::mutate_at(.vars=vars(starts_with("p3_siente"),-contains("num")),.funs = list(`num_sm`=~as.numeric(.))) %>% 
  dplyr::select(ends_with("num_sm")) 
dim_sm_p4<-surveymonkey_accionsalududp_df2_cor_sel_2 %>%dplyr::mutate_at(.vars=vars(starts_with("p4_afront"),-contains("num")),.funs = list(`num_sm`=~as.numeric(.))) %>% 
  dplyr::select(ends_with("num_sm")) 
dim_sm_p5<-surveymonkey_accionsalududp_df2_cor_sel_2 %>%dplyr::mutate_at(.vars=vars(starts_with("p5_animo"),-contains("num")),.funs = list(`num_sm`=~as.numeric(.))) %>% 
  dplyr::select(ends_with("num_sm")) 
dim_sm<-surveymonkey_accionsalududp_df2_cor_sel_2 %>%dplyr::mutate_at(.vars=vars(starts_with("p3_siente"),
                                                                           starts_with("p4_afront"),
                                                                           starts_with("p5_animo"),
                                                                           -contains("num")),.funs = list(`num_sm`=~as.numeric(.))) %>% 
  dplyr::select(ends_with("num_sm")) 

#,starts_with("p4_afront"),starts_with("p5_animo")
options(knitr.kable.NA = '')
MVN::mvn(dim_sm_p3[complete.cases(dim_sm_p3),], subset = NULL, mvnTest = "mardia", covariance = TRUE, tol = 1e-25, alpha = 0.5,scale = FALSE, desc = TRUE, transform = "none", R = 1000,univariateTest = "Lillie",univariatePlot = "none", multivariatePlot = "none",multivariateOutlierMethod = "none", bc = FALSE, bcType = "rounded",showOutliers = FALSE, showNewData = FALSE)$multivariateNormality%>%
  data.frame()%>%
  dplyr::mutate(across(c("Statistic","p.value"),~ifelse(grepl("NA",.),NA_real_,as.numeric(as.character(.)))))%>%
  dplyr::mutate(Statistic=sprintf("%8.2f",Statistic))%>%
  dplyr::mutate(p.value=sprintf("%5.3f",p.value))%>%
  dplyr::mutate(across(c("Statistic","p.value"),~ifelse(grepl("NA",.),"-",as.character(.))))%>%
  dplyr::mutate(Result=ifelse(Result=="YES","Sí","No")) %>% 
   knitr::kable(.,format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
               caption = paste0("Tabla 1a. Normalidad Multivariada Preguntas sobre cómo te sientes"),
               col.names = c("Prueba","Estadistico","Valor p","Normalidad"),
align =c('l',rep('c', 101)))%>%
    kableExtra::add_footnote(c("Nota. Mardia Skewness= Asimetría Multivariante de Mardia (1970); Mardia Kurtosis= Curtosis Multivariante de Mardia (1970)",paste0("N= ",nrow(dim_sm_p3[complete.cases(dim_sm_p3),]))), notation = "none")%>%
  kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 13)
Tabla 1a. Normalidad Multivariada Preguntas sobre cómo te sientes
Prueba Estadistico Valor p Normalidad
Mardia Skewness 238.39 0.000 No
Mardia Kurtosis 5.45 0.000 No
MVN
No
Nota. Mardia Skewness= Asimetría Multivariante de Mardia (1970); Mardia Kurtosis= Curtosis Multivariante de Mardia (1970)
N= 707
#,starts_with("p4_afront"),starts_with("p5_animo")
options(knitr.kable.NA = '')
MVN::mvn(dim_sm_p4[complete.cases(dim_sm_p4),], subset = NULL, mvnTest = "mardia", covariance = TRUE, tol = 1e-25, alpha = 0.5,scale = FALSE, desc = TRUE, transform = "none", R = 1000,univariateTest = "Lillie",univariatePlot = "none", multivariatePlot = "none",multivariateOutlierMethod = "none", bc = FALSE, bcType = "rounded",showOutliers = FALSE, showNewData = FALSE)$multivariateNormality%>%
  data.frame()%>%
  dplyr::mutate(across(c("Statistic","p.value"),~ifelse(grepl("NA",.),NA_real_,as.numeric(as.character(.)))))%>%
  dplyr::mutate(Statistic=sprintf("%8.2f",Statistic))%>%
  dplyr::mutate(p.value=sprintf("%5.3f",p.value))%>%
  dplyr::mutate(across(c("Statistic","p.value"),~ifelse(grepl("NA",.),"-",as.character(.))))%>%
  dplyr::mutate(Result=ifelse(Result=="YES","Sí","No")) %>% 
   knitr::kable(.,format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
               caption = paste0("Tabla 1b. Normalidad Multivariada Preguntas sobre cómo afrontas experiencias estresantes"),
               col.names = c("Prueba","Estadistico","Valor p","Normalidad"),
align =c('l',rep('c', 101)))%>%
    kableExtra::add_footnote(c("Nota. Mardia Skewness= Asimetría Multivariante de Mardia (1970); Mardia Kurtosis= Curtosis Multivariante de Mardia (1970)",paste0("N= ",nrow(dim_sm_p4[complete.cases(dim_sm_p4),]))), notation = "none")%>%
  kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 13)
Tabla 1b. Normalidad Multivariada Preguntas sobre cómo afrontas experiencias estresantes
Prueba Estadistico Valor p Normalidad
Mardia Skewness 141.40 0.000 No
Mardia Kurtosis 1.01 0.311
MVN
No
Nota. Mardia Skewness= Asimetría Multivariante de Mardia (1970); Mardia Kurtosis= Curtosis Multivariante de Mardia (1970)
N= 702
#,starts_with("p4_afront"),starts_with("p5_animo")
options(knitr.kable.NA = '')
MVN::mvn(dim_sm_p5[complete.cases(dim_sm_p5),], subset = NULL, mvnTest = "mardia", covariance = TRUE, tol = 1e-25, alpha = 0.5,scale = FALSE, desc = TRUE, transform = "none", R = 1000,univariateTest = "Lillie",univariatePlot = "none", multivariatePlot = "none",multivariateOutlierMethod = "none", bc = FALSE, bcType = "rounded",showOutliers = FALSE, showNewData = FALSE)$multivariateNormality%>%
  data.frame()%>%
  dplyr::mutate(across(c("Statistic","p.value"),~ifelse(grepl("NA",.),NA_real_,as.numeric(as.character(.)))))%>%
  dplyr::mutate(Statistic=sprintf("%8.2f",Statistic))%>%
  dplyr::mutate(p.value=sprintf("%5.3f",p.value))%>%
  dplyr::mutate(across(c("Statistic","p.value"),~ifelse(grepl("NA",.),"-",as.character(.))))%>%
  dplyr::mutate(Result=ifelse(Result=="YES","Sí","No")) %>% 
   knitr::kable(.,format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
               caption = paste0("Tabla 1c. Normalidad Multivariada Preguntas sobre su estado de ánimo"),
               col.names = c("Prueba","Estadistico","Valor p","Normalidad"),
align =c('l',rep('c', 101)))%>%
    kableExtra::add_footnote(c("Nota. Mardia Skewness= Asimetría Multivariante de Mardia (1970); Mardia Kurtosis= Curtosis Multivariante de Mardia (1970)",paste0("N= ",nrow(dim_sm_p5[complete.cases(dim_sm_p5),]))), notation = "none")%>%
  kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 13)
Tabla 1c. Normalidad Multivariada Preguntas sobre su estado de ánimo
Prueba Estadistico Valor p Normalidad
Mardia Skewness 130.58 0.000 No
Mardia Kurtosis 2.46 0.014 No
MVN
No
Nota. Mardia Skewness= Asimetría Multivariante de Mardia (1970); Mardia Kurtosis= Curtosis Multivariante de Mardia (1970)
N= 690
#,starts_with("p4_afront"),starts_with("p5_animo")
options(knitr.kable.NA = '')
MVN::mvn(dim_sm[complete.cases(dim_sm),], subset = NULL, mvnTest = "mardia", covariance = TRUE, tol = 1e-25, alpha = 0.5,scale = FALSE, desc = TRUE, transform = "none", R = 1000,univariateTest = "Lillie",univariatePlot = "none", multivariatePlot = "none",multivariateOutlierMethod = "none", bc = FALSE, bcType = "rounded",showOutliers = FALSE, showNewData = FALSE)$multivariateNormality%>%
  data.frame()%>%
  dplyr::mutate(across(c("Statistic","p.value"),~ifelse(grepl("NA",.),NA_real_,as.numeric(as.character(.)))))%>%
  dplyr::mutate(Statistic=sprintf("%8.2f",Statistic))%>%
  dplyr::mutate(p.value=sprintf("%5.3f",p.value))%>%
  dplyr::mutate(across(c("Statistic","p.value"),~ifelse(grepl("NA",.),"-",as.character(.))))%>%
  dplyr::mutate(Result=ifelse(Result=="YES","Sí","No")) %>% 
   knitr::kable(.,format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
               caption = paste0("Tabla 1d. Normalidad Multivariada Total de preguntas sobre Salud Mental"),
               col.names = c("Prueba","Estadistico","Valor p","Normalidad"),
align =c('l',rep('c', 101)))%>%
    kableExtra::add_footnote(c("Nota. Mardia Skewness= Asimetría Multivariante de Mardia (1970); Mardia Kurtosis= Curtosis Multivariante de Mardia (1970)",paste0("N= ",nrow(dim_sm[complete.cases(dim_sm),]))), notation = "none")%>%
  kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 13)
Tabla 1d. Normalidad Multivariada Total de preguntas sobre Salud Mental
Prueba Estadistico Valor p Normalidad
Mardia Skewness 1139.35 0.000 No
Mardia Kurtosis 13.06 0.000 No
MVN
No
Nota. Mardia Skewness= Asimetría Multivariante de Mardia (1970); Mardia Kurtosis= Curtosis Multivariante de Mardia (1970)
N= 690

I.2) Adecuación para el Análisis Factorial

#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_
#OPCS. CON DATOS== c("everything", "all.obs", "complete.obs", "na.or.complete", "pairwise.complete.obs"))
#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_
barlett<- function(x, complete="complete.obs"){
paste0("X2 de Barlett (", REdaS::bart_spher(x, use = complete)$`df`,",",REdaS::bart_spher(x, use = complete)$`n`,")= ",round(REdaS::bart_spher(x, use = complete)$`X2`,2),", p", ifelse(REdaS::bart_spher(x, use = complete)$`p.value`<.001,"<0.001",paste0("=",as.character(round(REdaS::bart_spher(x, use = complete)$`p.value`,3)))))
}

Sabemos que los datos no siguen una distribución normal, ¿pero existen correlaciones entre las variables en una proporción tal que haga pertinente un análisis factorial?. Para ello se efectuará una prueba de esfricidad de Barlett que permite identificar si la matriz de correlaciones es una matriz de identidad (no se identifican correlaciones). A partir de esta prueba se puede concluir que los datos son adecuados para el análisis factorial tanto para los ítems sobre “cómo te sientes”(p3) (X2 de Barlett (15,707)= 2641.42, p<0.001), como para las preguntas sobre “cómo afrontas las experiencias estresantes” (p4) (X2 de Barlett (3,702)= 706.71, p<0.001), sobre “su estado de ánimo” (p5) (X2 de Barlett (6,690)= 1106.14, p<0.001) y el total de preguntas sobre salud mental (X2 de Barlett (78,690)= 5792.42, p<0.001) (Barlett 1937).


La segunda prueba necesaria es la medida de adecuación de la muestra (MSA) de Kayser, Meyer & Olkin (KMO), que busca contrastar si la muestra es adecuada para llevar a cabo un análisis factorial (Lloret-Segura et al. 2014; Méndez Martínez and Rondón Sepúlveda 2012).


#LOS ARGUMENTOS DEBEN SER NUMÉRICOS, NO PUEDEN SER ORDINALES
#_#_#_#_#_#_#_#_#_#_#_
cbind(Modelos=c("Preguntas sobre cómo te sientes","Preguntas sobre su estado de ánimo", "Preguntas sobre cómo afrontas experiencias estresantes", "Total preguntas de salud mental"),
      KMO=c(round(psych::KMO(na.omit(dim_sm_p3))$MSA,2),
            round(psych::KMO(na.omit(dim_sm_p4))$MSA,2),
            round(psych::KMO(na.omit(dim_sm_p5))$MSA,2),
            round(psych::KMO(na.omit(cbind(dim_sm_p3,dim_sm_p4,dim_sm_p5)))$MSA,2))
      ) %>% 
   knitr::kable(.,format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
               caption = paste0("Tabla 2. Keyser-Meyer-Olkin"),
               align =c('l',rep('c', 101)))%>%
    #kableExtra::add_footnote(c("Nota. Los ítems son")), notation = "none")%>%
  kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 13)  
Tabla 2. Keyser-Meyer-Olkin
Modelos KMO
Preguntas sobre cómo te sientes 0.84
Preguntas sobre su estado de ánimo 0.7
Preguntas sobre cómo afrontas experiencias estresantes 0.75
Total preguntas de salud mental 0.93
#el índice Kaiser Meyer Olkin (KMO), el cual toma valores entre 0 y 1. La medida puede ser interpretada con distintos lineamientos; sin embargo, los más utilizados son: valores menores de 0,5 se consideran inaceptables; de 0,5 a 0,59, pobres; de 0,6 a 0,79, regulares, y de 0,8 a 1, meritorios. Este índice toma el valor de 1 solo en el caso de que una variable sea perfectamente predicha.
# Méndez Martínez, Carolina, & Rondón Sepúlveda, Martín Alonso. (2012). Introducción al análisis factorial exploratorio. Revista Colombiana de Psiquiatría, 41(1), 197-207. Retrieved February 24, 2021, from http://www.scielo.org.co/scielo.php?script=sci_arttext&pid=S0034-74502012000100014&lng=en&tlng=es.

A partir de la medida obtenida, se constata que la adecuación para el análisis es bastante adecuada, siendo todos los valores KMO para ítems individuales mayores a 0.7.


I.3) Matriz de correlaciones Policóricas

Para poder ver la relación entre las respuestas entregadas, se generó una matriz de correlaciones policóricas que asume la naturaleza ordinal de las variables. Se estimaron sólo para aquellas observaciones que no tuvieran datos perdidos (complete.obs). Esta matriz estandariza las variables (particularmente importante cuando los ítems no tienen las mismas escalas de medición) (John Fox 2019).


#<div style="border: 1px solid #ddd; padding: 5px; overflow-y: scroll; height:600px; overflow-x: scroll; width:100%;">

require(polycor)
#max-height:150%; overflow: scroll;
#Computes a heterogenous correlation matrix, consisting of Pearson product-moment correlations between numeric variables, polyserial correlations between numeric and ordinal variables, and polychoric correlations between ordinal variables.

dim_sm_p345<-surveymonkey_accionsalududp_df2_cor%>%
  dplyr::mutate_at(.vars=vars(starts_with("p3_siente"),starts_with("p4_afront"),starts_with("p5_animo")),.funs = list(`num_sm`=~as.numeric(.))) %>% dplyr::select(ends_with("_num_sm"))

dim_sm_p345_original<-surveymonkey_accionsalududp_df2_cor %>% dplyr::select(starts_with("p3_siente"),starts_with("p4_afront"),starts_with("p5_animo"))

var_lbls_p345<-
  cbind.data.frame(vars=names(surveymonkey_accionsalududp_df2_cor)[grep("p3_siente|p4_afront|p5_animo", colnames(surveymonkey_accionsalududp_df2_cor))],
    label=attributes(surveymonkey_accionsalududp_df2_cor)$"variable.labels"[grep("p3_siente|p4_afront|p5_animo", colnames(surveymonkey_accionsalududp_df2_cor))])

hetcor_mat<-hetcor(dim_sm_p345_original, ML = T, std.err = T, use="complete.obs", bins=4, pd=TRUE)#smooth

# https://www.r-bloggers.com/2020/08/interactive-correlation-plot/

hetcor_matp345_df<-
reshape2::melt(tibble::as_tibble(hetcor_mat$correlations,rownames = "rowname")) %>% 
    dplyr::left_join(melt(tibble::as_tibble(hetcor_mat$tests,rownames = "rowname")),by=c("rowname","variable")) %>% 
  dplyr::rename("Var1"="rowname", "Var2"="variable", "corr"="value.x", "pval"="value.y") %>% 
  dplyr::mutate(Var1=factor(Var1, levels=var_lbls_p345$vars)) %>% 
  dplyr::mutate(Var2=factor(Var2, levels=var_lbls_p345$vars)) %>% 
  dplyr::left_join(var_lbls_p345, by=c("Var1"="vars")) %>% 
  dplyr::left_join(var_lbls_p345, by=c("Var2"="vars")) %>% 
  dplyr::rename("Var1_lab"="label.x", "Var2_lab"="label.y")

pd1 <- hetcor_matp345_df %>% 
  dplyr::mutate(data_id = paste0(Var1, '-', Var2),
         tooltip = paste0('Y: ',Var1_lab, '<br>', 'X: ',Var2_lab, '<br>Rho: ', round(as.numeric(corr), 2), 
                          '<br>p', ifelse(pval<.001,"<0.001",paste0("=",sprintf("%.4f",pval)))))

p1 <- ggplot(pd1) +
  geom_tile_interactive(aes(Var2,Var1, fill = corr,
                            tooltip = tooltip
                            ), color = "gray")  +
  scale_fill_gradient2(low = "#E46726", high = "#6D9EC1",
                       mid = "white", midpoint = 0, limit = c(-1, 1), space = "Lab",
                       name = "Corr") +
  geom_text(mapping = aes(x = Var1, y = Var2, label = round(corr, 2)), size = 2) +
  ggplot2::coord_fixed() +
  theme_minimal() +
  theme(axis.text.x = element_blank())+
  theme(axis.text.y = element_blank())+
  guides(fill = FALSE) +
  xlab("") + ylab("")
girafe(ggobj = p1)

Figura 1. Matriz de Correlaciones Policóricas de las Variables De Salud Mental

Adicionalmente, se generó otra matriz de correlaciones Spearman entre variables, aunque en este caso, con las variables numéricas y sin considerar su naturaleza ordinal. Llama la atención que el ítem sobre cuán a menudo se ha sentido Irritable, no corelaciona significativamente con haberse sentido Agotado, Estresado, con Dificultades para descansar o dormir y Con problemas para mantener el sueño al dormir en los últimos 7 días. Por otro lado, sentirse estresado y agotado emocional y físicamente no muestran una correlación significativa.


corr_radiant_sm<-
radiant.basics::correlation(data.table::data.table(dim_sm_p345),
            method= "spearman",hcor=F) #%>% str()

plot(corr_radiant_sm)
Figura 2. Matriz de Correlaciones de las Variables De Salud Mental

Figura 2. Matriz de Correlaciones de las Variables De Salud Mental

#Chi Square rule #1: Extracting factors until the chi square of the residual matrix is not significant.

#Chi Square rule #2: Extracting factors until the change in chi square from factor n to factor n+1 is not significant. Parallel Analysis: Extracting factors until the eigen values of the real data are less than the corresponding eigen values of a random data set of the same size.

#Scree Test: Plotting the magnitude of the successive eigen values and applying the scree test (a sudden drop in eigen values analogous to the change in slope seen when scrambling up the talus slope of a mountain and approaching the rock face).

#Eigen Value of 1 rule: Extracting principal components until the eigen value <1.
#Meaning: Extracting factors as long as they are interpetable.

#VSS: Using the Very Simple Structure Criterion.

A partir de la Figura anterior, se observa que todas las correlaciones entre las distintos ítems resultan ser significativas estadísticamente.


I.4) Confiabilidad

Utilizamos el indicador alfa de cronbach (\(\alpha\)) para analizar la consistencia interna. Adicionalmente, se añadió el índice Lambda 6 de Guttman (\(\lambda\) 6) resultante de las correlaciones múltiples al cuadrado de los ítems, el cual es menos sensible al número de ítems por escala (Streiner 2003).

alfa_dim_sm_p3<-psych::alpha(dim_sm_p3[complete.cases(dim_sm_p3),],use="complete.obs",n.obs=nrow(dim_sm_p3))
var_lab_p3<- attributes(surveymonkey_accionsalududp_df2_cor)$"variable.labels"[c(grep("p3_siente", colnames(surveymonkey_accionsalududp_df2_cor)))]

data.table(cbind.data.frame(var_lab_p3,alfa_dim_sm_p3$alpha.drop),
           keep.rownames = T)%>%
    dplyr::select(var_lab_p3, raw_alpha, std.alpha,`G6(smc)`)%>%
    dplyr::mutate_at(vars(raw_alpha, std.alpha,`G6(smc)`),~round(.,2)) %>% 
   knitr::kable(.,format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
               caption = paste0("Tabla 2a. Alfa si se elimina un ítem Preguntas sobre cómo te sientes",paste0("(alfa= ",round(alfa_dim_sm_p3$total$std.alpha,2),", SMC= ",round(alfa_dim_sm_p3$total$`G6(smc`,2),")")),
               col.names = c("Ítem","Alfa Bruto","Alfa Est.","SMC"),
align =c('l',rep('c', 101)))%>%
    kableExtra::add_footnote(c("Nota. SMC= Correlaciones Múltiples al Cuadrado"), notation = "none")%>%
  kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 12)
Tabla 2a. Alfa si se elimina un ítem Preguntas sobre cómo te sientes(alfa= 0.89, SMC= 0.9)
Ítem Alfa Bruto Alfa Est. SMC
En los últimos 7 días, ¿cuán a menudo me he sentido…? | Agotado Físicamente. 0.88 0.88 0.89
En los últimos 7 días, ¿cuán a menudo me he sentido…? | Agotado Emocionalmente. 0.86 0.87 0.87
En los últimos 7 días, ¿cuán a menudo me he sentido…? | Estresado. 0.87 0.87 0.87
En los últimos 7 días, ¿cuán a menudo me he sentido…? | Irritable. 0.88 0.88 0.89
En los últimos 7 días, ¿cuán a menudo me he sentido…? | Con dificultades para descansar al dormir. 0.87 0.87 0.86
En los últimos 7 días, ¿cuán a menudo me he sentido…? | Con problemas para mantener el sueño al dormir. 0.88 0.88 0.86
Nota. SMC= Correlaciones Múltiples al Cuadrado

A partir de la tabla anterior, se puede observar valores aceptables en términos de confiabilidad para la escala, sin ítems cuya eliminación significara mejoría.


alfa_dim_sm_p4<-psych::alpha(dim_sm_p4[complete.cases(dim_sm_p4),])
var_lab_p4<- attributes(surveymonkey_accionsalududp_df2_cor)$"variable.labels"[c(grep("p4_afront", colnames(surveymonkey_accionsalududp_df2_cor)))]

data.table(cbind.data.frame(var_lab_p4,alfa_dim_sm_p4$alpha.drop),
           keep.rownames = T)%>%
    dplyr::select(var_lab_p4, raw_alpha, std.alpha,`G6(smc)`)%>%
    dplyr::mutate_at(vars(raw_alpha, std.alpha,`G6(smc)`),~round(.,2)) %>% 
   knitr::kable(.,format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
               caption = paste0("Tabla 2b. Alfa si se elimina un ítem Preguntas sobre cómo afrontas experiencias estresantes",paste0("(alfa= ",round(alfa_dim_sm_p4$total$std.alpha,2),", SMC= ",round(alfa_dim_sm_p4$total$`G6(smc`,2),")")),
               col.names = c("Ítem","Alfa Bruto","Alfa Est.","SMC"),
align =c('l',rep('c', 101)))%>%
    kableExtra::add_footnote(c("Nota. SMC= Correlaciones Múltiples al Cuadrado"), notation = "none")%>%
  kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 12)
Tabla 2b. Alfa si se elimina un ítem Preguntas sobre cómo afrontas experiencias estresantes(alfa= 0.81, SMC= 0.74)
Ítem Alfa Bruto Alfa Est. SMC
En la última semana y a consecuencia de la situación sanitaria, me he sentido… | Distante y desconectado de mi mismo y mi entorno. 0.79 0.79 0.66
En la última semana y a consecuencia de la situación sanitaria, me he sentido… | Sobresaltado, “en guardia” o me alarmo fácilmente. 0.70 0.70 0.53
En la última semana y a consecuencia de la situación sanitaria, me he sentido… | Irritable al punto de reaccionar bruscamente. 0.71 0.72 0.56
Nota. SMC= Correlaciones Múltiples al Cuadrado

A partir de la tabla anterior, se puede observar valores aceptables en términos de confiabilidad para la escala. Es necesario mencionar que la eliminación del ítem “Sobresaltado, ‘en guardia’ o me alarmo fácilmente” podría significar una importante disminución de la confiabilidad de la escala.


alfa_dim_sm_p5<-psych::alpha(dim_sm_p5[complete.cases(dim_sm_p5),])
var_lab_p5<- attributes(surveymonkey_accionsalududp_df2_cor)$"variable.labels"[c(grep("p5_animo", colnames(surveymonkey_accionsalududp_df2_cor)))]

data.table(cbind.data.frame(var_lab_p5,alfa_dim_sm_p5$alpha.drop),
           keep.rownames = T)%>%
    dplyr::select(var_lab_p5, raw_alpha, std.alpha,`G6(smc)`)%>%
    dplyr::mutate_at(vars(raw_alpha, std.alpha,`G6(smc)`),~round(.,2)) %>% 
   knitr::kable(.,format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
               caption = paste0("Tabla 2c. Alfa si se elimina un ítem Preguntas sobre su estado de ánimo",paste0("(alfa= ",round(alfa_dim_sm_p5$total$std.alpha,2),", SMC= ",round(alfa_dim_sm_p5$total$`G6(smc`,2),")")),
               col.names = c("Ítem","Alfa Bruto","Alfa Est.","SMC"),
align =c('l',rep('c', 101)))%>%
    kableExtra::add_footnote(c("Nota. SMC= Correlaciones Múltiples al Cuadrado"), notation = "none")%>%
  kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 12)
Tabla 2c. Alfa si se elimina un ítem Preguntas sobre su estado de ánimo(alfa= 0.83, SMC= 0.81)
Ítem Alfa Bruto Alfa Est. SMC
Señale con qué frecuencia ha experimentado las siguientes situaciones en los últimos 7 días | Me he sentido Nervioso, ansioso o con los nervios de punta. 0.77 0.78 0.71
Señale con qué frecuencia ha experimentado las siguientes situaciones en los últimos 7 días | No he podido dejar de preocuparme. 0.79 0.79 0.73
Señale con qué frecuencia ha experimentado las siguientes situaciones en los últimos 7 días | He sentido falta de interés o poca satisfacción en hacer cosas. 0.82 0.82 0.76
Señale con qué frecuencia ha experimentado las siguientes situaciones en los últimos 7 días | Me he sentido decaído, deprimido o desesperanzado. 0.76 0.76 0.70
Nota. SMC= Correlaciones Múltiples al Cuadrado

A partir de la Tabla anterior, se observa un nivel de confiabilidad aceptable, y no se observan ítems que mejorarían la confiabilidad si resultaran eliminados.


alfa_dim_sm_p345<-psych::alpha(dim_sm_p345[complete.cases(dim_sm_p345),],use="complete.obs",n.iter= clus_iter,
                               n.obs=nrow(dim_sm_p345))

var_lab_p345<- attributes(surveymonkey_accionsalududp_df2_cor)$"variable.labels"[c(grep("p3_siente|p4_afront|p5_animo", colnames(surveymonkey_accionsalududp_df2_cor)))]

data.table(cbind.data.frame(var_lab_p345,alfa_dim_sm_p345$alpha.drop),
           keep.rownames = T)%>%
    dplyr::select(var_lab_p345, raw_alpha, std.alpha,`G6(smc)`)%>%
    dplyr::mutate_at(vars(raw_alpha, std.alpha,`G6(smc)`),~round(.,2)) %>% 
   knitr::kable(.,format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
               caption = paste0("Tabla 2d. Alfa si se elimina un ítem Total preguntas de salud mental",paste0("(alfa= ",round(alfa_dim_sm_p345$total$std.alpha,2),", SMC= ",round(alfa_dim_sm_p345$total$`G6(smc`,2),")")),
               col.names = c("Ítem","Alfa Bruto","Alfa Est.","SMC"),
align =c('l',rep('c', 101)))%>%
    kableExtra::add_footnote(c("Nota. SMC= Correlaciones Múltiples al Cuadrado"), notation = "none")%>%
  kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 11)
Tabla 2d. Alfa si se elimina un ítem Total preguntas de salud mental(alfa= 0.93, SMC= 0.94)
Ítem Alfa Bruto Alfa Est. SMC
En los últimos 7 días, ¿cuán a menudo me he sentido…? | Agotado Físicamente. 0.93 0.93 0.94
En los últimos 7 días, ¿cuán a menudo me he sentido…? | Agotado Emocionalmente. 0.92 0.93 0.94
En los últimos 7 días, ¿cuán a menudo me he sentido…? | Estresado. 0.92 0.93 0.94
En los últimos 7 días, ¿cuán a menudo me he sentido…? | Irritable. 0.92 0.93 0.94
En los últimos 7 días, ¿cuán a menudo me he sentido…? | Con dificultades para descansar al dormir. 0.93 0.93 0.93
En los últimos 7 días, ¿cuán a menudo me he sentido…? | Con problemas para mantener el sueño al dormir. 0.93 0.93 0.93
En la última semana y a consecuencia de la situación sanitaria, me he sentido… | Distante y desconectado de mi mismo y mi entorno. 0.93 0.93 0.94
En la última semana y a consecuencia de la situación sanitaria, me he sentido… | Sobresaltado, “en guardia” o me alarmo fácilmente. 0.93 0.93 0.94
En la última semana y a consecuencia de la situación sanitaria, me he sentido… | Irritable al punto de reaccionar bruscamente. 0.93 0.93 0.94
Señale con qué frecuencia ha experimentado las siguientes situaciones en los últimos 7 días | Me he sentido Nervioso, ansioso o con los nervios de punta. 0.93 0.93 0.94
Señale con qué frecuencia ha experimentado las siguientes situaciones en los últimos 7 días | No he podido dejar de preocuparme. 0.93 0.93 0.94
Señale con qué frecuencia ha experimentado las siguientes situaciones en los últimos 7 días | He sentido falta de interés o poca satisfacción en hacer cosas. 0.93 0.93 0.94
Señale con qué frecuencia ha experimentado las siguientes situaciones en los últimos 7 días | Me he sentido decaído, deprimido o desesperanzado. 0.93 0.93 0.94
Nota. SMC= Correlaciones Múltiples al Cuadrado
#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:
#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:
#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:
#splitHalf(dim_sm_p345[complete.cases(dim_sm_p345),])

A partir de la Tabla anterior, no se aprecian ítems que mejorarían la confiabilidad considerablemente si se eliminaran. Adicionalmente, se estimaron intervalos de confianza mediante el remuestreo de 5000 iteraciones, obteniéndose una confiabilidad muy alta (a= 0.93,IC 95% 0.92; 0.94). Considerando los niveles de confiabilidad obtenidos, es plausible preguntarse si podría hablarse de problemas de salud mental como una dimensión única.

De igual manera, atendiendo a la naturaleza de las variables, se definió un alfa ordinal, de acuerdo al procedimiento establecido por para definirlo en base a la matriz de correlaciones policóricas (Espinoza and Novoa-Muñoz 2018).

#Contreras Espinoza S, Novoa-Muñoz F. Ventajas del alfa ordinal respecto al alfa de Cronbach ilustradas con la encuesta AUDIT-OMS. Rev Panam Salud Publica. 2018;42:e65. https://doi.org/10.26633/ RPSP.2018.65

alfa_ord_sm<-alpha(hetcor_mat$correlations,#polychoric(data.matrix(dim_sm_p345_original))$rho,
                   use="complete.obs",
                   n.iter= clus_iter,
                   n.obs=nrow(dim_sm_p345_original)
                   )

numeric_alfa_ord<-
scan(text = as.character(capture.output(print(alfa_ord_sm))[10]), what = " ") %>% 
  readr::parse_number()

data.table(cbind.data.frame(var_lab_p345,
                            alfa_ord_sm$alpha.drop),
           keep.rownames = T)%>%
    dplyr::select(var_lab_p345, raw_alpha, std.alpha)%>%
    dplyr::mutate_at(vars(raw_alpha, std.alpha),~round(.,2)) %>% 
   knitr::kable(.,format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
               caption = paste0("Tabla 2e. Alfa si se elimina un ítem Total preguntas de salud mental",paste0("(alfa ordinal= ",round(alfa_ord_sm$total$std.alpha,2),", SMC= ",round(alfa_ord_sm$total$`G6(smc`,2),")")),
               col.names = c("Ítem","Alfa Ordinal Bruto","Alfa Ordinal Est."),
align =c('l',rep('c', 101)))%>%
    kableExtra::add_footnote(c("Nota. SMC= Correlaciones Múltiples al Cuadrado"), notation = "none")%>%
  kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 11)
Tabla 2e. Alfa si se elimina un ítem Total preguntas de salud mental(alfa ordinal= 0.95, SMC= 0.96)
Ítem Alfa Ordinal Bruto Alfa Ordinal Est.
En los últimos 7 días, ¿cuán a menudo me he sentido…? | Agotado Físicamente. 0.95 0.95
En los últimos 7 días, ¿cuán a menudo me he sentido…? | Agotado Emocionalmente. 0.94 0.94
En los últimos 7 días, ¿cuán a menudo me he sentido…? | Estresado. 0.94 0.94
En los últimos 7 días, ¿cuán a menudo me he sentido…? | Irritable. 0.94 0.94
En los últimos 7 días, ¿cuán a menudo me he sentido…? | Con dificultades para descansar al dormir. 0.95 0.95
En los últimos 7 días, ¿cuán a menudo me he sentido…? | Con problemas para mantener el sueño al dormir. 0.95 0.95
En la última semana y a consecuencia de la situación sanitaria, me he sentido… | Distante y desconectado de mi mismo y mi entorno. 0.95 0.95
En la última semana y a consecuencia de la situación sanitaria, me he sentido… | Sobresaltado, “en guardia” o me alarmo fácilmente. 0.94 0.94
En la última semana y a consecuencia de la situación sanitaria, me he sentido… | Irritable al punto de reaccionar bruscamente. 0.94 0.94
Señale con qué frecuencia ha experimentado las siguientes situaciones en los últimos 7 días | Me he sentido Nervioso, ansioso o con los nervios de punta. 0.94 0.94
Señale con qué frecuencia ha experimentado las siguientes situaciones en los últimos 7 días | No he podido dejar de preocuparme. 0.94 0.94
Señale con qué frecuencia ha experimentado las siguientes situaciones en los últimos 7 días | He sentido falta de interés o poca satisfacción en hacer cosas. 0.95 0.95
Señale con qué frecuencia ha experimentado las siguientes situaciones en los últimos 7 días | Me he sentido decaído, deprimido o desesperanzado. 0.94 0.94
Nota. SMC= Correlaciones Múltiples al Cuadrado

A partir de la Tabla anterior, se estimaron intervalos de confianza mediante el remuestreo de 5000 iteraciones, obteniéndose una confiabilidad muy alta (a= 0.95,IC 95% 0.94; 0.95). Estos resultados contribuyen a orroborar el alto grado de consistencia en los ítems mediante el alfa de cronbach mostrado en la tabla anterior.


I.5) Unidimensionalidad

Se calculó la razón entre las covarianzas y la unicidad para capturar la unidimensionalidad. Esto implica que un modelo de un factor se ajusta a las covarianzas de los datos. La idea de que las variables manifiestas se encuentran tan correlacionadas con las variable latentes respectiva de que es probable de que pertenezcan a una misma dimensión dado que apuntan a ala misma dirección. No obstante, como su autor lo indica, todavía reviste un carácter exploratorio (Revelle 2017; Liu and Rijmen 2008).


keys.list_sm <- list(siente=c("p3_siente_1","p3_siente_2","p3_siente_3","p3_siente_4","p3_siente_5", "p3_siente_6"),
                     afront=c("p4_afront_1", "p4_afront_2", "p4_afront_3"),
                     animo=c("p5_animo_1", "p5_animo_2", "p5_animo_3")
                     )

cbind.data.frame(Modelos=c("Preguntas sobre cómo te sientes","Preguntas sobre su estado de ánimo", "Preguntas sobre cómo afrontas experiencias estresantes", "Total preguntas de salud mental"),
                 rbind(
                     psych::unidim(dim_sm_p3,cor= "poly")$uni,
                     psych::unidim(dim_sm_p4,cor= "poly")$uni,
                     psych::unidim(dim_sm_p5,cor= "poly")$uni,
                     psych::unidim(dim_sm,cor= "poly")$uni
                 )
)%>% 
  dplyr::select(`Modelos`,`u`,`Unidim.A`,`alpha`,`av.r`,`median.r`) %>% 
  dplyr::mutate_if(is.numeric, round, 2) %>% 
   knitr::kable(.,format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
               caption = paste0("Tabla 3. Unidimensionalidad"),
               col.names = c("Modelos","Undimiensionalidad Cruda","Unidimensionalidad Ajustada","Alfa estandarizado","Promedio de la Correlación entre ítems (ICC)", "Mediana de la correlación entre ítems (ICC)"),
align =c('l',rep('c', 101)))%>%
    #kableExtra::add_footnote(c("Nota. Los ítems son")), notation = "none")%>%
  kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 12)  
Tabla 3. Unidimensionalidad
Modelos Undimiensionalidad Cruda Unidimensionalidad Ajustada Alfa estandarizado Promedio de la Correlación entre ítems (ICC) Mediana de la correlación entre ítems (ICC)
Preguntas sobre cómo te sientes 0.96 1 0.91 0.64 0.61
Preguntas sobre su estado de ánimo 0.99 1 0.84 0.64 0.61
Preguntas sobre cómo afrontas experiencias estresantes 0.96 1 0.87 0.64 0.66
Total preguntas de salud mental 0.97 1 0.95 0.58 0.57
# When finding pairwise correlations, should we use the global values of the tau parameter (which is somewhat faster), or the local values (global=FALSE)? The local option is equivalent to the polycor solution, or to doing one correlation at a time. global=TRUE borrows information for one item pair from the other pairs using those item's frequencies. This will make a difference in the presence of lots of missing data. With very small sample sizes with global=FALSE and correct=TRUE, the function will fail (for as yet underdetermined reasons.

##Koo and Li (2016) gives the following suggestion for interpreting ICC (Koo and Li 2016):
#below 0.50: poor
#between 0.50 and 0.75: moderate
#between 0.75 and 0.90: good
#above 0.90: excellent

A partir de la Tabla anterior, se puede observar un muy alto nivel de unidimensionalidad ajustado (muy cercano a 1). De todas formas, es necesario recordar que este análisis sólo reviste un carácter exploratorio. Es necesario considerar que se sugiere que la correlación entre ítems por encima de 0,3 (Andy Field 2009). Respecto a la correlación entre ítems, se registran valores moderados en dicho índice (Koo and Li 2016).


I.6) Análisis Factorial Exploratorio (AFE)

El análisis exploratorio utilizó la matriz de correlaciones policóricas especificada al principio. El objetivo fue identificar el número y composición de los factores comunes (variables latentes) necesarios para explicar la varianza común del conjunto de ítems, por lo que se incluye la comunalidad y la unicidad. Para determinar el número óptimo de factores interpretables (el número de factores cuya solución se ajuste mejor a los datos), se utilizó el criterio VSS (criterio de estructura más simple) y el MAP (mínimo parcial promedio o minimum average partial) de Velicer. Dicho criterio compara las cargas factoriales bajas, en comparación al modelo más simple, y a la vez considera la cantidad de casos. Para el presente modelo que asume observaciones completas en variables de salud mental, se estiman 690 casos.

Si bien de los 13 ítems sobre salud mental se distinguen 6 subdimensiones referentes a agotamiento (1), estrés e irritabilidad (2), problemas de sueño e insomnio (3), indicadores de estrés postraumático (4), sintomatología ansiosa (5) y sintomatología depresiva (6).


Teniendo en cuenta el origen de los ítems, se compararon las estructuras de modelos que admitían desde 1 a 6 factores. Es necesario tener en consideración de que en ciencias sociales y en salud mental, muchas de las variables latentes a pesquisar podrían estar correlacionadas entre ellas, por lo que nunca serían del todo ortogonales en la práctica. Por dicha razón, se añadió una comparación considerando una rotación oblicua para efectos de este análisis. Por otra parte, reducir el número de ítems no es el objetivo primario del análisis, por lo que se descartó una rotación de tipo ortogonal, aunque la interpretación de sus cargas factoriales tienda a ser más simple que mediante una solución oblicua. Por último, se utilizó el método de extracción correspondiente a Factorización de Ejes Principales (Principal Axis Factoring), un método comunmente utilizado que no requiere cumplir con el supuesto de normalidad multivariada (Fabrigar et al. 1999). El objetivo es conseguir la mejor estimación posible de las comunalidades a partir del número de factores retenidos (Lloret-Segura et al. 2014; Osborne, Costello, and Kellow 2008; Izquierdo, Olea, and Abad 2014).


#Each of the procedures has its advantages and disadvantages. Using either the chi square test or the change in square test is, of course, sensitive to the number of subjects and leads to the nonsensical condition that if one wants to find many factors, one simply runs more subjects. Parallel analysis is partially sensitive to sample size in that for large samples the eigen values of random factors will be very small. The scree test is quite appealling but can lead to differences of interpretation as to when the scree "breaks". The eigen value of 1 rule, although the default for many programs, seems to be a rough way of dividing the number of variables by 3. Extracting interpretable factors means that the number of factors reflects the investigators creativity more than the data. VSS, while very simple to understand, will not work very well if the data are very factorially complex. (Simulations suggests it will work fine if the complexities of some of the items are no more than 2).

vss(hetcor_mat$correlations, n=6,n.obs=nrow(dim_sm_p345_original[complete.cases(dim_sm_p345_original),]), use="complete cases", rotate="oblimin", cor= "poly", fm="pa", plot=F)
## 
## Very Simple Structure
## Call: vss(x = hetcor_mat$correlations, n = 6, rotate = "oblimin", fm = "pa", 
##     n.obs = nrow(dim_sm_p345_original[complete.cases(dim_sm_p345_original), 
##         ]), plot = F, use = "complete cases", cor = "poly")
## VSS complexity 1 achieves a maximimum of 0.96  with  1  factors
## VSS complexity 2 achieves a maximimum of 0.8  with  2  factors
## 
## The Velicer MAP achieves a minimum of 0.04  with  1  factors 
## BIC achieves a minimum of  -49.23  with  6  factors
## Sample Size adjusted BIC achieves a minimum of  -1.6  with  6  factors
## 
## Statistics by number of factors 
##   vss1 vss2   map dof chisq     prob sqresid  fit RMSEA  BIC  SABIC complex
## 1 0.96 0.00 0.037  65  1442 1.5e-258       3 0.96 0.175 1017 1223.8     1.0
## 2 0.76 0.80 0.048  53   868 9.5e-148      13 0.80 0.149  521  689.5     1.1
## 3 0.40 0.61 0.054  42   525  9.6e-85      25 0.63 0.129  251  384.0     1.3
## 4 0.32 0.48 0.053  32   305  2.5e-46      32 0.53 0.111   96  197.7     1.4
## 5 0.29 0.40 0.063  23   121  2.7e-15      35 0.48 0.079  -29   43.7     1.3
## 6 0.23 0.34 0.086  15    49  1.9e-05      36 0.47 0.057  -49   -1.6     1.5
##   eChisq   SRMR eCRMS eBIC
## 1  488.1 0.0673 0.074   63
## 2  259.7 0.0491 0.060  -87
## 3  141.4 0.0362 0.049 -133
## 4   60.9 0.0238 0.037 -148
## 5   18.2 0.0130 0.024 -132
## 6    4.8 0.0067 0.015  -93
vss(hetcor_mat$correlations, n=6,n.obs=nrow(dim_sm_p345_original[complete.cases(dim_sm_p345_original),]), use="complete cases", rotate="oblimin",cor= "poly", fm="pa", plot=T,title="Estructura Muy Simple, \nFactrización de Eje Principales, Rotación Oblicua")
Figura 3. Estructura Simple Matriz Policórica, Preguntas de Salud Mental

Figura 3. Estructura Simple Matriz Policórica, Preguntas de Salud Mental

## 
## Very Simple Structure of  Estructura Muy Simple, 
## Factrización de Eje Principales, Rotación Oblicua 
## Call: vss(x = hetcor_mat$correlations, n = 6, rotate = "oblimin", fm = "pa", 
##     n.obs = nrow(dim_sm_p345_original[complete.cases(dim_sm_p345_original), 
##         ]), plot = T, title = "Estructura Muy Simple, \nFactrización de Eje Principales, Rotación Oblicua", 
##     use = "complete cases", cor = "poly")
## VSS complexity 1 achieves a maximimum of 0.96  with  1  factors
## VSS complexity 2 achieves a maximimum of 0.8  with  2  factors
## 
## The Velicer MAP achieves a minimum of 0.04  with  1  factors 
## BIC achieves a minimum of  -49.23  with  6  factors
## Sample Size adjusted BIC achieves a minimum of  -1.6  with  6  factors
## 
## Statistics by number of factors 
##   vss1 vss2   map dof chisq     prob sqresid  fit RMSEA  BIC  SABIC complex
## 1 0.96 0.00 0.037  65  1442 1.5e-258       3 0.96 0.175 1017 1223.8     1.0
## 2 0.76 0.80 0.048  53   868 9.5e-148      13 0.80 0.149  521  689.5     1.1
## 3 0.40 0.61 0.054  42   525  9.6e-85      25 0.63 0.129  251  384.0     1.3
## 4 0.32 0.48 0.053  32   305  2.5e-46      32 0.53 0.111   96  197.7     1.4
## 5 0.29 0.40 0.063  23   121  2.7e-15      35 0.48 0.079  -29   43.7     1.3
## 6 0.23 0.34 0.086  15    49  1.9e-05      36 0.47 0.057  -49   -1.6     1.5
##   eChisq   SRMR eCRMS eBIC
## 1  488.1 0.0673 0.074   63
## 2  259.7 0.0491 0.060  -87
## 3  141.4 0.0362 0.049 -133
## 4   60.9 0.0238 0.037 -148
## 5   18.2 0.0130 0.024 -132
## 6    4.8 0.0067 0.015  -93
invisible(c("Haciéndolo con todos los datos estandarizados"))
#vss(data.matrix(dim_sm_p345_original) %>%  standardize(), n=6,n.obs=nrow(dim_sm_p345_original[complete.cases(dim_sm_p345_original),]), use="complete cases", rotate="oblimin",cor= "poly", fm="pa", plot=T,title="Estructura Muy Simple, \nFactrización de Eje Principales, Rotación Oblicua")

invisible(c("Haciéndolo con todos la matriz policórica obtenida por el paquete hetcor"))
#vss(hetcor_mat$correlations, n=6,n.obs=nrow(dim_sm_p345_original[complete.cases(dim_sm_p345_original),]), use="complete cases", fm="pa", plot=T,title="Estructura Muy Simple, \nFactrización de Eje Principales, Rotación Oblicua")


#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_
#FUENTES:

# https://stats.stackexchange.com/questions/32669/vss-criterion-for-the-number-of-factors-in-rs-psych-package
# http://search.r-project.org/R/library/psych/html/VSS.html
# https://it.unt.edu/sites/default/files/vss_l_jds_dec2014.pdf
# http://dwoll.de/rexrepos/posts/multFApoly.html
#n is the maximum number of factors to extract  (default is 8)
#rotate is a string "none" or "varimax" for type of rotation (default is "none"
#:#:#:#:#:#:
#How to find the correlations: "cor" is Pearson", "cov" is covariance, "tet" is tetrachoric, "poly" is polychoric, "mixed" uses mixed cor for a mixture of tetrachorics, polychorics, Pearsons, biserials, and polyserials, Yuleb is Yulebonett, Yuleq and YuleY are the obvious Yule coefficients as appropriate

# It will produce normal factor analysis output but also will save the polychoric matrix (rho) and items difficulties (tau) for subsequent irt analyses.

#FUENTES
## http://www.psicothema.com/pdf/4206.pdf


A partir de los resultados expuestos, el criterio VSS establece claramente que el modelo de un factor parece bastante razonable, al igual que el MAP (Ruscio & Roche, 2012). De todas formas, un criterio no absoluto (relativo) como el BIC establece que los datos podrían perfectamente ajustarse a una estructura factorial de 6 factores (Cattell 1966).


VSS.scree(hetcor_mat$correlations, main="")
Figura 3. Gráfico de Codo de Catell,  Matriz Policórica Preguntas de Salud Mental

Figura 3. Gráfico de Codo de Catell, Matriz Policórica Preguntas de Salud Mental

#Es tal vez la técnica más utilizada. El aporte se mide con los valores propios, que representan el total de varianza explicada por el factor. El criterio utilizado para su uso se basa en tomar para el análisis solo aquellos factores que tengan valores propios mayores a 1
# Al igual que en el criterio anterior, depende de los valores propios, pero se diferencia porque los valores son graficados y se hace un análisis visual buscando en la curva un punto de inflexión donde esta cambie de sentido o de concavidad. Un problema que puede llegar a presentar es ser muy subjetivo y, por lo tanto, depender básicamente del criterio del investigador. No se recomienda cuando el número de variables en análisis es muy alto y la contribución de los nuevos ítems es similar 

# Méndez Martínez, Carolina, & Rondón Sepúlveda, Martín Alonso. (2012). Introducción al análisis factorial exploratorio. Revista Colombiana de Psiquiatría, 41(1), 197-207. Retrieved February 24, 2021, from http://www.scielo.org.co/scielo.php?script=sci_arttext&pid=S0034-74502012000100014&lng=en&tlng=es.


Lo anterior se corroboró mediante un gráfico de codo simple, el cual arrojó valores propios (eigenvalues) superiores a 1 exclusivamente para el modelo que asumió 1 factor. Adicionalmente, se generó un análisis mediante otro programa (random.polychor.pa), el que permite comparar distintos distintas cantidades de variables latentes, en base a matrices policóricas simuladas. Una comparación de los valores únicos de la muestra permite comparar cuáles superan a los datos aleatorios. Se generaron 500 muestras aleatorias, el programa trabaja sólo con casos completos y sólo se consideran factores no-aleatorios los que superan el percentil 99 (Presaghi and Desimoni 2015).


# Presaghi, Fabio & Desimoni, Marta. (2015). Title A Parallel Analysis With Polychoric Correlation Matrices. 10.13140/RG.2.1.4380.2640. 

random.polychor.pa(data.matrix=data.matrix(dim_sm_p345_original), nrep=500, q.eigen=0.99, r.seed=1234)
## ***** RESULTS FOR PARALLEL ANALYSIS ***** 
## *** computation starts at: 17:07:55 
## *** number of units (rows) in data.matrix: 875 
## *** LISTWISE deletion needed. The new sample size is: 690 
## *** SINGLE sample Parallel Analysis 
## *** simulation method: RANDOM 
## *** distribution: UNIFORM 
## *** difficulty factor: FALSE 
## *** correction for continuity set to: 0.0 
## *** number of variables (cols) in data.matrix: 13 
## *** Groups of items with diffent number of categories found in your data.matrix: 
##         Items Categories Min.Cat Max.Cat
## 1 GROUP     9          5       1       5
## 2 GROUP     4          4       1       4
## 
## Computations for sub-sample:  1 
##  The first simulation for FA took: 0.748 secs.
## 25 % - 50 % - 75 % - 100 % completed!
##  The first simulation for PCA took: 0.77 secs.
## 25 % - 50 % - 75 % - 100 % completed!
## computation ended at: 17:19:42 
## Elapsed Time: 12 mins 
## 
##  Comparison between RANDOM eigenvalues and EMPIRICAL eigenvalues 
## 
## ******* RESULTS for PARALLEL ANALYSIS:  
##                                                                  sample.1
## # of factors (PCA) for Velicer MAP criterium (Pearson corr)...:         1
## # of factors (PCA) for Velicer MAP(4th power)(Polychoric corr):         1
## # of factors (PCA) for Velicer MAP criterium (Polychoric corr):         1
## # of factors (PCA) for Velicer MAP(4th power)(Pearson corr)...:         1
## # of factors (PCA) for PA method (Polychoric Corr.)...........:         5
## # of factors (PCA) for PA method (Pearson Corr.)..............:         5
## # of factors for PA method (Polychoric Corr.).................:         5
## # of factors for PA method (Pearson Corr.)....................:         5
Figura 4. Gráfico de Codo,  Matriz Policórica Preguntas de Salud Mental

Figura 4. Gráfico de Codo, Matriz Policórica Preguntas de Salud Mental

#This means that the function guarantees that the empirical and the simulated data matrix are similar, but this also means that by changing the sample of participants the simulated data will change (even if slightly).

#The function will extract the eigenvalues from each randomly generated polychoric matrices and the requested percentile is returned. Eigenvalues from polychoric correlation matrix obtained from real data is also compute and compared, in a (scree) plot, with the eigenvalues extracted from the simulation (Polychoric matrices). Recently, Cho, Li & Bandalos (2009) showed that, in using PA method, it is important to match the type of the correlation matrix used to recover the eigenvalues from real data with the type of correlation matrix used to estimate random eigenvalues. Crossing the type of correlations (using Polychoric correlation matrix to estimate real eigenvalues and random simulated Pearson correlation matrices) may result in a wrong decision (i.e., retaining more non-random factors than the needed). A comparison with eigenvalues extracted from both randomly simulated Pearson correlation matrices and real data is also included. Finally, for both type of correlation matrix (Polychoric vs Pearson), the two versions (the classic squared coefficient and the 4th power coefficient) of Velicer's MAP criterion are calculated (Velicer, 1976; Velicer, Eaton, & Fava, 2000) by implementing under R the code released by O'Connor (2000) for SPSS, SAS and MATLAB. As the poly.mat() function used to calculate the polychoric correlation matrix is going to be deprecated in favour of polychoric() function, the random.polychor.pa was consequently updated (version 1.1.2) to account for changes in psych() package.

#FUENTE:
### https://www.rdocumentation.org/packages/random.polychor.pa/versions/1.1.3.1/topics/random.polychor.pa
### https://stats.stackexchange.com/questions/31948/looking-for-a-step-through-an-example-of-a-factor-analysis-on-dichotomous-data

#:#:#::#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:
invisible("IMPORTANTE PENSAR QUE NO SE SI LA CORRECCIÖN DE CONTINUIDAD QUE USA HETCOR VALE CONSERVARLA")
#https://stackoverflow.com/questions/59167406/hetcor-can-one-add-a-correction-for-continuity
#https://stackoverflow.com/questions/59167406/hetcor-can-one-add-a-correction-for-continuity

#The continuity parameter is passed to polychoric() function to handle the correction for continuity. In polychoric() function this correction for continuity is set by default to .5 (i.e. correct=TRUE). However in some cases this correction for continuity causes the polychorich() function to stop unexpectedly and consequently also random.polychor.pa() stops. So we added this parameter to allow users to bypass this problem. This parameter is set by default to 0.0 (i.e., no correction for continuity applied) and user may add the correction for continuity by setting the value to 0.5.

#random.polychor.pa(data.matrix=data.matrix(dim_sm_p345), nrep=500, q.eigen=0.99, r.seed=1234,continuity=0.5)

#this parameter allows to choose between uniform (that is also the default) or multinomial distribution for the simulation of random data sets.


A partir de la Tabla anterior, se encontró que una solución de 5 dimensiones también es razonable. De todas formas, se compararon los índices de ajuste de distintas soluciones factoriales, que asumen desde 1 hasta 10 variables latentes.


  library(psych)
 library(GPArotation)
 library(dplyr)
 library(plyr)
 library(knitr)

 efas <- list()

 for (i in 1:10) {
     fitn <- psych::fa(hetcor_mat$correlations,
          nfactors= i, 
          cor= "poly", 
          fm= "pa", 
          use="complete.obs", 
          n.obs= nrow(dim_sm_p345_original[complete.cases(dim_sm_p345_original),]),
          #n.iter=500, 
          rotate="oblimin")
     efas[[i]] <- data.frame(fitn$TLI, fitn$RMSEA[1], fitn$RMSEA[2], fitn$RMSEA[3], fitn$rms, fitn$BIC) %>% 
     mutate(Factors = i,
            RMSEA_ci = paste0(round(fitn.RMSEA.2.,2),", ",round(fitn.RMSEA.3.,2))) %>% 
     dplyr::rename(TLI = fitn.TLI,
            RMSEA = fitn.RMSEA.1.,
            "RMSEA CI90%" = RMSEA_ci,
            SRMR = fitn.rms, 
            BIC = fitn.BIC) %>% 
     dplyr::select(Factors, TLI, RMSEA, "RMSEA CI90%", SRMR, BIC)
     }
## Error in if (s < eps) break : valor ausente donde TRUE/FALSE es necesario
## Error in La.svd(B): infinite or missing values in 'x'
do.call("rbind", efas)  %>%
   data.table::data.table(keep.rownames = F) %>% 
   dplyr::mutate_at(c(2,3,5),~round(as.numeric(.),2)) %>% 
   dplyr::mutate_at(c(6),~round(as.numeric(.),0)) %>% 
  knitr::kable(format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
               caption = paste0("Tabla 4. Comparación de Índices de Ajuste, Preguntas sobre Salud Mental"),
               #col.names = c("Prueba","Estadistico","Valor p","Normalidad"),
align =c('l',rep('c', 101)))%>%
    kableExtra::add_footnote(c("Nota. TLI= Tucker-Lewis Index; RMSEA= Root Mean Square Error of Approximation; SRMR= Standardized Root Mean Residual; BIC= Bayesian Information Criterion"), notation = "none")%>%
  kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 12)
Tabla 4. Comparación de Índices de Ajuste, Preguntas sobre Salud Mental
Factors TLI RMSEA RMSEA CI90% SRMR BIC
1 0.78 0.18 0.17, 0.18 0.07 1,017
2 0.84 0.15 0.14, 0.16 0.05 521
3 0.88 0.13 0.12, 0.14 0.04 251
4 0.91 0.11 0.1, 0.12 0.02 96
5 0.95 0.08 0.07, 0.09 0.01 -29
6 0.98 0.06 0.04, 0.08 0.01 -49
Nota. TLI= Tucker-Lewis Index; RMSEA= Root Mean Square Error of Approximation; SRMR= Standardized Root Mean Residual; BIC= Bayesian Information Criterion


El error anterior nos muestra que deja de ser operacionalmente factible asumir más de 6 variables latentes (es necesario considerar que la prueba contrastada se compone de 13 ítems). A partir de la tabla anterior, el modelo que exhibe mejores índices de ajuste es el que asume 6 factores, seguido por el de 5. De todas formas, analizaremos las cargas factoriales. Atendiendo a que algunas variables latentes podrían estar compuestas sólo por 2 ítems, se hace mucho más necesario contar con mayores cargas factoriales por la variable de interés, sumado a menores cagas factoriales cruzadas (Treiblmaier and Filzmoser 2010).


modelo_6_factores <-
psych::fa(hetcor_mat$correlations,
          nfactors= 6, 
          cor= "poly", 
          fm= "pa", 
          use="complete.obs", 
          n.obs= nrow(dim_sm_p345_original[complete.cases(dim_sm_p345_original),]),
          #n.iter=500, 
          rotate="oblimin")

modelo_5_factores <-
psych::fa(hetcor_mat$correlations,
          nfactors= 5, 
          cor= "poly", 
          fm= "pa", 
          use="complete.obs", 
          n.obs= nrow(dim_sm_p345_original[complete.cases(dim_sm_p345_original),]),
          #n.iter=500, 
          rotate="oblimin")

modelo_1_factor <-
psych::fa(hetcor_mat$correlations, 
          nfactors= 1,
          cor= "poly", 
          fm= "pa", 
          use= "complete.obs", 
          n.obs= nrow(dim_sm_p345_original[complete.cases(dim_sm_p345_original),]),
          #n.iter=500, 
          rotate="oblimin") 
#En el caso de las rotaciones oblicuas, se parte del supuesto de correlación entre los nuevos factores, que en la vida real es el escenario más común, lo que conduce a que las ponderaciones calculadas no coincidan con las correlaciones entre el factor y la variable. Dentro de los métodos de rotación oblicua más utilizados se encuentran el oblimin y el promax. La rotación oblimin permite establecer relaciones jerárquicas entre los factores, para lo cual debe establecer el grado de inclinación (δ) entre ellos. Un valor δ de cero da las rotaciones más oblicuas (3,5).

#En cuanto a la rotación promax, modifica los resultados de una rotación ortogonal hasta crear una solución con cargas factoriales lo más próximas posible a la "estructura ideal". Para ello, eleva las cargas factoriales obtenidas en una rotación ortogonal a una determinada potencia (conocida como κ). En general, los valores de κ se encuentran entre 2 y 4, pero, a mayor potencia, mayor oblicuidad en la solución (el valor de κ más común es de 4) (3,5).

# Méndez Martínez, Carolina, & Rondón Sepúlveda, Martín Alonso. (2012). Introducción al análisis factorial exploratorio. Revista Colombiana de Psiquiatría, 41(1), 197-207. Retrieved February 24, 2021, from http://www.scielo.org.co/scielo.php?script=sci_arttext&pid=S0034-74502012000100014&lng=en&tlng=es.

#:#:#:#:#:#:#:#:#:#:#:#:#:#:
# The Root Mean Square Error of Approximation (RMSEA) provides information as to how well the model, with unknown but optimally chosen parameter estimates, would fit the population covariance matrix (Byrne, 1998).
# One of its key advantages is that the RMSEA calculates confidence intervals around its value.
# Values below .060 indicate close fit (Hu & Bentler, 1999). Values up to .080 are commonly accepted as adequate.
# The Standardized Root Mean Residual (SRMR) is the square root of the difference between the residuals of the sample covariance matrix and the hypothesized covariance model.
# As SRMR is standardized, its values range between 0 and 1. Commonly, models with values below .05 threshold are considered to indicate good fit (Byrne, 1998). Also, values up to .08 are acceptable (Hu & Bentler, 1999).
# TLI’s values may fall below zero or be above one (Hair et al., 2013). For CFI and TLI values above .95 are indicative of good fit (Hu & Bentler, 1999). In practice, CFI and TLI values from .90 to .95 are considered acceptable.


#Hair, R. D., Black, W. C., Babin, B. J., Anderson, R. E., & Tatham, R. L. (2013). Multivariate data analysis. Englewood Cliffs, NJ: Prentice–Hall.

#:#:#:#:#:#:#:#:#:#:#:#:#:#:
# Situaciones en que las saturaciones sean bajas (menor de .40) y el número de ítems por factor también sea bajo (3 ítems) requieren tamaños muestrales mayores para tener alguna garantía de generalización de los resultados. Como es habitual utilizar muestras de conveniencia hay que tener en cuenta dos problemas: la no-representatividad y la atenuación por restricción de rango.
# Lloret-Segura, Susana, Ferreres-Traver, Adoración, Hernández-Baeza, Ana, & Tomás-Marco, Inés. (2014). El Análisis Factorial Exploratorio de los Ítems: una guía práctica, revisada y actualizada. Anales de Psicología, 30(3), 1151-1169. https://dx.doi.org/10.6018/analesps.30.3.199361

modelo_cargas_fac <-
data.frame(matrix(as.numeric(loadings(modelo_6_factores)), attributes(loadings(modelo_6_factores))$dim, dimnames=attributes(loadings(modelo_6_factores))$dimnames))%>%
  dplyr::mutate_at(1:dim(loadings(modelo_6_factores))[2], ~round(as.numeric(.),2)) %>% 
  dplyr::mutate_at(1:dim(loadings(modelo_6_factores))[2], ~ifelse(.<.3,"-",as.character(.))) %>% 
  dplyr::select(PA1, PA2, PA3, PA4, PA5, PA6)

colnames(modelo_cargas_fac)<- paste0(paste0("PA",1:attributes(loadings(modelo_6_factores))$dim[2]),"\nR2=",round(modelo_6_factores$R2,2))

modelo_cargas_fac %>% 
  knitr::kable(format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
               caption = paste0("Tabla 5. Cargas factoriales, Modelo de 6 factores Preguntas de Salud Mental"),
               #col.names = c("Prueba","Estadistico","Valor p","Normalidad"),
align =c(rep('c', 101)))%>%
  kableExtra::add_footnote(c("Nota. Se omiten cargas factoriales menores a .3"), notation = "none")%>%  kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 12)
Tabla 5. Cargas factoriales, Modelo de 6 factores Preguntas de Salud Mental
PA1 R2=0.94 PA2 R2=0.86 PA3 R2=0.87 PA4 R2=0.86 PA5 R2=0.91 PA6 R2=0.69
p3_siente_1
0.83
p3_siente_2
0.47
p3_siente_3
0.56
p3_siente_4
0.85
p3_siente_5
0.9
p3_siente_6
0.97
p4_afront_1
0.36
0.38
p4_afront_2 0.32
0.45
p4_afront_3
0.47 0.4
p5_animo_1 0.71
p5_animo_2 0.66
p5_animo_3
0.78
p5_animo_4
0.71
Nota. Se omiten cargas factoriales menores a .3


De acuerdo a lo observado en la tabla anterior, el ítem “En los últimos 7 días, ¿cuán a menudo me he sentido…? | Irritable.” podría ser descartado, debido a carga cruzadas. De todas maneras, se observan factores claros como dificultades de sueño (PA2), agotamiento y estrés (PA1), sintomatología depresiva (PA5), seguido por factores menos claros pero todavía presentes como sintomatología vinculada a estrés postraumático (PA3) y sintomatología ansiosa (PA5). Atendiendo a los resultados arrojados por el “parallel analysis,” se decidió probar con 5 factores.


modelo_cargas_fac2 <-
data.frame(matrix(as.numeric(loadings(modelo_5_factores)), attributes(loadings(modelo_5_factores))$dim, dimnames=attributes(loadings(modelo_5_factores))$dimnames))%>%
  dplyr::mutate_at(1:dim(loadings(modelo_5_factores))[2], ~round(as.numeric(.),2)) %>% 
  dplyr::mutate_at(1:dim(loadings(modelo_5_factores))[2], ~ifelse(.<.4,"-",as.character(.))) %>% 
  dplyr::select(PA1, PA2, PA3, PA4, PA5)

colnames(modelo_cargas_fac2)<- paste0(paste0("PA",1:attributes(loadings(modelo_5_factores))$dim[2]),"\nR2=",round(modelo_5_factores$R2,2))

modelo_cargas_fac2 %>% 
  knitr::kable(format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
               caption = paste0("Tabla 6. Cargas factoriales, Modelo de 5 factores Preguntas de Salud Mental"),
               #col.names = c("Prueba","Estadistico","Valor p","Normalidad"),
align =c(rep('c', 101)))%>%
    kableExtra::add_footnote(c("Nota. Se omiten cargas factoriales menores a .4"), notation = "none")%>%
  kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 12)
Tabla 6. Cargas factoriales, Modelo de 5 factores Preguntas de Salud Mental
PA1 R2=0.92 PA2 R2=0.94 PA3 R2=0.85 PA4 R2=0.87 PA5 R2=0.88
p3_siente_1 0.73
p3_siente_2 0.7
p3_siente_3 0.87
p3_siente_4 0.49
0.44
p3_siente_5
0.95
p3_siente_6
0.93
p4_afront_1
p4_afront_2
0.46
p4_afront_3
0.82
p5_animo_1
0.74
p5_animo_2
0.64
p5_animo_3
0.84
p5_animo_4
0.61
Nota. Se omiten cargas factoriales menores a .4
#Para hacer esta evaluación desde el punto de vista estadístico se recurre a la significancia de las ponderaciones, así: valores menores a |0,3| se consideran no significativos; entre |0,3| y |0,5|, de aporte mínimo; entre |0,5| y |0,7|, de aporte significativo, y valores mayores a |0,7| son consideradas relevantes y, generalmente, son el objetivo del análisis. Sin embargo, es frecuente que en ocasiones valores mayores a |0,3| también sean considerados para los análisis (2,3,5).


En vista de lo obtenido en la tabla anterior, se puede colegir que el “En los últimos 7 días, ¿cuán a menudo me he sentido…? | Irritable.” sigue siendo problemático, ya que mantiene cargas cruzadas con ítems relativos a agotamiento y estrés y estrés postraumático, lo cual es teóricamente factible. Sin embargo, el vínculo entre ambos sobrevalora la irritabilidad, en desmedro de la subdimensión de desrealización o despersonalización (“En la última semana y a consecuencia de la situación sanitaria, me he sentido… | Distante y desconectado de mi mismo y mi entorno.”). En vista de lo anterior, por el momento se estima razonable eliminar dicho ítem y definir 5 dimensiones.


#invisible(fa.graph(modelo_6_factores))
library(DiagrammeR) 

gr1<-
DiagrammeR::grViz("
digraph Factor  {
  rankdir=RL;
  size='9';
  node [fontname='Helvetica' fontsize=14 shape=box, width=10];
  edge [fontname='Helvetica' fontsize=15];
V1  [label = 'En los últimos 7 días, ¿cuán a menudo me he sentido...? | Agotado Físicamente.'];
V2  [label = 'En los últimos 7 días, ¿cuán a menudo me he sentido...? | Agotado Emocionalmente.'];
V3  [label = 'En los últimos 7 días, ¿cuán a menudo me he sentido...? | Estresado.'];
V4  [label = 'En los últimos 7 días, ¿cuán a menudo me he sentido...? | Irritable.'];
V5  [label = 'En los últimos 7 días, ¿cuán a menudo me he sentido...? | Con dificultades
para descansar al dormir.'];
V6  [label = 'En los últimos 7 días, ¿cuán a menudo me he sentido...? | Con problemas para
mantener el sueño al dormir.'];
V7  [label = 'En la última semana y a consecuencia de la situación sanitaria, me he sentido...
| Distante y desconectado de mi mismo y mi entorno.'];
V8  [label = 'En la última semana y a consecuencia de la situación sanitaria, me he sentido...
| Sobresaltado, en guardia o me alarmo fácilmente.'];
V9  [label = 'En la última semana y a consecuencia de la situación sanitaria, me he sentido...
| Irritable al punto de reaccionar bruscamente.'];
V10  [label = 'Señale con qué frecuencia ha experimentado las siguientes situaciones
en los últimos 7 días | Me he sentido Nervioso, ansioso o con los nervios de punta.'];
V11  [label = 'Señale con qué frecuencia ha experimentado las siguientes situaciones
en los últimos 7 días | No he podido dejar de preocuparme.'];
V12  [label = 'Señale con qué frecuencia ha experimentado las siguientes situaciones
en los últimos 7 días | He sentido falta de interés o poca satisfacción en hacer
cosas.'];
V13  [label = 'Señale con qué frecuencia ha experimentado las siguientes situaciones
en los últimos 7 días | Me he sentido decaído, deprimido o desesperanzado.'];
node [shape=ellipse, width ='5']; #las PAs o factores latentes
PA1-> V1 [ label = 0.8 ];
PA1-> V2 [ label = 0.6 ];
PA1-> V3 [ label = 0.8 ];
PA2-> V5 [ label = 0.9 ];
PA2-> V6 [ label = 1 ];
PA3-> V7 [ label = 0.5 ];
PA3-> V8 [ label = 0.6 ];
PA3-> V9 [ label = 0.7 ];
PA4-> V12 [ label = 0.7 ];
PA4-> V13 [ label = 0.8 ];
PA5-> V10 [ label = 0.6 ];
PA5-> V11 [ label = 0.5 ];
PA6-> V4 [ label = 0.4 ];
PA2 -> PA1 [ label = 0.6 , dir='both', width= 15 ];
PA3 -> PA1 [ label = 0.6 , dir='both', width= 15 ];
PA3 -> PA2 [ label = 0.5 , dir='both', width= 15 ];
PA4 -> PA1 [ label = 0.6 , dir='both', width= 15 ];
PA4 -> PA2 [ label = 0.5 , dir='both', width= 15 ];
PA4 -> PA3 [ label = 0.6 , dir='both', width= 15 ];
PA5 -> PA1 [ label = 0.6 , dir='both', width= 15 ];
PA5 -> PA2 [ label = 0.5 , dir='both', width= 15 ];
PA5 -> PA3 [ label = 0.5 , dir='both', width= 15 ];
PA5 -> PA4 [ label = 0.5 , dir='both', width= 15 ];
PA6 -> PA3 [ label = 0.3 , dir='both', width= 15 ];
{ rank=same;
V1;V2;V3;V4;V5;V6;V7;V8;V9;V10;V11;V12;V13;}{ rank=same;
PA1;PA2;PA3;PA4;PA5;PA6;}}
"
)
gr2<-
DiagrammeR::grViz("
digraph Factor  {
  rankdir=RL;
  size='20';
  node [fontname='Helvetica' fontsize=9 shape=box, width=5];
  edge [fontname='Helvetica' fontsize=10];
V1  [label = 'En los últimos 7 días, ¿cuán a menudo me he sentido...? | Agotado Físicamente.'];
V2  [label = 'En los últimos 7 días, ¿cuán a menudo me he sentido...? | Agotado Emocionalmente.'];
V3  [label = 'En los últimos 7 días, ¿cuán a menudo me he sentido...? | Estresado.'];
V4  [label = 'En los últimos 7 días, ¿cuán a menudo me he sentido...? | Irritable.'];
V5  [label = 'En los últimos 7 días, ¿cuán a menudo me he sentido...? | Con dificultades
para descansar al dormir.'];
V6  [label = 'En los últimos 7 días, ¿cuán a menudo me he sentido...? | Con problemas para
mantener el sueño al dormir.'];
V7  [label = 'En la última semana y a consecuencia de la situación sanitaria, me he sentido...
| Distante y desconectado de mi mismo y mi entorno.'];
V8  [label = 'En la última semana y a consecuencia de la situación sanitaria, me he sentido...
| Sobresaltado, en guardia o me alarmo fácilmente.'];
V9  [label = 'En la última semana y a consecuencia de la situación sanitaria, me he sentido...
| Irritable al punto de reaccionar bruscamente.'];
V10  [label = 'Señale con qué frecuencia ha experimentado las siguientes situaciones
en los últimos 7 días | Me he sentido Nervioso, ansioso o con los nervios de punta.'];
V11  [label = 'Señale con qué frecuencia ha experimentado las siguientes situaciones
en los últimos 7 días | No he podido dejar de preocuparme.'];
V12  [label = 'Señale con qué frecuencia ha experimentado las siguientes situaciones
en los últimos 7 días | He sentido falta de interés o poca satisfacción en hacer
cosas.'];
V13  [label = 'Señale con qué frecuencia ha experimentado las siguientes situaciones
en los últimos 7 días | Me he sentido decaído, deprimido o desesperanzado.'];
node [shape=ellipse, width ='5']; #las PAs o factores latentes
PA1-> V1 [ label = 0.8 ];
PA1-> V2 [ label = 0.7 ];
PA1-> V3 [ label = 0.9 ];
PA1-> V4 [ label = 0.5 ];
PA2-> V5 [ label = 1 ];
PA2-> V6 [ label = 0.9 ];
PA5-> V10 [ label = 0.7 ];
PA5-> V11 [ label = 0.7 ];
PA4-> V7 [ label = 0.4 ];
PA4-> V12 [ label = 0.8 ];
PA4-> V13 [ label = 0.6 ];
PA3-> V8 [ label = 0.4 ];
PA3-> V9 [ label = 0.8 ];
PA2 -> PA1 [ label = 0.7 , dir='both' ];
PA5 -> PA1 [ label = 0.7 , dir='both' ];
PA5 -> PA2 [ label = 0.6 , dir='both' ];
PA4 -> PA1 [ label = 0.6 , dir='both' ];
PA4 -> PA2 [ label = 0.5 , dir='both' ];
PA4 -> PA5 [ label = 0.6 , dir='both' ];
PA3 -> PA1 [ label = 0.5 , dir='both' ];
PA3 -> PA2 [ label = 0.4 , dir='both' ];
PA3 -> PA5 [ label = 0.6 , dir='both' ];
PA3 -> PA4 [ label = 0.5 , dir='both' ];
{ rank=same;
V1;V2;V3;V4;V5;V6;V7;V8;V9;V10;V11;V12;V13;}{ rank=same;
PA1;PA2;PA5;PA4;PA3;}}
"
)
gr2


I.7) Análisis Factorial Confirmatorio (AFC)

El AFC se caracteriza por permitir al investigador definir cuántos factores espera, qué factores están relacionados entre sí, y qué ítems están relacionados con cada factor (Kline 2013). Decidimos comparar los índices de ajuste de múltiples especificaciones. El estimador utilizado para el análisis factorial es el “WLSMV” (Mínimos cuadrados ponderados diagonalmente), el cual es robusto a anormalidad y es especialmente recomendado para variables ordinales que violan los supuestos de anormalidad multivariada, especialmente en muestras mayores a 200 (Li 2016).

  • Un primer modelo asume que los 13 ítems son explicados por una sola variable latente: salud mental
  • El segundo modelo identifica 5 factores en los 13 ítems: Agotamiento, estrés e irritabilidad, conformado por p3_siente_1, p3_siente_2, p3_siente_3 y p3_siente_4 (ej. En los últimos 7 días, ¿cuán a menudo me he sentido…? | Irritable.), Sueño, compuesto por p3_siente_5 y p3_siente_6 (ej. En los últimos 7 días, ¿cuán a menudo me he sentido…? | Con dificultades para descansar al dormir.), Estrés postraumático, que abarca a p4_afront_1 p4_afront_2 p4_afront_3 (ej., En la última semana y a consecuencia de la situación sanitaria, me he sentido… | Distante y desconectado de mi mismo y mi entorno.), Sintomatología Ansiosa, compuesta por p5_animo_1 y p5_animo_2 (ej. Señale con qué frecuencia ha experimentado las siguientes situaciones en los últimos 7 días | Me he sentido Nervioso, ansioso o con los nervios de punta.), y finalmente Sintomatología Depresiva, conformado por p5_animo_3 y p5_animo_4 (ej. Señale con qué frecuencia ha experimentado las siguientes situaciones en los últimos 7 días | He sentido falta de interés o poca satisfacción en hacer cosas.).
  • El tercer modelo se diferencia del anterior en que separa Agotamiento, estrés e irritabilidad en Agotamiento (p3_siente_1 y p3_siente_2) y Estrés e Irritabilidad (p3_siente_3 y p3_siente_4), conformando 6 factores en 13 ítems.
  • El cuarto modelo asume un solo factor que explicaría la varianza de 12 ítems (sin irritabilidad, En los últimos 7 días, ¿cuán a menudo me he sentido…? | Irritable.)
  • El quinto modelo es similar al propuesto de 5 factores, aunque sin el ítem relativo a irritabilidad, dejando la primera dimensión en Agotamiento y estrés solamente (p3_siente_4).


library(lavaan)  
library(semPlot)
library(semTools)
  # Latent variables
  
sm_1f_inicial_form <- "
sm =~  p3_siente_1+  p3_siente_2+  p3_siente_3+  p3_siente_4+ p3_siente_5+  p3_siente_6+ p4_afront_1+ p4_afront_2+  p4_afront_3+ p5_animo_1+  p5_animo_2+ p5_animo_3+  p5_animo_4
"
sm_5f_inicial_form <- "
agot_est_irr =~  p3_siente_1+  p3_siente_2+  p3_siente_3+  p3_siente_4  
sueno =~ p3_siente_5+  p3_siente_6
estres_post=~ p4_afront_1+ p4_afront_2+ p4_afront_3
sint_ans =~ p5_animo_1+  p5_animo_2
sint_dep=~ p5_animo_3+  p5_animo_4
"
sm_6f_inicial_form <- "
agot =~ p3_siente_1+  p3_siente_2
est_irr =~  p3_siente_3+  p3_siente_4  
sueno =~ p3_siente_5+  p3_siente_6
estres_post=~ p4_afront_1+ p4_afront_2+ p4_afront_3
sint_ans =~ p5_animo_1+  p5_animo_2
sint_dep=~ p5_animo_3+  p5_animo_4
"
sm_1f_sin_irr_form <- "
sm =~  p3_siente_1+  p3_siente_2+  p3_siente_3+ p3_siente_5+  p3_siente_6+ p4_afront_1+ p4_afront_2+  p4_afront_3+ p5_animo_1+  p5_animo_2+ p5_animo_3+  p5_animo_4
"
sm_5f_sin_irr_form <- "
agot_est =~ p3_siente_1+  p3_siente_2+ p3_siente_3
sueno =~ p3_siente_5+  p3_siente_6
estres_post =~ p4_afront_1+ p4_afront_2+ p4_afront_3
sint_ans =~ p5_animo_1+  p5_animo_2
sint_dep=~ p5_animo_3+  p5_animo_4
"

sm_1f_inicial<- lavaan::cfa(sm_1f_inicial_form, data = dim_sm_p345_original[complete.cases(dim_sm_p345_original),], ordered=names(dim_sm_p345_original), estimator= "WLSMV", warn = T)
sm_5f_inicial<- lavaan::cfa(sm_5f_inicial_form, data = dim_sm_p345_original[complete.cases(dim_sm_p345_original),], ordered=names(dim_sm_p345_original), estimator= "WLSMV", warn = T)
sm_6f_inicial<- lavaan::cfa(sm_6f_inicial_form, data = dim_sm_p345_original[complete.cases(dim_sm_p345_original),], ordered=names(dim_sm_p345_original), estimator= "WLSMV", warn = T)
sm_1f_sin_irr<- lavaan::cfa(sm_1f_sin_irr_form, data = dim_sm_p345_original[complete.cases(dim_sm_p345_original),], ordered=names(dim_sm_p345_original)[-4], estimator= "WLSMV", warn = T)
sm_5f_sin_irr<- lavaan::cfa(sm_5f_sin_irr_form, data = dim_sm_p345_original[complete.cases(dim_sm_p345_original),], ordered=names(dim_sm_p345_original)[-4], estimator= "WLSMV", warn = T)
data.table::data.table(cbind(modelos= c("1 factor, Salud Mental","5 factores", "6 factores", "1 factor, Salud Mental (sin 'Irritable')","5 factores (sin 'Irritable')"),rbind(ajusteAFC(sm_1f_inicial), 
                             ajusteAFC(sm_5f_inicial),
                             ajusteAFC(sm_6f_inicial),
                             ajusteAFC(sm_1f_sin_irr),
                             ajusteAFC(sm_5f_sin_irr)
                    )),keep.rownames = F) %>% 
  knitr::kable(.,format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
               caption = paste0("Tabla 7. Comparativo Índices de Ajuste de Modelos Propuestos para Preguntas de Salud Mental"),
               align =c('l',rep('c', 101)),
               col.names = c("Modelos","Código", "gl","WLS X2","CMIN/df","aGFI","GFI", "RMSEA\n[IC 90%]","CFit","CFI","NNFI")) %>%
      #kableExtra::row_spec(1, bold= T, color= "black", background= "white")%>%
  kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 12)
Tabla 7. Comparativo Índices de Ajuste de Modelos Propuestos para Preguntas de Salud Mental
Modelos Código gl WLS X2 CMIN/df aGFI GFI RMSEA [IC 90%] CFit CFI NNFI
1 factor, Salud Mental sm_1f_inicial 65 1042.080 16.032 0.967 0.983 0.148[0.140-0.156] 0.000 0.980 0.977
5 factores sm_5f_inicial 55 155.058 2.819 0.994 0.997 0.051[0.042-0.061] 0.390 0.998 0.997
6 factores sm_6f_inicial 50 127.492 2.550 0.995 0.998 0.047[0.037-0.058] 0.645 0.998 0.998
1 factor, Salud Mental (sin ‘Irritable’) sm_1f_sin_irr 54 922.274 17.079 0.964 0.982 0.153[0.144-0.162] 0.000 0.980 0.975
5 factores (sin ‘Irritable’) sm_5f_sin_irr 44 55.951 1.272 0.997 0.999 0.020[0.000-0.034] 1.000 1.000 1.000


A partir de lo observado en la Tabla 7, el ajuste mejore ostensiblemente en el modelo de 5 factores sin incorporar “irritabilidad.” De todas formas, los modelos que asumen 5 y 6 factores inicialmente también muestran un ajuste razonable en todos los índices. Atendiendo a la inquietud presentada en el análisis exploratorio, se presentan los índices de modificación al modelo de 6 factores, sin haber eliminado ítems. Se examinaron aquellos parámetros de modificación que presentaran un índice de modifcación (MI) mayor a 5 y cambios esperados del parámetro (Expected Parameter Change o SEPC) mayores a 0,2 (Whittaker 2012).


sm_5f_inicial_mi<-
  subset(lavaan::modindices(sm_5f_inicial)[order(lavaan::modindices(sm_5f_inicial)$mi, decreasing=TRUE), ], mi > 5 & abs(sepc.all)>0.2)%>%
  data.frame()%>%
  dplyr::mutate(lhs=paste0(lhs,op,rhs))%>%
  dplyr::mutate(mi=sprintf("%04.2f",mi))%>%
  dplyr::mutate(sepc.all=sprintf("%04.2f",sepc.all))%>%
  dplyr::select(lhs,mi,sepc.all)
  
  knitr::kable(sm_5f_inicial_mi,format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
               caption = paste0("Tabla 8. Índices de Modificación, Modelo de Tres Factores Inicial Preguntas de Salud Mental"),
               align =c('l',rep('c', 101)),
               col.names = c("Relación entre variables","Índice de Modificación", "Cambio esperado del parámetro Estandarizado (SEPC)"))%>%
    kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 12) %>%
    kableExtra::row_spec(which(grepl("p3_siente_4",sm_5f_inicial_mi$lhs)), bold= T, color= "white", background= "tomato")%>%
  kableExtra::add_footnote(c("Nota. En color rojo, parámetros a estudiar","=~ : efecto de una variable observada en una variable latente","~~: covarianza entre los errores de dos variables observadas"),
                            notation = "none")%>%
  kableExtra::scroll_box(width = "100%", height = "375px")
Tabla 8. Índices de Modificación, Modelo de Tres Factores Inicial Preguntas de Salud Mental
Relación entre variables Índice de Modificación Cambio esperado del parámetro Estandarizado (SEPC)
210 p3_siente_4~~p4_afront_3 71.00 0.72
144 estres_post=~p3_siente_4 63.57 0.75
168 sint_dep=~p4_afront_1 20.70 0.44
234 p4_afront_1~~p5_animo_3 18.39 0.32
154 sint_ans=~p3_siente_4 15.57 0.43
175 p3_siente_1~~p3_siente_4 15.13 -0.38
141 estres_post=~p3_siente_1 14.57 -0.39
174 p3_siente_1~~p3_siente_3 11.45 0.27
169 sint_dep=~p4_afront_2 10.77 -0.38
143 estres_post=~p3_siente_3 9.97 -0.32
180 p3_siente_1~~p4_afront_3 8.54 -0.31
151 sint_ans=~p3_siente_1 7.97 -0.30
161 sint_ans=~p5_animo_4 7.45 0.79
160 sint_ans=~p5_animo_3 7.45 -0.68
240 p4_afront_2~~p5_animo_4 6.09 -0.40
186 p3_siente_2~~p3_siente_4 5.25 -0.24
Nota. En color rojo, parámetros a estudiar
=~ : efecto de una variable observada en una variable latente
~~: covarianza entre los errores de dos variables observadas


Uno de los ítems con mayores índices de modificación y que aparece de manera más recurrente fue el p3_siente_4 (En los últimos 7 días, ¿cuán a menudo me he sentido…? | Irritable.), que resultó estar empíricamente vinculado a la variable latente estrés postraumático, principalmente debido a su importante covarianza con el ítem p3_siente_4 (En los últimos 7 días, ¿cuán a menudo me he sentido…? | Irritable.). De ahí que sea del todo razonable eliminar dicho ítem, quedándonos con el modelo de 5 factores.


#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_
#Para ver el número de parámetros
#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_

if(no_mostrar==1){
for (i in 2:100){
  ano<-i
  try(semPlot::semPaths(sm_5f_sin_irr, 
                  residuals=T, 
                  what="std", 
                  label.cex=1.5, 
                  edge.label.cex=1,
                  fade=FALSE,
                  thresholds = F,
                  edge.label.position=rep(.5,ano),
                  filetype="pdf",
                  filename=paste0("Número de parámetros ",ano),
                  intercepts=F)
    )
  }
}
#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_
#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_
semPlot::semPaths(sm_5f_sin_irr, 
                  residuals=T, 
                  what="std", 
                  label.cex=1.5, 
                  edge.label.cex=1,
                  fade=FALSE,
                  thresholds = F,
                  edge.label.position=c(rep(c(0.45,0.55),6),
                                        rep(c(0.45,0.55),6),rep(c(0.45,0.55),6),rep(0.5,5),
                                        rep(0.5,20)), #11  it, #17 #14 parámetros para las cargas
                  nodeLabels=c("p3_1","p3_2","p3_3","p3_5","p3_6",
                                           "p4_1","p4_2","p4_3",
                                           "p5_1","p5_2",
                                           "p5_3","p5_4","Agot","Sueño","PTSD","Sint.\nAns.", "Sint.\nDep."),
                  intercepts=F, 
                  curveAdjacent = TRUE,
                  title=F, 
                  layout="tree3",
                  sizeMan=5, 
                  gui = T, 
                  allVars = FALSE,
                  cut=1.1,
                  sizeLat=5, 
                  edge.color="black",
                  curvePivot=T,
                  borders=FALSE, 
                  edge.width = 0.5, 
                  node.width =1, 
                  node.height= 1,
                  label.scale=T,
                  curve = 1.5,
                  mar = c(5.8, 0.8, 7.8, 0.8))
Figura 5. Cargas factoriales estandarizadas y comunalidades para Salud Mental (solución de 5 factores, sin irritabilidad)

Figura 5. Cargas factoriales estandarizadas y comunalidades para Salud Mental (solución de 5 factores, sin irritabilidad)


#Cargas factoriales.
afc_lambda_std_sm<-
data.table::data.table(lavaan::lavInspect(sm_5f_sin_irr, what = "std", add.labels = TRUE)$`lambda`,keep.rownames = T) %>% 
  dplyr::left_join(cols_labels, by=c("rn"="V1")) %>% 
  dplyr::select(V2,everything()) %>% 
  dplyr::mutate(across(where(is.numeric), ~ round(.x, 2))) %>% 
  dplyr::mutate(across(where(is.numeric), ~ ifelse(.x==0,NA,.x))) 
for (i in 1:nrow(afc_lambda_std_sm)){
afc_lambda_std_sm$V2[i]<-stringr::str_wrap(afc_lambda_std_sm$V2[i], width = 40, indent = 0, exdent = 0)
}

#R cuadrado var latentes
afc_psi_std_sm<-
cbind.data.frame(V2=c("Agotamiento y Estrés", "Sueño", "Estrés Postraumático", "Sint. Ansiosa", "Sint. Depresiva"),
data.table::data.table(lavaan::lavInspect(sm_5f_sin_irr, what = "std", add.labels = TRUE)$psi,keep.rownames = T)) %>% 
  dplyr::mutate(across(where(is.numeric), ~ round(.x, 2))) %>% 
  dplyr::mutate(across(where(is.numeric), ~ ifelse(.x==1,NA,.x))) 

rbind.data.frame(afc_lambda_std_sm,
                 afc_psi_std_sm) %>% 
  knitr::kable(format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
               caption = paste0("Tabla 9. Cargas Factoriales y Covarianzas Variables Latentes"),
               align =c('l',rep('c', 101)),
               col.names = c("Ítem","Código", 
                             "Agotamiento y Estrés", "Sueño", "Estrés Postraumático", "Sint. Ansiosa", "Sint. Depresiva"))%>%
    kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 12) %>%
  kableExtra::pack_rows("Variables manifiestas", 1, 12) %>%
  kableExtra::pack_rows("Variables latentes", 13, 17) %>%
  kableExtra::add_footnote(c("Nota. "),
                            notation = "none")%>%
  kableExtra::scroll_box(width = "100%", height = "375px")
Tabla 9. Cargas Factoriales y Covarianzas Variables Latentes
Ítem Código Agotamiento y Estrés Sueño Estrés Postraumático Sint. Ansiosa Sint. Depresiva
Variables manifiestas
En los últimos 7 días, ¿cuán a menudo me he sentido…? | Agotado Físicamente. p3_siente_1 0.79
En los últimos 7 días, ¿cuán a menudo me he sentido…? | Agotado Emocionalmente. p3_siente_2 0.90
En los últimos 7 días, ¿cuán a menudo me he sentido…? | Estresado. p3_siente_3 0.89
En los últimos 7 días, ¿cuán a menudo me he sentido…? | Con dificultades para descansar al dormir. p3_siente_5 0.95
En los últimos 7 días, ¿cuán a menudo me he sentido…? | Con problemas para mantener el sueño al dormir. p3_siente_6 0.92
En la última semana y a consecuencia de la situación sanitaria, me he sentido… | Distante y desconectado de mi mismo y mi entorno. p4_afront_1 0.74
En la última semana y a consecuencia de la situación sanitaria, me he sentido… | Sobresaltado, “en guardia” o me alarmo fácilmente. p4_afront_2 0.87
En la última semana y a consecuencia de la situación sanitaria, me he sentido… | Irritable al punto de reaccionar bruscamente. p4_afront_3 0.82
Señale con qué frecuencia ha experimentado las siguientes situaciones en los últimos 7 días | Me he sentido Nervioso, ansioso o con los nervios de punta. p5_animo_1 0.90
Señale con qué frecuencia ha experimentado las siguientes situaciones en los últimos 7 días | No he podido dejar de preocuparme. p5_animo_2 0.84
Señale con qué frecuencia ha experimentado las siguientes situaciones en los últimos 7 días | He sentido falta de interés o poca satisfacción en hacer cosas. p5_animo_3 0.79
Señale con qué frecuencia ha experimentado las siguientes situaciones en los últimos 7 días | Me he sentido decaído, deprimido o desesperanzado. p5_animo_4 0.92
Variables latentes
Agotamiento y Estrés agot_est 0.72 0.78 0.84 0.79
Sueño sueno 0.72 0.66 0.70 0.62
Estrés Postraumático estres_post 0.78 0.66 0.87 0.80
Sint. Ansiosa sint_ans 0.84 0.70 0.87 0.80
Sint. Depresiva sint_dep 0.79 0.62 0.80 0.80
Nota.
#A factor with 2 variables is only considered reliable when the variables are highly correlated with each another (r > .70) but fairly uncorrelated with other variables. Yong, A. G., & Pearce, S. (2013, p. 80).


Considerando que existen factores en los que sólo se identifican 2 ítems y las altas covarianzas entre variables latentes, cabe discutir si existe un verdadero poder discriminante que permita identificar variables latentes a partir de sólo 2 ítems por dimensión (Yong and Pearce 2013). Por lo mismo, se utilizó el criterio HTMT (razón heterorazgo-monorrazgo) de las correlaciones, para explorar la validez discriminante de cada variable latente (Henseler, Ringle, and Sarstedt 2015).


# https://rdrr.io/cran/semTools/man/htmt.html
semTools::htmt(sm_5f_sin_irr_form, dim_sm_p345_original[,-4], sample.cov = NULL, missing = 'listwise', ordered = names(dim_sm_p345_original)[-4], absolute = TRUE)%>% 
  as.data.table(keep.rownames = T) %>% 
  dplyr::mutate(across(where(is.numeric), ~ round(.x, 2))) %>% 
  knitr::kable(format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
               caption = paste0("Tabla 10. Validez Discriminante"),
               align =c('l',rep('c', 101)),
               col.names = c("Var. Latentes","Agotamiento y Estrés", "Sueño", "Estrés Postraumático", "Sint. Ansiosa", "Sint. Depresiva"))%>%
    kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 12) %>%
  kableExtra::add_footnote(c("Nota. "),
                            notation = "none")%>%
  kableExtra::scroll_box(width = "100%", height = "375px")
Tabla 10. Validez Discriminante
Var. Latentes Agotamiento y Estrés Sueño Estrés Postraumático Sint. Ansiosa Sint. Depresiva
agot_est 1.00 0.72 0.77 0.83 0.79
sueno 0.72 1.00 0.66 0.70 0.62
estres_post 0.77 0.66 1.00 0.87 0.81
sint_ans 0.83 0.70 0.87 1.00 0.79
sint_dep 0.79 0.62 0.81 0.79 1.00
Nota.
#  Technically, the HTMT provides two advantages over the disattenuated construct score correlation: The HTMT does not require a factor analysis to obtain factor loadings, nor does it require the calculation of construct scores. This allows for determining the HTMT even if the raw data is not available, but the correlation matrix is. Furthermore, HTMT builds on the available measures and data and—contrary to the standard MTMM approach—does not require simultaneous surveying of the same theoretical concept with alternative measurement approaches. Therefore, this approach does not suffer from the standard MTMM approach’s well-known issues regarding data requirements and parallel measures (Schmitt 1978; Schmitt and Stults 1986).
# We suggest assessing the heterotrait-monotrait ratio (HTMT) of the correlations, which is the average of the heterotrait-heteromethod correlations (i.e., the correlations of indicators across constructs measuring different phenomena), relative to the average of the monotrait-heteromethod correlations 

#Use the HTMT criterion to assess discriminant validity! If the HTMT value is below 0.90, discriminant validity has been established between two reflective constructs. 


A partir de la tabla anterior, se observan índices menores a .85 en algunos casos, pero todos menores al umbral obligatorio de .90, lo cual permite afirmar evidencia a favor de variables latentes que se distinguen entre ellas.


cor_table <- residuals(sm_5f_inicial, type = "standardized")$cov

cor_table[lower.tri(cor_table)] <- NA # erase the upper triangle
diag(cor_table) <- NA # erase the diagonal 0's

 knitr::kable(cor_table,digits=2,format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
               caption = paste0("Tabla 9. Matriz de Residuos de Covarianzas, Modelo de Tres Factores Inicial DLS"),
               align =c('l',rep('c', 101)))%>%
kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 10) %>%
  kableExtra::scroll_box(width = "100%", height = "375px")
# covarianzas estandarizadas residuales de los ítems, las cuales, según Fernández Aráuz (2015), pueden ser entendidas como “el número de desviaciones estándar por el cual los residuos ajustados difieren de los residuos de valor cero que estarían asociados con un modelo de ajuste perfecto” (p. 58) y, por tanto, pueden generar que se subestime o sobreestime la relación entre los indicadores. Al revisar estos valores, se encontraron valores altos (> 2,56) 
 #  The exact threshold level of the HTMT is debatable; after all, “when is a correlation close to one”? Some authors suggest a threshold of 0.85 (Clark and Watson 1995; Kline 2011), whereas others propose a value of 0.90 (Gold et al. 2001; Teo et al. 2008). In the remainder of this paper, we use the notations HTMT.85 and HTMT.90 in order distinguish between these two absolute thresholds for the HTMT. Second, the HTMT can serve as the basis of a statistical discriminant validity test (which we will refer to as HTMTinference).
 
# Henseler, J., Ringle, C.M. & Sarstedt, M. A new criterion for assessing discriminant validity in variance-based structural equation modeling. J. of the Acad. Mark. Sci. 43, 115–135 (2015). https://doi.org/10.1007/s11747-014-0403-8
dim_sm_p345_original_sin_it34<-dim_sm_p345%>% dplyr::select(-p3_siente_4_num_sm)%>% na.omit()

alfa_dim_sm_despues_eliminacion_items<-psych::alpha(dim_sm_p345_original_sin_it34, use="complete.obs", n.obs=nrow(dim_sm_p345_original_sin_it34))

paste0("(alfa= ",round(alfa_dim_sm_despues_eliminacion_items$total$std.alpha,2),")")
## [1] "(alfa= 0.93)"

Una vez eliminado el ítem, se obtiene una consistencia interna similar (alfa= 0.93).


2) Preguntas sobre el entorno psicosocial del trabajo

Para el presente análisis, no se considerarán preguntas como referentes al grado de acuerdo en que las entidades están haciendo todo lo posible por proteger al personal, el cambio de labores, área o lugar físico producto de la pantemia, horas trabajadas, entre otros, debido al formato distinto de las preguntas, a su origen y orientación teórica más centrada específicamente en la situación del COVID-19.

  • Entre las preguntas concernientes a la percepción sobre su entorno de trabajo en términos de ambiente y cultura laboral, se encuentran los ítems p38_cond_trab_sal_psi (¿Cómo calificaría la salud psicológica de las personas con las que trabaja en su lugar de trabajo principal?) y p39_cond_trab_cult_org (¿Cuán de acuerdo está con la siguiente afirmación?: “La cultura de mi organización tolera comportamientos que perjudican la salud mental de los trabajadores.”). Cabe mencionar que la primera pregunta poee 5 alternativas de respuesta, mientras que
  • Por otra parte, entre las preguntas relacionadas directamente con riesgos psicosociales y cuyo origen radica directamente con instrumentos internacionales como el ISTAS o el COPSOQ, se encuentra la subdimensión Exigencias psicológicas cuantitativas (CU), que agruparía a los ítems p40_cond_trab_istas_01 (En su trabajo principal, usted: | ¿Tiene que trabajar muy rápido para entregar tareas solicitadas en poco tiempo?) y el ítem p40_cond_trab_istas_02 (En su trabajo principal, usted: | ¿Trabaja a un ritmo acelerado durante la jornada?) concerniente a la subdimiensión Work Pace/Ritmo de Trabajo (WP1) cuyo origen se encuentra en el instrumento COPSOQ y puede ser homologable a la subdimensión mencionada.
  • Por otra parte, está presente la Calidad de relación son superiores (RS), que agrupa a los ítems p40_cond_trab_istas_03 (En su trabajo principal, usted: | ¿Recibe toda la información que necesita para realizar bien su trabajo?), p40_cond_trab_istas_06 (En su trabajo principal: | Su superior directo, ¿está dispuesto a escuchar sus problemas en el trabajo?) y p40_cond_trab_istas_07 (En su trabajo principal: | ¿Recibe ayuda y apoyo de su superior directo?).
  • De igual manera, están presentes ítems correspondientes a la Calidad de relación con compañeros de trabajo (RC): p40_cond_trab_istas_08 (En su trabajo principal: | ¿Recibe ayuda y apoyo para el trabajo de sus compañeras o compañeros de trabajo?) y p40_cond_trab_istas_09 (En su trabajo principal: | ¿Hay un buen ambiente entre usted y sus compañeros y compañeras de trabajo?).
  • Otra dimensión alude al Conflicto de rol (CR) y los ítems de dicha dimensión que se encuentran presentes son p40_cond_trab_istas_04 (En su trabajo principal, usted: | ¿Se le exigen cosas contradictorias en el trabajo?) y p40_cond_trab_istas_05 (En su trabajo principal, usted: | ¿Tiene que hacer tareas que usted cree que deberían hacerse de otra manera?).
  • Finalmente, resulta difícil ubicar la posición conceptual entre los ítems concernientes a riesgos psicosociales laborales del ítem p40_cond_trab_istas_10 (En su trabajo principal: | ¿Recibe ayuda y apoyo de su familia/amigos fuera del lugar de trabajo?) tiene relación con apoyo externo al lugar de trabajo.


II.1) Normalidad Multivariada

#,starts_with("p4_afront"),starts_with("p5_animo")
scale2 <- function(x, na.rm = FALSE) (x - mean(x, na.rm = na.rm)) / sd(x, na.rm)

options(knitr.kable.NA = '')
dim_istas_p38_39<-surveymonkey_accionsalududp_df2_cor %>%dplyr::mutate_at(.vars=vars(c("p38_cond_trab_sal_psi","p39_cond_trab_cult_org")),.funs = list(`num_psico_a`=~scale2(as.numeric(.),na.rm=T))) %>% 
  dplyr::select(ends_with("num_psico_a")) 

MVN::mvn(dim_istas_p38_39[complete.cases(dim_istas_p38_39),], subset = NULL, mvnTest = "mardia", covariance = TRUE, tol = 1e-25, alpha = 0.5,scale = FALSE, desc = TRUE, transform = "none", R = 1000,univariateTest = "Lillie",univariatePlot = "none", multivariatePlot = "none",multivariateOutlierMethod = "none", bc = FALSE, bcType = "rounded",showOutliers = FALSE, showNewData = FALSE)$multivariateNormality%>%
  data.frame()%>%
  dplyr::mutate(across(c("Statistic","p.value"),~ifelse(grepl("NA",.),NA_real_,as.numeric(as.character(.)))))%>%
  dplyr::mutate(Statistic=sprintf("%8.2f",Statistic))%>%
  dplyr::mutate(p.value=sprintf("%5.3f",p.value))%>%
  dplyr::mutate(across(c("Statistic","p.value"),~ifelse(grepl("NA",.),"-",as.character(.))))%>%
   knitr::kable(.,format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
               caption = paste0("Tabla 10a. Normalidad Multivariada, Percepción de Ambiente y Cultura Laboral"),
               col.names = c("Prueba","Estadistico","Valor p","Normalidad"),
align =c('l',rep('c', 101)))%>%
    kableExtra::add_footnote(c("Nota. Mardia Skewness= Asimetría Multivariante de Mardia (1970); Mardia Kurtosis= Curtosis Multivariante de Mardia (1970); Las escalas fueron estandarizadas a valores Z"), notation = "none")%>%
  kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 13)
Tabla 10a. Normalidad Multivariada, Percepción de Ambiente y Cultura Laboral
Prueba Estadistico Valor p Normalidad
Mardia Skewness 16.40 0.003 NO
Mardia Kurtosis -2.16 0.031 NO
MVN
NO
Nota. Mardia Skewness= Asimetría Multivariante de Mardia (1970); Mardia Kurtosis= Curtosis Multivariante de Mardia (1970); Las escalas fueron estandarizadas a valores Z


A partir de la tabla anterior, se puede constatar que las respuestas no siguen una distribución normal.

#,starts_with("p4_afront"),starts_with("p5_animo")
options(knitr.kable.NA = '')
dim_istas_p40<-surveymonkey_accionsalududp_df2_cor %>%dplyr::mutate_at(.vars=vars(starts_with("p40_cond_trab_istas_")),.funs = list(`num_sm`=~as.numeric(.))) %>% 
  dplyr::select(ends_with("num_sm")) 

MVN::mvn(dim_istas_p40[complete.cases(dim_istas_p40),], subset = NULL, mvnTest = "mardia", covariance = TRUE, tol = 1e-25, alpha = 0.5,scale = FALSE, desc = TRUE, transform = "none", R = 1000,univariateTest = "Lillie",univariatePlot = "none", multivariatePlot = "none",multivariateOutlierMethod = "none", bc = FALSE, bcType = "rounded",showOutliers = FALSE, showNewData = FALSE)$multivariateNormality%>%
  data.frame()%>%
  dplyr::mutate(across(c("Statistic","p.value"),~ifelse(grepl("NA",.),NA_real_,as.numeric(as.character(.)))))%>%
  dplyr::mutate(Statistic=sprintf("%8.2f",Statistic))%>%
  dplyr::mutate(p.value=sprintf("%5.3f",p.value))%>%
  dplyr::mutate(across(c("Statistic","p.value"),~ifelse(grepl("NA",.),"-",as.character(.))))%>%
   knitr::kable(.,format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
               caption = paste0("Tabla 10b. Normalidad Multivariada Condiciones Psicosociales COPSOQ/ISTAS"),
               col.names = c("Prueba","Estadistico","Valor p","Normalidad"),
align =c('l',rep('c', 101)))%>%
    kableExtra::add_footnote(c("Nota. Mardia Skewness= Asimetría Multivariante de Mardia (1970); Mardia Kurtosis= Curtosis Multivariante de Mardia (1970)"), notation = "none")%>%
  kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 13)
Tabla 10b. Normalidad Multivariada Condiciones Psicosociales COPSOQ/ISTAS
Prueba Estadistico Valor p Normalidad
Mardia Skewness 1147.39 0.000 NO
Mardia Kurtosis 15.35 0.000 NO
MVN
NO
Nota. Mardia Skewness= Asimetría Multivariante de Mardia (1970); Mardia Kurtosis= Curtosis Multivariante de Mardia (1970)


De igual manera, las respuestas a los ítems a continuación no siguen una distribución normal.


II.2) Adecuación para el Análisis Factorial

A partir de la prueba de esfericidad se puede concluir que los datos son adecuados para el análisis factorial tanto para las preguntas sobre cultura y clima (X2 de Barlett (1,526)= 83.6, p<0.001), como para las preguntas sobre condiciones psicosociales (X2 de Barlett (45,526)= 2107.58, p<0.001) y el total de preguntas (X2 de Barlett (66,526)= 2443.07, p<0.001) (Barlett 1937).

#LOS ARGUMENTOS DEBEN SER NUMÉRICOS, NO PUEDEN SER ORDINALES
#_#_#_#_#_#_#_#_#_#_#_
cbind(Modelos=c("Preguntas sobre Percepción de Ambiente y Cultura Laboral","Preguntas sobre Condiciones Psicosociales COPSOQ/ISTAS", "Total preguntas de Condiciones Psicosociales"),
      KMO=c(round(psych::KMO(na.omit(dim_istas_p38_39))$MSA,2),
            round(psych::KMO(na.omit(dim_istas_p40))$MSA,2),
            round(psych::KMO(na.omit(cbind(dim_istas_p38_39,dim_istas_p40)))$MSA,2))
) %>% 
    knitr::kable(.,format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
                 caption = paste0("Tabla 11. Keyser-Meyer-Olkin"),
                 align =c('l',rep('c', 101)))%>%
    #kableExtra::add_footnote(c("Nota. Los ítems son")), notation = "none")%>%
    kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 13)  
Tabla 11. Keyser-Meyer-Olkin
Modelos KMO
Preguntas sobre Percepción de Ambiente y Cultura Laboral 0.5
Preguntas sobre Condiciones Psicosociales COPSOQ/ISTAS 0.75
Total preguntas de Condiciones Psicosociales 0.79
#el índice Kaiser Meyer Olkin (KMO), el cual toma valores entre 0 y 1. La medida puede ser interpretada con distintos lineamientos; sin embargo, los más utilizados son: valores menores de 0,5 se consideran inaceptables; de 0,5 a 0,59, pobres; de 0,6 a 0,79, regulares, y de 0,8 a 1, meritorios. Este índice toma el valor de 1 solo en el caso de que una variable sea perfectamente predicha.
# Méndez Martínez, Carolina, & Rondón Sepúlveda, Martín Alonso. (2012). Introducción al análisis factorial exploratorio. Revista Colombiana de Psiquiatría, 41(1), 197-207. Retrieved February 24, 2021, from http://www.scielo.org.co/scielo.php?script=sci_arttext&pid=S0034-74502012000100014&lng=en&tlng=es.

A partir de la medida obtenida, se constata que la adecuación para el análisis de las preguntas COPSOQ/ISTAS es bastante adecuada (KMO=.7), y si bien el par de preguntas concernientes a salud psicológica y cultura laboral obtuvieron una adecuación pobre, sí es aceptable para el análisis factorial.


II.3) Matriz de correlaciones Policóricas

Se generó una matriz de correlaciones heterogéneas con las preguntas correspondientes a salud psicológica, cultura organizacional


#<div style="border: 1px solid #ddd; padding: 5px; overflow-y: scroll; height:600px; overflow-x: scroll; width:100%;">

require(polycor)
#max-height:150%; overflow: scroll;
#Computes a heterogenous correlation matrix, consisting of Pearson product-moment correlations between numeric variables, polyserial correlations between numeric and ordinal variables, and polychoric correlations between ordinal variables.
dim_suseso_p38_39<-surveymonkey_accionsalududp_df2_cor%>%
  dplyr::mutate_at(.vars=vars(c(contains("p38_"),contains("p39_"))),.funs = list(`num_psicosoc`=~as.numeric(.))) %>% dplyr::select(ends_with("_num_psicosoc"))

dim_suseso_p38_p39_p40<-surveymonkey_accionsalududp_df2_cor%>%
  dplyr::mutate_at(.vars=vars(c(contains("p38_"),contains("p39_"),starts_with("p40_"))),.funs = list(`num_psicosoc`=~as.numeric(.))) %>% dplyr::select(ends_with("_num_psicosoc"))

dim_suseso_p38_p39_p40_original<-surveymonkey_accionsalududp_df2_cor %>% dplyr::select(c(contains("p38_"),contains("p39_"),starts_with("p40_")))

var_lbls_p38_p39_p40<-
  cbind.data.frame(vars=names(surveymonkey_accionsalududp_df2_cor)[grep("p40_|p38_|p39_", colnames(surveymonkey_accionsalududp_df2_cor))],
    label=attributes(surveymonkey_accionsalududp_df2_cor)$"variable.labels"[grep("p40_|p38_|p39_", colnames(surveymonkey_accionsalududp_df2_cor))])

dim_istas_p38_39_40_scaled<-
  surveymonkey_accionsalududp_df2_cor%>%
  dplyr::mutate_at(.vars=vars(c("p38_cond_trab_sal_psi","p39_cond_trab_cult_org",starts_with("p40_"))),.funs = list(`num_psico_a`=~scale2(as.numeric(.),na.rm=T))) %>% 
  dplyr::select(ends_with("num_psico_a")) %>% 
  dplyr::mutate_all(~factor(as.character(.)))


#hetcor_matp40<-hetcor(dim_suseso_p40_original, ML = T, std.err = T, use="complete.obs", bins=4, pd=TRUE)#
hetcor_matp40_2<-hetcor(dim_suseso_p38_p39_p40_original, ML = T, std.err = T, use="complete.obs", bins=4, pd=TRUE)#

hetcor_matp40_2_sc<-hetcor(dim_istas_p38_39_40_scaled, ML = T, std.err = T, use="complete.obs", bins=4, pd=TRUE)#

hetcor_matp40_3<-hetcor(na.omit(dim_suseso_p38_p39_p40_original)[,3:length(names(dim_suseso_p38_p39_p40_original))], ML = T, std.err = T, use="complete.obs", bins=4, pd=TRUE)#

# https://www.r-bloggers.com/2020/08/interactive-correlation-plot/

hetcor_matp40_2_df<-
reshape2::melt(tibble::as_tibble(hetcor_matp40_2$correlations,rownames = "rowname")) %>% 
    dplyr::left_join(melt(tibble::as_tibble(hetcor_matp40_2$tests,rownames = "rowname")),by=c("rowname","variable")) %>% 
  dplyr::rename("Var1"="rowname", "Var2"="variable", "corr"="value.x", "pval"="value.y") %>% 
  dplyr::mutate(Var1=factor(Var1, levels=var_lbls_p38_p39_p40$vars)) %>% 
  dplyr::mutate(Var2=factor(Var2, levels=var_lbls_p38_p39_p40$vars)) %>% 
  dplyr::left_join(var_lbls_p38_p39_p40, by=c("Var1"="vars")) %>% 
  dplyr::left_join(var_lbls_p38_p39_p40, by=c("Var2"="vars")) %>% 
  dplyr::rename("Var1_lab"="label.x", "Var2_lab"="label.y")

pd2 <- hetcor_matp40_2_df %>% 
  dplyr::mutate(data_id = paste0(Var1, '-', Var2),
         tooltip = paste0('Y: ',Var1_lab, '<br>', 'X: ',Var2_lab, '<br>Rho: ', round(as.numeric(corr), 2), 
                          '<br>p', ifelse(pval<.001,"<0.001",paste0("=",sprintf("%.4f",pval)))))

p2 <- ggplot(pd2) +
  geom_tile_interactive(aes(Var2,Var1, fill = corr,
                            tooltip = tooltip
                            ), color = "gray")  +
  scale_fill_gradient2(low = "#E46726", high = "#6D9EC1",
                       mid = "white", midpoint = 0, limit = c(-1, 1), space = "Lab",
                       name = "Corr") +
  geom_text(mapping = aes(x = Var1, y = Var2, label = round(corr, 2)), size = 2) +
  ggplot2::coord_fixed() +
  theme_minimal() +
  theme(axis.text.x = element_blank())+
  theme(axis.text.y = element_blank())+
  guides(fill = FALSE) +
  xlab("") + ylab("")
girafe(ggobj = p2)

Figura 6. Matriz de Correlaciones Policóricas de las Variables sobre Condiciones Psicosociales del Trabajo


A diferncia del primer gráfico utilizado para ver las matrices de correlaciones heterogéneas, se constata que hay algunos ítems que correlacionan de manera negativa unas con otros: cultura organizacional perjudicial para trabajadores, los ítems concernientes a conflicto de rol y los que se remiten a exigencias psicológicas cuantitativas. Por lo mismo, en los análisis posteriores se dará cuenta de esta orientación.


II.4) Confiabilidad

Generamos tablas de confiabilidad.


alfa_dim_psicosoc_p38_39_p40<-psych::alpha(dim_suseso_p38_p39_p40[complete.cases(dim_suseso_p38_p39_p40),],
                                        use="complete.obs",n.obs=nrow(dim_suseso_p38_p39_p40),check.keys=T)

var_lab_p38_39_40<- attributes(surveymonkey_accionsalududp_df2_cor)$"variable.labels"[c(grep("p38|p39|p40", colnames(surveymonkey_accionsalududp_df2_cor)))]

data.table(cbind.data.frame(var_lab_p38_39_40,alfa_dim_psicosoc_p38_39_p40$alpha.drop),
           keep.rownames = T)%>%
    dplyr::mutate(var_lab_p38_39_40=dplyr::case_when(grepl("-$",rn)~paste0(var_lab_p38_39_40," (REVERTIDO)"),
                                                     T~var_lab_p38_39_40)) %>% 
    dplyr::select(var_lab_p38_39_40, raw_alpha, std.alpha,`G6(smc)`)%>%
    dplyr::mutate_at(vars(raw_alpha, std.alpha,`G6(smc)`),~round(.,2)) %>% 
   knitr::kable(.,format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
               caption = paste0("Tabla 12a. Alfa si se elimina un ítem Condiciones psicosociales",paste0("(alfa= ",round(alfa_dim_psicosoc_p38_39_p40$total$std.alpha,2),", SMC= ",round(alfa_dim_psicosoc_p38_39_p40$total$`G6(smc`,2),")")),
               col.names = c("Ítem","Alfa Bruto","Alfa Est.","SMC"),
align =c('l',rep('c', 101)))%>%
    kableExtra::add_footnote(c("Nota. SMC= Correlaciones Múltiples al Cuadrado"), notation = "none")%>%
  kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 12)
Tabla 12a. Alfa si se elimina un ítem Condiciones psicosociales(alfa= 0.83, SMC= 0.86)
Ítem Alfa Bruto Alfa Est. SMC
¿Cómo calificaría la salud psicológica de las personas con las que trabaja en su lugar de trabajo principal? 0.81 0.81 0.85
¿Cuán de acuerdo está con la siguiente afirmación?: “La cultura de mi organización tolera comportamientos que perjudican la salud mental de los trabajadores.” (REVERTIDO) 0.81 0.81 0.86
En su trabajo principal, usted: | ¿Tiene que trabajar muy rápido para entregar tareas solicitadas en poco tiempo? (REVERTIDO) 0.81 0.82 0.84
En su trabajo principal, usted: | ¿Trabaja a un ritmo acelerado durante la jornada? (REVERTIDO) 0.81 0.82 0.84
En su trabajo principal, usted: | ¿Recibe toda la información que necesita para realizar bien su trabajo? 0.81 0.81 0.85
En su trabajo principal, usted: | ¿Se le exigen cosas contradictorias en el trabajo? (REVERTIDO) 0.80 0.80 0.85
En su trabajo principal, usted: | ¿Tiene que hacer tareas que usted cree que deberían hacerse de otra manera? (REVERTIDO) 0.80 0.81 0.85
En su trabajo principal: | Su superior directo, ¿está dispuesto a escuchar sus problemas en el trabajo? 0.80 0.81 0.84
En su trabajo principal: | ¿Recibe ayuda y apoyo de su superior directo? 0.80 0.80 0.83
En su trabajo principal: | ¿Recibe ayuda y apoyo para el trabajo de sus compañeras o compañeros de trabajo? 0.81 0.81 0.85
En su trabajo principal: | ¿Hay un buen ambiente entre usted y sus compañeros y compañeras de trabajo? 0.81 0.81 0.85
En su trabajo principal: | ¿Recibe ayuda y apoyo de su familia/amigos fuera del lugar de trabajo? 0.84 0.84 0.87
Nota. SMC= Correlaciones Múltiples al Cuadrado

A partir de la observación de alfa estandarizado, se observa un nivel de confiabilidad aceptable, observando un ítem (p40_cond_trab_istas_10, En su trabajo principal: | ¿Recibe ayuda y apoyo de su familia/amigos fuera del lugar de trabajo?) cuya eliminación pudiese implicar una mejora en la consistencia. Adicionalmente, se efectuó un análisis de la consistencia teniendo en cuenta la naturaleza ordinal de las variables.

#Contreras Espinoza S, Novoa-Muñoz F. Ventajas del alfa ordinal respecto al alfa de Cronbach ilustradas con la encuesta AUDIT-OMS. Rev Panam Salud Publica. 2018;42:e65. https://doi.org/10.26633/ RPSP.2018.65

alfa_ord_psicosoc<-alpha(hetcor_matp40_2$correlations,#polychoric(data.matrix(dim_sm_p345_original))$rho,
                   use="complete.obs",
                   n.iter= clus_iter,
                   check.keys=T,
                   n.obs=nrow(dim_suseso_p38_p39_p40[complete.cases(dim_suseso_p38_p39_p40),])
)

numeric_alfa_ord_psicosoc<-
  scan(text = as.character(capture.output(print(alfa_ord_psicosoc))[11]), what = " ") %>% 
  readr::parse_number()

data.table(cbind.data.frame(var_lab_p38_39_40,
                            alfa_ord_psicosoc$alpha.drop),
           keep.rownames = T)%>%
        dplyr::mutate(var_lab_p38_39_40=dplyr::case_when(grepl("-$",rn)~paste0(var_lab_p38_39_40," (REVERTIDO)"),
                                                     T~var_lab_p38_39_40)) %>% 
  dplyr::select(var_lab_p38_39_40, raw_alpha, std.alpha)%>%
  dplyr::mutate_at(vars(raw_alpha, std.alpha),~round(.,2)) %>% 
  knitr::kable(.,format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
               caption = paste0("Tabla 12b. Alfa si se elimina un ítem Condiciones psicosociales",
                                paste0("(alfa ordinal= ",round(alfa_ord_psicosoc$total$std.alpha,2),", SMC= ",round(alfa_ord_psicosoc$total$`G6(smc`,2),")")),
               col.names = c("Ítem","Alfa Ordinal Bruto","Alfa Ordinal Est."),
               align =c('l',rep('c', 101)))%>%
  kableExtra::add_footnote(c("Nota. SMC= Correlaciones Múltiples al Cuadrado"), notation = "none")%>%
  kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 11)
Tabla 12b. Alfa si se elimina un ítem Condiciones psicosociales(alfa ordinal= 0.86, SMC= 0.9)
Ítem Alfa Ordinal Bruto Alfa Ordinal Est.
¿Cómo calificaría la salud psicológica de las personas con las que trabaja en su lugar de trabajo principal? 0.85 0.85
¿Cuán de acuerdo está con la siguiente afirmación?: “La cultura de mi organización tolera comportamientos que perjudican la salud mental de los trabajadores.” (REVERTIDO) 0.85 0.85
En su trabajo principal, usted: | ¿Tiene que trabajar muy rápido para entregar tareas solicitadas en poco tiempo? (REVERTIDO) 0.85 0.85
En su trabajo principal, usted: | ¿Trabaja a un ritmo acelerado durante la jornada? (REVERTIDO) 0.86 0.86
En su trabajo principal, usted: | ¿Recibe toda la información que necesita para realizar bien su trabajo? 0.85 0.85
En su trabajo principal, usted: | ¿Se le exigen cosas contradictorias en el trabajo? (REVERTIDO) 0.84 0.84
En su trabajo principal, usted: | ¿Tiene que hacer tareas que usted cree que deberían hacerse de otra manera? (REVERTIDO) 0.84 0.84
En su trabajo principal: | Su superior directo, ¿está dispuesto a escuchar sus problemas en el trabajo? 0.85 0.85
En su trabajo principal: | ¿Recibe ayuda y apoyo de su superior directo? 0.84 0.84
En su trabajo principal: | ¿Recibe ayuda y apoyo para el trabajo de sus compañeras o compañeros de trabajo? 0.85 0.85
En su trabajo principal: | ¿Hay un buen ambiente entre usted y sus compañeros y compañeras de trabajo? 0.85 0.85
En su trabajo principal: | ¿Recibe ayuda y apoyo de su familia/amigos fuera del lugar de trabajo? 0.87 0.87
Nota. SMC= Correlaciones Múltiples al Cuadrado
#correlación despreciable: r < |0.1|
#correlación baja: |0.1| < r <= |0.3|
#correlación mediana : |0.3| < r <= |0.5|
#correlación fuerte o alta: r > |0.5|

A partir de la Tabla anterior, se estimaron intervalos de confianza mediante el remuestreo de 5000 iteraciones, obteniéndose una confiabilidad alta (a= 0.86,IC 95% 0.84; 0.88).


II.5) Unidimensionalidad


dim_istas_p38_39<-surveymonkey_accionsalududp_df2_cor%>%
  dplyr::mutate_at(.vars=vars(c("p38_cond_trab_sal_psi","p39_cond_trab_cult_org")),.funs = list(`num_psico_a`=~scale2(as.numeric(.),na.rm=T))) %>% 
  dplyr::select(ends_with("num_psico_a")) 
dim_istas_p40<-surveymonkey_accionsalududp_df2_cor%>%
  dplyr::mutate_at(.vars=vars(starts_with("p40_")),
  .funs = list(`num_psico_b`=~scale2(as.numeric(.),na.rm=T))) %>% 
  dplyr::select(ends_with("num_psico_b")) 
dim_istas_p38_39_40<-surveymonkey_accionsalududp_df2_cor%>%
  dplyr::mutate_at(.vars=vars(c("p38_cond_trab_sal_psi","p39_cond_trab_cult_org"),starts_with("p40_")),.funs = list(`num_psico_c`=~scale2(as.numeric(.),na.rm=T))) %>% 
  dplyr::select(ends_with("num_psico_c")) 

keys.list_istas <- list(clim_cul=c("p38_cond_trab_sal_psi_num_psicosoc","p39_cond_trab_cult_org_num_psicosoc"),
                     istas=c("p40_cond_trab_istas_01_num_psicosoc", 
                              "p40_cond_trab_istas_02_num_psicosoc",
                              "p40_cond_trab_istas_03_num_psicosoc",
                              "p40_cond_trab_istas_04_num_psicosoc",
                              "p40_cond_trab_istas_05_num_psicosoc",
                              "p40_cond_trab_istas_06_num_psicosoc",
                              "p40_cond_trab_istas_07_num_psicosoc",
                              "p40_cond_trab_istas_08_num_psicosoc",
                              "p40_cond_trab_istas_09_num_psicosoc",
                              "p40_cond_trab_istas_10_num_psicosoc")
                     )

cbind.data.frame(Modelos=c("Clima y Cultura","Condiciones Psicosociales ISTAS","Total Ítems Cond. Psicosociales"),
                 rbind(
                     psych::unidim(dim_istas_p38_39,cor= "poly", check.keys = T)$uni,
                     psych::unidim(dim_sm_p4,cor= "poly", check.keys = T)$uni,
                     psych::unidim(dim_suseso_p38_p39_p40,cor= "poly", check.keys = T)$uni
                 )
)%>% 
  dplyr::select(`Modelos`,`u`,`Unidim.A`,`alpha`,`av.r`,`median.r`) %>% 
  dplyr::mutate_if(is.numeric, round, 2) %>% 
   knitr::kable(.,format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
               caption = paste0("Tabla 13. Unidimensionalidad, Condiciones Psicosociales"),
               col.names = c("Modelos","Undimiensionalidad Cruda","Unidimensionalidad Ajustada","Alfa estandarizado","Promedio de la Correlación entre ítems (ICC)", "Mediana de la correlación entre ítems (ICC)"),
align =c('l',rep('c', 101)))%>%
    #kableExtra::add_footnote(c("Nota. Los ítems son")), notation = "none")%>%
  kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 13)  
Tabla 13. Unidimensionalidad, Condiciones Psicosociales
Modelos Undimiensionalidad Cruda Unidimensionalidad Ajustada Alfa estandarizado Promedio de la Correlación entre ítems (ICC) Mediana de la correlación entre ítems (ICC)
Clima y Cultura 1.00 1 0.24 0.14 0.14
Condiciones Psicosociales ISTAS 0.99 1 0.84 0.64 0.61
Total Ítems Cond. Psicosociales 0.70 1 0.86 0.33 0.34
# When finding pairwise correlations, should we use the global values of the tau parameter (which is somewhat faster), or the local values (global=FALSE)? The local option is equivalent to the polycor solution, or to doing one correlation at a time. global=TRUE borrows information for one item pair from the other pairs using those item's frequencies. This will make a difference in the presence of lots of missing data. With very small sample sizes with global=FALSE and correct=TRUE, the function will fail (for as yet underdetermined reasons.

##Koo and Li (2016) gives the following suggestion for interpreting ICC (Koo and Li 2016):
#below 0.50: poor
#between 0.50 and 0.75: moderate
#between 0.75 and 0.90: good
#above 0.90: excellent

A partir de la tabla anterior, se puede observar que sólo el conjunto de las condiciones psicosociales cuyo origen remite a instrumentos como el ISTAS o COPSOQ obtienen un ajuste aceptable aunque moderado.


II.6) Análisis Factorial Exploratorio (AFE)

Para el presente modelo que asume observaciones completas en variables sobre condiciones psicosociales, se estiman 526 casos. En vista de que tenemos 5 dimensiones capturadas y 12 ítems en total, concernientes a Ambiente y cultura laboral, Exigencias psicológicas cuantitativas (CU), Calidad de relación son superiores (RS), Calidad de relación con compañeros de trabajo (RC) y Conflicto de rol (CR), decidimos generar estructuras factoriales competidoras que asumen de 1 a 6 factores latentes.


#Each of the procedures has its advantages and disadvantages. Using either the chi square test or the change in square test is, of course, sensitive to the number of subjects and leads to the nonsensical condition that if one wants to find many factors, one simply runs more subjects. Parallel analysis is partially sensitive to sample size in that for large samples the eigen values of random factors will be very small. The scree test is quite appealling but can lead to differences of interpretation as to when the scree "breaks". The eigen value of 1 rule, although the default for many programs, seems to be a rough way of dividing the number of variables by 3. Extracting interpretable factors means that the number of factors reflects the investigators creativity more than the data. VSS, while very simple to understand, will not work very well if the data are very factorially complex. (Simulations suggests it will work fine if the complexities of some of the items are no more than 2).

vss(hetcor_matp40_2$correlations, n=6,n.obs=nrow(na.omit(dim_suseso_p38_p39_p40_original)), use="complete cases", rotate="oblimin", cor= "poly", fm="pa", plot=F)
## Warning in fa.stats(r = r, f = f, phi = phi, n.obs = n.obs, np.obs = np.obs, :
## The estimated weights for the factor scores are probably incorrect. Try a
## different factor score estimation method.
## Warning in fac(r = r, nfactors = nfactors, n.obs = n.obs, rotate = rotate, : An
## ultra-Heywood case was detected. Examine the results carefully
## Warning in fa.stats(r = r, f = f, phi = phi, n.obs = n.obs, np.obs = np.obs, :
## The estimated weights for the factor scores are probably incorrect. Try a
## different factor score estimation method.
## Warning in fac(r = r, nfactors = nfactors, n.obs = n.obs, rotate = rotate, : An
## ultra-Heywood case was detected. Examine the results carefully
## 
## Very Simple Structure
## Call: vss(x = hetcor_matp40_2$correlations, n = 6, rotate = "oblimin", 
##     fm = "pa", n.obs = nrow(na.omit(dim_suseso_p38_p39_p40_original)), 
##     plot = F, use = "complete cases", cor = "poly")
## VSS complexity 1 achieves a maximimum of 0.76  with  1  factors
## VSS complexity 2 achieves a maximimum of 0.81  with  2  factors
## 
## The Velicer MAP achieves a minimum of 0.05  with  2  factors 
## BIC achieves a minimum of  -39.16  with  5  factors
## Sample Size adjusted BIC achieves a minimum of  9.67  with  6  factors
## 
## Statistics by number of factors 
##   vss1 vss2   map dof chisq     prob sqresid  fit RMSEA  BIC  SABIC complex
## 1 0.76 0.00 0.062  54  1615 2.0e-302     7.6 0.76 0.234 1277 1448.1     1.0
## 2 0.66 0.81 0.055  43   767 2.6e-133     5.9 0.81 0.179  497  634.0     1.2
## 3 0.53 0.67 0.070  33   404  2.5e-65     8.5 0.73 0.146  197  301.7     1.4
## 4 0.51 0.61 0.074  24   114  1.0e-13    11.1 0.64 0.085  -36   40.0     1.3
## 5 0.47 0.56 0.104  16    61  3.4e-07    12.3 0.60 0.073  -39   11.6     1.3
## 6 0.47 0.53 0.108   9    37  2.2e-05    12.4 0.60 0.078  -19    9.7     1.5
##   eChisq  SRMR eCRMS eBIC
## 1 1257.1 0.135 0.149  919
## 2  280.8 0.064 0.079   11
## 3  129.2 0.043 0.061  -78
## 4   36.1 0.023 0.038 -114
## 5   11.7 0.013 0.026  -89
## 6    8.5 0.011 0.030  -48
vss(hetcor_matp40_2$correlations, n=6,n.obs=nrow(na.omit(dim_suseso_p38_p39_p40_original)), use="complete cases", rotate="oblimin",cor= "poly", fm="pa", plot=T,title="Estructura Muy Simple, \nFactrización de Eje Principales, Rotación Oblicua")
## Warning in fa.stats(r = r, f = f, phi = phi, n.obs = n.obs, np.obs = np.obs, :
## The estimated weights for the factor scores are probably incorrect. Try a
## different factor score estimation method.

## Warning in fa.stats(r = r, f = f, phi = phi, n.obs = n.obs, np.obs = np.obs, :
## An ultra-Heywood case was detected. Examine the results carefully
## Warning in fa.stats(r = r, f = f, phi = phi, n.obs = n.obs, np.obs = np.obs, :
## The estimated weights for the factor scores are probably incorrect. Try a
## different factor score estimation method.
## Warning in fac(r = r, nfactors = nfactors, n.obs = n.obs, rotate = rotate, : An
## ultra-Heywood case was detected. Examine the results carefully
Figura 7. Estructura Simple Matriz Policórica, Preguntas sobre Riesgos Psicosociales

Figura 7. Estructura Simple Matriz Policórica, Preguntas sobre Riesgos Psicosociales

## 
## Very Simple Structure of  Estructura Muy Simple, 
## Factrización de Eje Principales, Rotación Oblicua 
## Call: vss(x = hetcor_matp40_2$correlations, n = 6, rotate = "oblimin", 
##     fm = "pa", n.obs = nrow(na.omit(dim_suseso_p38_p39_p40_original)), 
##     plot = T, title = "Estructura Muy Simple, \nFactrización de Eje Principales, Rotación Oblicua", 
##     use = "complete cases", cor = "poly")
## VSS complexity 1 achieves a maximimum of 0.76  with  1  factors
## VSS complexity 2 achieves a maximimum of 0.81  with  2  factors
## 
## The Velicer MAP achieves a minimum of 0.05  with  2  factors 
## BIC achieves a minimum of  -39.16  with  5  factors
## Sample Size adjusted BIC achieves a minimum of  9.67  with  6  factors
## 
## Statistics by number of factors 
##   vss1 vss2   map dof chisq     prob sqresid  fit RMSEA  BIC  SABIC complex
## 1 0.76 0.00 0.062  54  1615 2.0e-302     7.6 0.76 0.234 1277 1448.1     1.0
## 2 0.66 0.81 0.055  43   767 2.6e-133     5.9 0.81 0.179  497  634.0     1.2
## 3 0.53 0.67 0.070  33   404  2.5e-65     8.5 0.73 0.146  197  301.7     1.4
## 4 0.51 0.61 0.074  24   114  1.0e-13    11.1 0.64 0.085  -36   40.0     1.3
## 5 0.47 0.56 0.104  16    61  3.4e-07    12.3 0.60 0.073  -39   11.6     1.3
## 6 0.47 0.53 0.108   9    37  2.2e-05    12.4 0.60 0.078  -19    9.7     1.5
##   eChisq  SRMR eCRMS eBIC
## 1 1257.1 0.135 0.149  919
## 2  280.8 0.064 0.079   11
## 3  129.2 0.043 0.061  -78
## 4   36.1 0.023 0.038 -114
## 5   11.7 0.013 0.026  -89
## 6    8.5 0.011 0.030  -48
invisible(c("Haciéndolo con todos los datos estandarizados"))
#vss(data.matrix(dim_sm_p345_original) %>%  standardize(), n=6,n.obs=nrow(dim_sm_p345_original[complete.cases(dim_sm_p345_original),]), use="complete cases", rotate="oblimin",cor= "poly", fm="pa", plot=T,title="Estructura Muy Simple, \nFactrización de Eje Principales, Rotación Oblicua")

invisible(c("Haciéndolo con todos la matriz policórica obtenida por el paquete hetcor"))
#vss(hetcor_mat$correlations, n=6,n.obs=nrow(dim_sm_p345_original[complete.cases(dim_sm_p345_original),]), use="complete cases", fm="pa", plot=T,title="Estructura Muy Simple, \nFactrización de Eje Principales, Rotación Oblicua")


#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_
#FUENTES:

# https://stats.stackexchange.com/questions/32669/vss-criterion-for-the-number-of-factors-in-rs-psych-package
# http://search.r-project.org/R/library/psych/html/VSS.html
# https://it.unt.edu/sites/default/files/vss_l_jds_dec2014.pdf
# http://dwoll.de/rexrepos/posts/multFApoly.html
#n is the maximum number of factors to extract  (default is 8)
#rotate is a string "none" or "varimax" for type of rotation (default is "none"
#:#:#:#:#:#:
#How to find the correlations: "cor" is Pearson", "cov" is covariance, "tet" is tetrachoric, "poly" is polychoric, "mixed" uses mixed cor for a mixture of tetrachorics, polychorics, Pearsons, biserials, and polyserials, Yuleb is Yulebonett, Yuleq and YuleY are the obvious Yule coefficients as appropriate

# It will produce normal factor analysis output but also will save the polychoric matrix (rho) and items difficulties (tau) for subsequent irt analyses.

#FUENTES
## http://www.psicothema.com/pdf/4206.pdf


VSS.scree(hetcor_matp40_2$correlations, main="")
Figura 8. Gráfico de Codo de Catell, Matriz Policórica Preguntas sobre Condiciones Psicosociales

Figura 8. Gráfico de Codo de Catell, Matriz Policórica Preguntas sobre Condiciones Psicosociales

#Es tal vez la técnica más utilizada. El aporte se mide con los valores propios, que representan el total de varianza explicada por el factor. El criterio utilizado para su uso se basa en tomar para el análisis solo aquellos factores que tengan valores propios mayores a 1
# Al igual que en el criterio anterior, depende de los valores propios, pero se diferencia porque los valores son graficados y se hace un análisis visual buscando en la curva un punto de inflexión donde esta cambie de sentido o de concavidad. Un problema que puede llegar a presentar es ser muy subjetivo y, por lo tanto, depender básicamente del criterio del investigador. No se recomienda cuando el número de variables en análisis es muy alto y la contribución de los nuevos ítems es similar 

# Méndez Martínez, Carolina, & Rondón Sepúlveda, Martín Alonso. (2012). Introducción al análisis factorial exploratorio. Revista Colombiana de Psiquiatría, 41(1), 197-207. Retrieved February 24, 2021, from http://www.scielo.org.co/scielo.php?script=sci_arttext&pid=S0034-74502012000100014&lng=en&tlng=es.

A partir del gráfico de codos, se puede interpretar que el número óptimo de factores con valores propios superiores a 1, sería igual a 3.


# Presaghi, Fabio & Desimoni, Marta. (2015). Title A Parallel Analysis With Polychoric Correlation Matrices. 10.13140/RG.2.1.4380.2640. 

random.polychor.pa(data.matrix=data.matrix(dim_suseso_p38_p39_p40_original), nrep=500, q.eigen=0.99, r.seed=1234)
## ***** RESULTS FOR PARALLEL ANALYSIS ***** 
## *** computation starts at: 17:26:01 
## *** number of units (rows) in data.matrix: 875 
## *** LISTWISE deletion needed. The new sample size is: 526 
## *** SINGLE sample Parallel Analysis 
## *** simulation method: RANDOM 
## *** distribution: UNIFORM 
## *** difficulty factor: FALSE 
## *** correction for continuity set to: 0.0 
## *** number of variables (cols) in data.matrix: 12 
## *** Groups of items with diffent number of categories found in your data.matrix: 
##         Items Categories Min.Cat Max.Cat
## 1 GROUP     1          4       1       4
## 2 GROUP    11          5       1       5
## 
## Computations for sub-sample:  1 
##  The first simulation for FA took: 0.659 secs.
## 25 % - 50 % - 75 % - 100 % completed!
##  The first simulation for PCA took: 0.6 secs.
## 25 % - 50 % - 75 % - 100 % completed!
## computation ended at: 17:36:32 
## Elapsed Time: 11 mins 
## 
##  Comparison between RANDOM eigenvalues and EMPIRICAL eigenvalues 
## 
## ******* RESULTS for PARALLEL ANALYSIS:  
##                                                                  sample.1
## # of factors (PCA) for Velicer MAP criterium (Pearson corr)...:         2
## # of factors (PCA) for Velicer MAP(4th power)(Polychoric corr):         2
## # of factors (PCA) for Velicer MAP criterium (Polychoric corr):         2
## # of factors (PCA) for Velicer MAP(4th power)(Pearson corr)...:         2
## # of factors (PCA) for PA method (Polychoric Corr.)...........:         5
## # of factors (PCA) for PA method (Pearson Corr.)..............:         5
## # of factors for PA method (Polychoric Corr.).................:         5
## # of factors for PA method (Pearson Corr.)....................:         5
Figura 9. Gráfico de Codo, Matriz Policórica Preguntas de Condiciones Psicosociales

Figura 9. Gráfico de Codo, Matriz Policórica Preguntas de Condiciones Psicosociales

#This means that the function guarantees that the empirical and the simulated data matrix are similar, but this also means that by changing the sample of participants the simulated data will change (even if slightly).

#The function will extract the eigenvalues from each randomly generated polychoric matrices and the requested percentile is returned. Eigenvalues from polychoric correlation matrix obtained from real data is also compute and compared, in a (scree) plot, with the eigenvalues extracted from the simulation (Polychoric matrices). Recently, Cho, Li & Bandalos (2009) showed that, in using PA method, it is important to match the type of the correlation matrix used to recover the eigenvalues from real data with the type of correlation matrix used to estimate random eigenvalues. Crossing the type of correlations (using Polychoric correlation matrix to estimate real eigenvalues and random simulated Pearson correlation matrices) may result in a wrong decision (i.e., retaining more non-random factors than the needed). A comparison with eigenvalues extracted from both randomly simulated Pearson correlation matrices and real data is also included. Finally, for both type of correlation matrix (Polychoric vs Pearson), the two versions (the classic squared coefficient and the 4th power coefficient) of Velicer's MAP criterion are calculated (Velicer, 1976; Velicer, Eaton, & Fava, 2000) by implementing under R the code released by O'Connor (2000) for SPSS, SAS and MATLAB. As the poly.mat() function used to calculate the polychoric correlation matrix is going to be deprecated in favour of polychoric() function, the random.polychor.pa was consequently updated (version 1.1.2) to account for changes in psych() package.

#FUENTE:
### https://www.rdocumentation.org/packages/random.polychor.pa/versions/1.1.3.1/topics/random.polychor.pa
### https://stats.stackexchange.com/questions/31948/looking-for-a-step-through-an-example-of-a-factor-analysis-on-dichotomous-data

#:#:#::#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:
invisible("IMPORTANTE PENSAR QUE NO SE SI LA CORRECCIÖN DE CONTINUIDAD QUE USA HETCOR VALE CONSERVARLA")
#https://stackoverflow.com/questions/59167406/hetcor-can-one-add-a-correction-for-continuity
#https://stackoverflow.com/questions/59167406/hetcor-can-one-add-a-correction-for-continuity

#The continuity parameter is passed to polychoric() function to handle the correction for continuity. In polychoric() function this correction for continuity is set by default to .5 (i.e. correct=TRUE). However in some cases this correction for continuity causes the polychorich() function to stop unexpectedly and consequently also random.polychor.pa() stops. So we added this parameter to allow users to bypass this problem. This parameter is set by default to 0.0 (i.e., no correction for continuity applied) and user may add the correction for continuity by setting the value to 0.5.

#random.polychor.pa(data.matrix=data.matrix(dim_sm_p345), nrep=500, q.eigen=0.99, r.seed=1234,continuity=0.5)

#this parameter allows to choose between uniform (that is also the default) or multinomial distribution for the simulation of random data sets.

A partir del parallel analysis, se obtienen 2 y 5 variables latentes.


library(psych)
library(GPArotation)
library(dplyr)
library(plyr)
library(knitr)

efas <- list()

for (i in 1:10) {
    fitn <- psych::fa(hetcor_matp40_2$correlations,
                      nfactors= i, 
                      cor= "poly", 
                      fm= "pa", 
                      use="complete.obs", 
                      n.obs= nrow(data.frame(na.omit(dim_suseso_p38_p39_p40_original))),
                      #n.iter=500, 
                      rotate="oblimin")
    efas[[i]] <- data.frame(fitn$TLI, fitn$RMSEA[1], fitn$RMSEA[2], fitn$RMSEA[3], fitn$rms, fitn$BIC) %>% 
        mutate(Factors = i,
               RMSEA_ci = paste0(round(fitn.RMSEA.2.,2),", ",round(fitn.RMSEA.3.,2))) %>% 
        dplyr::rename(TLI = fitn.TLI,
                      RMSEA = fitn.RMSEA.1.,
                      "RMSEA CI90%" = RMSEA_ci,
                      SRMR = fitn.rms, 
                      BIC = fitn.BIC) %>% 
        dplyr::select(Factors, TLI, RMSEA, "RMSEA CI90%", SRMR, BIC)
}
## Error in if (s < eps) break : valor ausente donde TRUE/FALSE es necesario
## Error in La.svd(B): infinite or missing values in 'x'
do.call("rbind", efas)  %>%
    data.table::data.table(keep.rownames = F) %>% 
    dplyr::mutate_at(c(2,3,5),~round(as.numeric(.),2)) %>% 
    dplyr::mutate_at(c(6),~round(as.numeric(.),0)) %>% 
    knitr::kable(format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
                 caption = paste0("Tabla 14. Comparación de Índices de Ajuste, Preguntas sobre Condiciones Psicosociales"),
                 #col.names = c("Prueba","Estadistico","Valor p","Normalidad"),
                 align =c('l',rep('c', 101)))%>%
    kableExtra::add_footnote(c("Nota. TLI= Tucker-Lewis Index; RMSEA= Root Mean Square Error of Approximation; SRMR= Standardized Root Mean Residual; BIC= Bayesian Information Criterion"), notation = "none")%>%
    kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 12)
Tabla 14. Comparación de Índices de Ajuste, Preguntas sobre Condiciones Psicosociales
Factors TLI RMSEA RMSEA CI90% SRMR BIC
1 0.43 0.23 0.22, 0.24 0.13 1,277
2 0.66 0.18 0.17, 0.19 0.06 497
3 0.78 0.15 0.13, 0.16 0.04 197
4 0.92 0.08 0.07, 0.1 0.02 -36
5 0.94 0.07 0.05, 0.09 0.01 -39
6 0.94 0.08 0.05, 0.1 0.01 -19
7 0.92 0.08 0.04, 0.13 0.01 -4
Nota. TLI= Tucker-Lewis Index; RMSEA= Root Mean Square Error of Approximation; SRMR= Standardized Root Mean Residual; BIC= Bayesian Information Criterion

Dado que se evidenciaron errores de convergencia y casos ultra Heywood en los modelos que asumieron 4 y 5 factores latentes, particularmente en el ítem p40_cond_trab_istas_07 (En su trabajo principal: | ¿Recibe ayuda y apoyo de su superior directo?) (Lloret et al. 2017), el modelo que asume 3 factores es el que obtuvo menores índices RMSEA, SRMR y BIC. De todas formas, obtuvo un bajo ajuste factorial. Por lo mismo, se exploró con estructuras factoriales de 2 y 3 factores.


modelo_2_factores_psicosoc <-
    psych::fa(hetcor_matp40_2$correlations,
              nfactors= 2, 
              cor= "poly", 
              fm= "pa", 
              use="complete.obs", 
              n.obs= nrow(dim_suseso_p38_p39_p40_original[complete.cases(dim_suseso_p38_p39_p40_original),]),
              #n.iter=500, 
              rotate="oblimin")

#En el caso de las rotaciones oblicuas, se parte del supuesto de correlación entre los nuevos factores, que en la vida real es el escenario más común, lo que conduce a que las ponderaciones calculadas no coincidan con las correlaciones entre el factor y la variable. Dentro de los métodos de rotación oblicua más utilizados se encuentran el oblimin y el promax. La rotación oblimin permite establecer relaciones jerárquicas entre los factores, para lo cual debe establecer el grado de inclinación (δ) entre ellos. Un valor δ de cero da las rotaciones más oblicuas (3,5).

#En cuanto a la rotación promax, modifica los resultados de una rotación ortogonal hasta crear una solución con cargas factoriales lo más próximas posible a la "estructura ideal". Para ello, eleva las cargas factoriales obtenidas en una rotación ortogonal a una determinada potencia (conocida como κ). En general, los valores de κ se encuentran entre 2 y 4, pero, a mayor potencia, mayor oblicuidad en la solución (el valor de κ más común es de 4) (3,5).

# Méndez Martínez, Carolina, & Rondón Sepúlveda, Martín Alonso. (2012). Introducción al análisis factorial exploratorio. Revista Colombiana de Psiquiatría, 41(1), 197-207. Retrieved February 24, 2021, from http://www.scielo.org.co/scielo.php?script=sci_arttext&pid=S0034-74502012000100014&lng=en&tlng=es.

#:#:#:#:#:#:#:#:#:#:#:#:#:#:
# The Root Mean Square Error of Approximation (RMSEA) provides information as to how well the model, with unknown but optimally chosen parameter estimates, would fit the population covariance matrix (Byrne, 1998).
# One of its key advantages is that the RMSEA calculates confidence intervals around its value.
# Values below .060 indicate close fit (Hu & Bentler, 1999). Values up to .080 are commonly accepted as adequate.
# The Standardized Root Mean Residual (SRMR) is the square root of the difference between the residuals of the sample covariance matrix and the hypothesized covariance model.
# As SRMR is standardized, its values range between 0 and 1. Commonly, models with values below .05 threshold are considered to indicate good fit (Byrne, 1998). Also, values up to .08 are acceptable (Hu & Bentler, 1999).
# TLI’s values may fall below zero or be above one (Hair et al., 2013). For CFI and TLI values above .95 are indicative of good fit (Hu & Bentler, 1999). In practice, CFI and TLI values from .90 to .95 are considered acceptable.


#Hair, R. D., Black, W. C., Babin, B. J., Anderson, R. E., & Tatham, R. L. (2013). Multivariate data analysis. Englewood Cliffs, NJ: Prentice–Hall.

#:#:#:#:#:#:#:#:#:#:#:#:#:#:
# Situaciones en que las saturaciones sean bajas (menor de .40) y el número de ítems por factor también sea bajo (3 ítems) requieren tamaños muestrales mayores para tener alguna garantía de generalización de los resultados. Como es habitual utilizar muestras de conveniencia hay que tener en cuenta dos problemas: la no-representatividad y la atenuación por restricción de rango.
# Lloret-Segura, Susana, Ferreres-Traver, Adoración, Hernández-Baeza, Ana, & Tomás-Marco, Inés. (2014). El Análisis Factorial Exploratorio de los Ítems: una guía práctica, revisada y actualizada. Anales de Psicología, 30(3), 1151-1169. https://dx.doi.org/10.6018/analesps.30.3.199361

modelo_cargas_fac_psicosoc_a <-
    data.table::data.table(matrix(as.numeric(loadings(modelo_2_factores_psicosoc)), attributes(loadings(modelo_2_factores_psicosoc))$dim, dimnames=attributes(loadings(modelo_2_factores_psicosoc))$dimnames),keep.rownames = T)%>%
  dplyr::left_join(var_lbls_p38_p39_p40, by=c("rn"="vars")) %>% 
  dplyr::select(label, paste0("PA",1:2)) %>% 
    dplyr::mutate_at(1:dim(loadings(modelo_2_factores_psicosoc))[2]+1, ~round(as.numeric(.),2)) %>% 
    dplyr::mutate_at(1:dim(loadings(modelo_2_factores_psicosoc))[2]+1, ~ifelse(.<.3,"-",sprintf("%2.2f",.))) %>% 
  data.frame()%>% 
  dplyr::select(PA1, PA2)

colnames(modelo_cargas_fac_psicosoc_a)<- c("Variables",paste0( paste0("PA",1:attributes(loadings(modelo_2_factores_psicosoc))$dim[2]),"\nR2=",round(modelo_2_factores_psicosoc$R2,2)))
## Error in names(x) <- value: el atributo 'names' [3] debe tener la misma longitud que el vector [2]
modelo_cargas_fac_psicosoc_a %>% 
    knitr::kable(format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
                 caption = paste0("Tabla 15a. Cargas factoriales, Modelo de 2 factores Preguntas de Condiciones Psicosociales"),
                 #col.names = c("Prueba","Estadistico","Valor p","Normalidad"),
                 align =c('l',rep('c', 101)))%>%
    kableExtra::add_footnote(c("Nota. Se omiten cargas factoriales menores a .3"), notation = "none")%>%  kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 13)
Tabla 15a. Cargas factoriales, Modelo de 2 factores Preguntas de Condiciones Psicosociales
PA1 PA2
0.49
0.83
0.90
0.59
0.56
0.56
0.83
0.89
0.65
0.61
Nota. Se omiten cargas factoriales menores a .3

De la tabla 15a, llama la atención que la pregunta por cultura organizacional (p39_cond_trab_cult_org, ¿Cuán de acuerdo está con la siguiente afirmación?: “La cultura de mi organización tolera comportamientos que perjudican la salud mental de los trabajadores.”) presenta cargas menores a .3 con todas las variables latentes. De igual manera, la pregunta por si recibe ayuda/apoyo de familia y amigos (p40_cond_trab_istas_10, En su trabajo principal: | ¿Recibe ayuda y apoyo de su familia/amigos fuera del lugar de trabajo?) tampoco registra una comunalidad aceptable con alguna de las variables latentes.


modelo_3_factores_psicosoc <-
    psych::fa(hetcor_matp40_2$correlations,
              nfactors= 3, 
              cor= "poly", 
              fm= "pa", 
              use="complete.obs", 
              n.obs= nrow(dim_suseso_p38_p39_p40_original[complete.cases(dim_suseso_p38_p39_p40_original),]),
              #n.iter=500, 
              rotate="oblimin")

#En el caso de las rotaciones oblicuas, se parte del supuesto de correlación entre los nuevos factores, que en la vida real es el escenario más común, lo que conduce a que las ponderaciones calculadas no coincidan con las correlaciones entre el factor y la variable. Dentro de los métodos de rotación oblicua más utilizados se encuentran el oblimin y el promax. La rotación oblimin permite establecer relaciones jerárquicas entre los factores, para lo cual debe establecer el grado de inclinación (δ) entre ellos. Un valor δ de cero da las rotaciones más oblicuas (3,5).

#En cuanto a la rotación promax, modifica los resultados de una rotación ortogonal hasta crear una solución con cargas factoriales lo más próximas posible a la "estructura ideal". Para ello, eleva las cargas factoriales obtenidas en una rotación ortogonal a una determinada potencia (conocida como κ). En general, los valores de κ se encuentran entre 2 y 4, pero, a mayor potencia, mayor oblicuidad en la solución (el valor de κ más común es de 4) (3,5).

# Méndez Martínez, Carolina, & Rondón Sepúlveda, Martín Alonso. (2012). Introducción al análisis factorial exploratorio. Revista Colombiana de Psiquiatría, 41(1), 197-207. Retrieved February 24, 2021, from http://www.scielo.org.co/scielo.php?script=sci_arttext&pid=S0034-74502012000100014&lng=en&tlng=es.

#:#:#:#:#:#:#:#:#:#:#:#:#:#:
# The Root Mean Square Error of Approximation (RMSEA) provides information as to how well the model, with unknown but optimally chosen parameter estimates, would fit the population covariance matrix (Byrne, 1998).
# One of its key advantages is that the RMSEA calculates confidence intervals around its value.
# Values below .060 indicate close fit (Hu & Bentler, 1999). Values up to .080 are commonly accepted as adequate.
# The Standardized Root Mean Residual (SRMR) is the square root of the difference between the residuals of the sample covariance matrix and the hypothesized covariance model.
# As SRMR is standardized, its values range between 0 and 1. Commonly, models with values below .05 threshold are considered to indicate good fit (Byrne, 1998). Also, values up to .08 are acceptable (Hu & Bentler, 1999).
# TLI’s values may fall below zero or be above one (Hair et al., 2013). For CFI and TLI values above .95 are indicative of good fit (Hu & Bentler, 1999). In practice, CFI and TLI values from .90 to .95 are considered acceptable.


#Hair, R. D., Black, W. C., Babin, B. J., Anderson, R. E., & Tatham, R. L. (2013). Multivariate data analysis. Englewood Cliffs, NJ: Prentice–Hall.

#:#:#:#:#:#:#:#:#:#:#:#:#:#:
# Situaciones en que las saturaciones sean bajas (menor de .40) y el número de ítems por factor también sea bajo (3 ítems) requieren tamaños muestrales mayores para tener alguna garantía de generalización de los resultados. Como es habitual utilizar muestras de conveniencia hay que tener en cuenta dos problemas: la no-representatividad y la atenuación por restricción de rango.
# Lloret-Segura, Susana, Ferreres-Traver, Adoración, Hernández-Baeza, Ana, & Tomás-Marco, Inés. (2014). El Análisis Factorial Exploratorio de los Ítems: una guía práctica, revisada y actualizada. Anales de Psicología, 30(3), 1151-1169. https://dx.doi.org/10.6018/analesps.30.3.199361

modelo_cargas_fac_psicosoc_b <-
    data.table::data.table(matrix(as.numeric(loadings(modelo_3_factores_psicosoc)), attributes(loadings(modelo_3_factores_psicosoc))$dim, dimnames=attributes(loadings(modelo_3_factores_psicosoc))$dimnames),keep.rownames = T)%>%
  dplyr::left_join(var_lbls_p38_p39_p40, by=c("rn"="vars")) %>% 
  dplyr::select(label, paste0("PA",1:3)) %>% 
    dplyr::mutate_at(1:dim(loadings(modelo_3_factores_psicosoc))[2]+1, ~round(as.numeric(.),2)) %>% 
    dplyr::mutate_at(1:dim(loadings(modelo_3_factores_psicosoc))[2]+1, ~ifelse(.<.3,"-",sprintf("%2.2f",.))) %>% 
    #dplyr::mutate_at(1:dim(loadings(modelo_3_factores_psicosoc))[2]+1, ~ifelse(.!="-",,as.character(.))) %>% 
  data.frame() %>% 
  dplyr::select(PA1, PA2, PA3)

colnames(modelo_cargas_fac_psicosoc_b)<- c("Variables",paste0( paste0("PA",1:attributes(loadings(modelo_3_factores_psicosoc))$dim[2]),"\nR2=",round(modelo_3_factores_psicosoc$R2,2)))
## Error in names(x) <- value: el atributo 'names' [4] debe tener la misma longitud que el vector [3]
modelo_cargas_fac_psicosoc_b %>% 
    knitr::kable(format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
                 caption = paste0("Tabla 15b. Cargas factoriales, Modelo de 3 factores Preguntas de Condiciones Psicosociales"),
                 #col.names = c("Prueba","Estadistico","Valor p","Normalidad"),
                 align =c('l',rep('c', 101)))%>%
    kableExtra::add_footnote(c("Nota. Se omiten cargas factoriales menores a .3"), notation = "none")%>%  kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 13)
Tabla 15b. Cargas factoriales, Modelo de 3 factores Preguntas de Condiciones Psicosociales
PA1 PA2 PA3
0.38
0.31
0.83
0.89
0.37
0.61
0.59
0.90
0.94
0.60
0.92
0.35
Nota. Se omiten cargas factoriales menores a .3

De la tabla 15b, la pregunta por la cultura organizacional (p39_cond_trab_cult_org, ¿Cuán de acuerdo está con la siguiente afirmación?: “La cultura de mi organización tolera comportamientos que perjudican la salud mental de los trabajadores.”), si bien obtuvo cargas factorias mayores a .3, siguen siendo bastante bajas, y correlacionadas con preguntas sobre el contenido del trabajo. Este vínculo podría ser razonable entendiendo que la salud psicológica se encuentra relacionada con las relaciones entre pares y apoyo externo al trabajo. Con todo, se estima poco razonable que la pregunta sobre la información necesaria para realizar el trabajo (p40_cond_trab_istas_03, En su trabajo principal, usted: | ¿Recibe toda la información que necesita para realizar bien su trabajo?) esté vinculada tanto con relación con pares como con superiores, siendo que tiene su origen en la Relación con superiores.


#invisible(fa.graph(modelo_6_factores))
library(DiagrammeR) 

gr4<-
    DiagrammeR::grViz("
digraph Factor  {
  rankdir=RL;
  size='8,6';
  node [fontname='Helvetica' fontsize=14 shape=box, width=2];
  edge [fontname='Helvetica' fontsize=10];
V1  [label = '¿Cómo calificaría la salud psicológica de las personas\ncon las que trabaja en su lugar de trabajo principal?'];
V2  [label = '¿Cuán de acuerdo está con la siguiente afirmación?: La cultura de mi organización tolera comportamientos que perjudican la salud mental de los trabajadores'];
V3  [label = 'En su trabajo principal, usted: | ¿Tiene que trabajar muy rápido para entregar tareas solicitadas en poco tiempo?'];
V4  [label = 'En su trabajo principal, usted: | ¿Trabaja a un ritmo acelerado durante la jornada?'];
V5  [label = 'En su trabajo principal, usted: | ¿Recibe toda la información que necesita para realizar bien su trabajo?']; #, color= 'grey', style = filled, fillcolor ='grey'];
V6  [label = 'En su trabajo principal, usted: | ¿Se le exigen cosas contradictorias en el trabajo?'];
V7  [label = 'En su trabajo principal, usted: | ¿Tiene que hacer tareas que usted cree que deberían hacerse de otra manera?'];
V8  [label = 'En su trabajo principal: | Su superior directo, ¿está dispuesto a escuchar sus problemas en el trabajo?'];
V9  [label = 'En su trabajo principal: | ¿Recibe ayuda y apoyo de su superior directo?'];
V10  [label = 'En su trabajo principal: | ¿Recibe ayuda y apoyo para el trabajo de sus compañeras o compañeros de trabajo?'];
V11  [label = 'En su trabajo principal: | ¿Hay un buen ambiente entre usted y sus compañeros y compañeras de trabajo?'];
V12  [label = 'En su trabajo principal: | ¿Recibe ayuda y apoyo de su familia/amigos fuera del lugar de trabajo?'];
PA1  [label = 'Relación\n con superiores']
PA3  [label = 'Relación\ncon pares y externos']
PA2  [label = 'Características\ny cultura trabajo']
node [shape=ellipse, width ='1'];
PA2-> V2 [ label = 0.3 ];
PA2-> V3 [ label = 0.8 ];
PA2-> V4 [ label = 0.9 ];
PA2-> V6 [ label = 0.6 ];
PA2-> V7 [ label = 0.6 ];
PA1-> V5 [ label = 0.3 ];
PA1-> V8 [ label = 0.9 ];
PA1-> V9 [ label = 0.9 ];
PA3-> V1 [ label = 0.4 ];
PA3-> V10 [ label = 0.6 ];
PA3-> V11 [ label = 0.9 ];
PA3-> V12 [ label = 0.3 ];
PA3 -> PA2 [ label = -0.3 , dir='both' ];
PA3 -> PA1 [ label = 0.6 , dir='both' ];
{ rank=same;
V1;V2;V3;V4;V5;V6;V7;V8;V9;V10;V11;V12;}{ rank=same;
PA2;PA1;PA3;}}
"
)
gr4

Figura 10a. Diagrama Factorial Exploratorio de 3 factores, Condiciones Psicosociales

Por una parte, no se observa una correlación entre las características y cultura de trabajo y la relación con superiores, aunque hay una relación negativa con la relación con pares y externos, lo que permitiría hacernos sospechar de que características del trabajo perjudiciales podrían asociarse con menor apoyo social de pares, de cercanos y del ambiente y la percepción de la salud de sus pares.


#invisible(fa.graph(modelo_6_factores))
library(DiagrammeR) 

gr5<-
    DiagrammeR::grViz("
digraph Factor  {
  rankdir=RL;
  size='8,6';
  node [fontname='Helvetica' fontsize=14 shape=box, width=2];
  edge [fontname='Helvetica' fontsize=10];
V1  [label = '¿Cómo calificaría la salud psicológica de las personas\ncon las que trabaja en su lugar de trabajo principal?']; #,color= 'grey', style = filled, fillcolor ='grey'
V2  [label = '¿Cuán de acuerdo está con la siguiente afirmación?: La cultura de mi organización tolera comportamientos que perjudican la salud mental de los trabajadores', color= 'grey', style = filled, fillcolor ='grey'];
V3  [label = 'En su trabajo principal, usted: | ¿Tiene que trabajar muy rápido para entregar tareas solicitadas en poco tiempo?'];
V4  [label = 'En su trabajo principal, usted: | ¿Trabaja a un ritmo acelerado durante la jornada?'];
V5  [label = 'En su trabajo principal, usted: | ¿Recibe toda la información que necesita para realizar bien su trabajo?', color= 'grey', style = filled, fillcolor ='grey'];
V6  [label = 'En su trabajo principal, usted: | ¿Se le exigen cosas contradictorias en el trabajo?'];
V7  [label = 'En su trabajo principal, usted: | ¿Tiene que hacer tareas que usted cree que deberían hacerse de otra manera?'];
V8  [label = 'En su trabajo principal: | Su superior directo, ¿está dispuesto a escuchar sus problemas en el trabajo?'];
V9  [label = 'En su trabajo principal: | ¿Recibe ayuda y apoyo de su superior directo?'];
V10  [label = 'En su trabajo principal: | ¿Recibe ayuda y apoyo para el trabajo de sus compañeras o compañeros de trabajo?'];
V11  [label = 'En su trabajo principal: | ¿Hay un buen ambiente entre usted y sus compañeros y compañeras de trabajo?'];
V12  [label = 'En su trabajo principal: | ¿Recibe ayuda y apoyo de su familia/amigos fuera del lugar de trabajo?',color= 'grey', style = filled, fillcolor ='grey'];
node [shape=ellipse, width ='1'];
PA1 [label = 'Relación con\npersonas (pares, sup y ext)']
PA2 [label = 'Características\ny cultura trabajo']
PA1-> V1 [ label = 0.5 ];
PA1-> V2 [ label = -0.4 ];
PA1-> V5 [ label = 0.6 ];
PA1-> V8 [ label = 0.8 ];
PA1-> V9 [ label = 0.9 ];
PA1-> V10 [ label = 0.7 ];
PA1-> V11 [ label = 0.6 ];
PA2-> V3 [ label = 0.8 ];
PA2-> V4 [ label = 0.9 ];
PA2-> V6 [ label = 0.6 ];
PA2-> V7 [ label = 0.6 ];
{ rank=same;
V1;V2;V3;V4;V5;V6;V7;V8;V9;V10;V11;V12;}{ rank=same;
PA1;PA2;}}
"
)
gr5

Figura 10b. Diagrama Factorial Exploratorio de 2 factores, Condiciones Psicosociales

A partir de ambas figuras, vemos que la pregunta sobre la información necesaria para realizar bien su trabajo (p40_cond_trab_istas_03, En su trabajo principal, usted: | ¿Recibe toda la información que necesita para realizar bien su trabajo?) se encuentra ubicada conceptualmente en un conjunto de preguntas que parecen apuntar a un sentido muy distinto al que presenta, si bien en el origen corresponde su ubicación en dicha dimensión. Por otra parte, la pregunta sobre la cultura organizacional también se comporta de manera problemática (p39_cond_trab_cult_org, ¿Cuán de acuerdo está con la siguiente afirmación?: “La cultura de mi organización tolera comportamientos que perjudican la salud mental de los trabajadores.”), principalmente cuando se asumen 2 factores.


II.7) Análisis Factorial Confirmatorio (AFC)

Se definieron los siguientes factores latentes:

  • Un primer modelo asume que los 12 ítems son explicados por una sola variable latente: condiciones psicosociales
  • El segundo modelo identifica 2 factores en los 12 ítems: Características y cultura de trabajo, compuesto por p39_cond_trab_cult_org (¿Cuán de acuerdo está con la siguiente afirmación?: “La cultura de mi organización tolera comportamientos que perjudican la salud mental de los trabajadores.”), p40_cond_trab_istas_01 (En su trabajo principal, usted: | ¿Tiene que trabajar muy rápido para entregar tareas solicitadas en poco tiempo?), p40_cond_trab_istas_02 (En su trabajo principal, usted: | ¿Trabaja a un ritmo acelerado durante la jornada?), p40_cond_trab_istas_04 (En su trabajo principal, usted: | ¿Se le exigen cosas contradictorias en el trabajo?) y p40_cond_trab_istas_05 (En su trabajo principal, usted: | ¿Tiene que hacer tareas que usted cree que deberían hacerse de otra manera?), y Relación con personas (pares, superiores y externos), compuesto por p38_cond_trab_sal_psi (¿Cómo calificaría la salud psicológica de las personas con las que trabaja en su lugar de trabajo principal?), p40_cond_trab_istas_03 (En su trabajo principal, usted: | ¿Recibe toda la información que necesita para realizar bien su trabajo?), p40_cond_trab_istas_06 (En su trabajo principal: | Su superior directo, ¿está dispuesto a escuchar sus problemas en el trabajo?), p40_cond_trab_istas_07 (En su trabajo principal: | ¿Recibe ayuda y apoyo de su superior directo?), p40_cond_trab_istas_08 (En su trabajo principal: | ¿Recibe ayuda y apoyo para el trabajo de sus compañeras o compañeros de trabajo?), p40_cond_trab_istas_09 (En su trabajo principal: | ¿Hay un buen ambiente entre usted y sus compañeros y compañeras de trabajo?) y p40_cond_trab_istas_10 (En su trabajo principal: | ¿Recibe ayuda y apoyo de su familia/amigos fuera del lugar de trabajo?).
  • El tercer modelo identifica 3 factores en los 12 ítems: Relación con pares y externos, conformado por p39_cond_trab_cult_org (¿Cuán de acuerdo está con la siguiente afirmación?: “La cultura de mi organización tolera comportamientos que perjudican la salud mental de los trabajadores.”), p40_cond_trab_istas_08 (En su trabajo principal: | ¿Recibe ayuda y apoyo para el trabajo de sus compañeras o compañeros de trabajo?), p40_cond_trab_istas_09 (En su trabajo principal: | ¿Hay un buen ambiente entre usted y sus compañeros y compañeras de trabajo?) y p40_cond_trab_istas_10 (En su trabajo principal: | ¿Recibe ayuda y apoyo de su familia/amigos fuera del lugar de trabajo?), Características y cultura de trabajo, conformado por , p40_cond_trab_istas_04 (En su trabajo principal, usted: | ¿Se le exigen cosas contradictorias en el trabajo?), p40_cond_trab_istas_05 (En su trabajo principal, usted: | ¿Tiene que hacer tareas que usted cree que deberían hacerse de otra manera?), p39_cond_trab_cult_org (¿Cuán de acuerdo está con la siguiente afirmación?: “La cultura de mi organización tolera comportamientos que perjudican la salud mental de los trabajadores.”), p40_cond_trab_istas_01 (En su trabajo principal, usted: | ¿Tiene que trabajar muy rápido para entregar tareas solicitadas en poco tiempo?) y p40_cond_trab_istas_02 (En su trabajo principal, usted: | ¿Trabaja a un ritmo acelerado durante la jornada?), y Relación con superiores, conformado por p40_cond_trab_istas_03 (En su trabajo principal, usted: | ¿Recibe toda la información que necesita para realizar bien su trabajo?), p40_cond_trab_istas_07 (En su trabajo principal: | ¿Recibe ayuda y apoyo de su superior directo?) y p40_cond_trab_istas_06 (En su trabajo principal: | Su superior directo, ¿está dispuesto a escuchar sus problemas en el trabajo?).
  • El cuarto modelo identifica 4 factores en los 12 ítems de acuerdo a su origen: Ambiente y Cultura, conformado por p38_cond_trab_sal_psi (¿Cómo calificaría la salud psicológica de las personas con las que trabaja en su lugar de trabajo principal?) y p39_cond_trab_cult_org (¿Cuán de acuerdo está con la siguiente afirmación?: “La cultura de mi organización tolera comportamientos que perjudican la salud mental de los trabajadores.”), Exigencias psicológicas, conformado por p40_cond_trab_istas_01 (En su trabajo principal, usted: | ¿Tiene que trabajar muy rápido para entregar tareas solicitadas en poco tiempo?) y p40_cond_trab_istas_02 (En su trabajo principal, usted: | ¿Trabaja a un ritmo acelerado durante la jornada?), Conflicto de rol, conformado por p40_cond_trab_istas_04 (En su trabajo principal, usted: | ¿Se le exigen cosas contradictorias en el trabajo?) y p40_cond_trab_istas_05 (En su trabajo principal, usted: | ¿Tiene que hacer tareas que usted cree que deberían hacerse de otra manera?), y Calidad de la Relación (superiores y pares) conformado por p40_cond_trab_istas_03 (En su trabajo principal, usted: | ¿Recibe toda la información que necesita para realizar bien su trabajo?), p40_cond_trab_istas_06 (En su trabajo principal: | Su superior directo, ¿está dispuesto a escuchar sus problemas en el trabajo?), p40_cond_trab_istas_07 (En su trabajo principal: | ¿Recibe ayuda y apoyo de su superior directo?), p40_cond_trab_istas_08 (En su trabajo principal: | ¿Recibe ayuda y apoyo para el trabajo de sus compañeras o compañeros de trabajo?), p40_cond_trab_istas_09 (En su trabajo principal: | ¿Hay un buen ambiente entre usted y sus compañeros y compañeras de trabajo?) y p40_cond_trab_istas_10 (En su trabajo principal: | ¿Recibe ayuda y apoyo de su familia/amigos fuera del lugar de trabajo?).
  • El quinto modelo identifica 4 factores en los 12 ítems de acuerdo a su origen: Ambiente y Cultura, conformado por p38_cond_trab_sal_psi (¿Cómo calificaría la salud psicológica de las personas con las que trabaja en su lugar de trabajo principal?) y p39_cond_trab_cult_org (¿Cuán de acuerdo está con la siguiente afirmación?: “La cultura de mi organización tolera comportamientos que perjudican la salud mental de los trabajadores.”), Exigencias psicológicas, conformado por p40_cond_trab_istas_01 (En su trabajo principal, usted: | ¿Tiene que trabajar muy rápido para entregar tareas solicitadas en poco tiempo?) y p40_cond_trab_istas_02 (En su trabajo principal, usted: | ¿Trabaja a un ritmo acelerado durante la jornada?), Conflicto de rol, conformado por p40_cond_trab_istas_04 (En su trabajo principal, usted: | ¿Se le exigen cosas contradictorias en el trabajo?) y p40_cond_trab_istas_05 (En su trabajo principal, usted: | ¿Tiene que hacer tareas que usted cree que deberían hacerse de otra manera?), Calidad de la Relación con superiores, conformado por p40_cond_trab_istas_03 (En su trabajo principal, usted: | ¿Recibe toda la información que necesita para realizar bien su trabajo?), p40_cond_trab_istas_06 (En su trabajo principal: | Su superior directo, ¿está dispuesto a escuchar sus problemas en el trabajo?), p40_cond_trab_istas_07 (En su trabajo principal: | ¿Recibe ayuda y apoyo de su superior directo?), y Relación con pares, conformado por p40_cond_trab_istas_08 (En su trabajo principal: | ¿Recibe ayuda y apoyo para el trabajo de sus compañeras o compañeros de trabajo?), p40_cond_trab_istas_09 (En su trabajo principal: | ¿Hay un buen ambiente entre usted y sus compañeros y compañeras de trabajo?) y p40_cond_trab_istas_10 (En su trabajo principal: | ¿Recibe ayuda y apoyo de su familia/amigos fuera del lugar de trabajo?).


library(lavaan)  
library(semPlot)
library(semTools)
  # Latent variables
  
psicosoc_1f_inicial_form <- "
psicosoc =~  p38_cond_trab_sal_psi+  p39_cond_trab_cult_org+  p40_cond_trab_istas_01+  p40_cond_trab_istas_02+ p40_cond_trab_istas_03+  p40_cond_trab_istas_06+ p40_cond_trab_istas_07+ p40_cond_trab_istas_08+  p40_cond_trab_istas_09+ p40_cond_trab_istas_10+ p40_cond_trab_istas_04+  p40_cond_trab_istas_05"

psicosoc_2f_inicial_form <- "
car_cul_tr =~  p39_cond_trab_cult_org+  p40_cond_trab_istas_01+  p40_cond_trab_istas_02+ p40_cond_trab_istas_04+ p40_cond_trab_istas_05  
rel_personas =~ p38_cond_trab_sal_psi+  p40_cond_trab_istas_03+ p40_cond_trab_istas_06+ p40_cond_trab_istas_07+ p40_cond_trab_istas_08+ p40_cond_trab_istas_09+ p40_cond_trab_istas_10
"
psicosoc_3f_inicial_form <- "
rel_par_ext=~ p38_cond_trab_sal_psi+ p40_cond_trab_istas_08+ p40_cond_trab_istas_09+ p40_cond_trab_istas_10
rel_sup =~ p40_cond_trab_istas_03+ p40_cond_trab_istas_06+ p40_cond_trab_istas_07
car_cul_trab=~ p40_cond_trab_istas_04+ p40_cond_trab_istas_05+ p39_cond_trab_cult_org+ p40_cond_trab_istas_01+ p40_cond_trab_istas_02
"
psicosoc_4f_inicial_form <- "
amb_cul =~ p38_cond_trab_sal_psi+  p39_cond_trab_cult_org
ex_psi =~  p40_cond_trab_istas_01+  p40_cond_trab_istas_02  
con_rol =~ p40_cond_trab_istas_04+  p40_cond_trab_istas_05
cal_res =~ p40_cond_trab_istas_03+ p40_cond_trab_istas_06+ p40_cond_trab_istas_07+ p40_cond_trab_istas_08+ p40_cond_trab_istas_09+ p40_cond_trab_istas_10
"
psicosoc_5f_inicial_form <- "
amb_cul =~ p38_cond_trab_sal_psi+  p39_cond_trab_cult_org
ex_psi =~  p40_cond_trab_istas_01+  p40_cond_trab_istas_02  
con_rol =~ p40_cond_trab_istas_04+  p40_cond_trab_istas_05
rel_par_ext =~ p40_cond_trab_istas_08+ p40_cond_trab_istas_09+ p40_cond_trab_istas_10
rel_sup =~ p40_cond_trab_istas_03+ p40_cond_trab_istas_06+ p40_cond_trab_istas_07
"
psicosoc_1f_inicial<- lavaan::cfa(psicosoc_1f_inicial_form, data = dim_suseso_p38_p39_p40_original[complete.cases(dim_suseso_p38_p39_p40_original),], ordered=names(dim_suseso_p38_p39_p40_original), estimator= "WLSMV", warn = T)
psicosoc_2f_inicial<- lavaan::cfa(psicosoc_2f_inicial_form, data = dim_suseso_p38_p39_p40_original[complete.cases(dim_suseso_p38_p39_p40_original),], ordered=names(dim_suseso_p38_p39_p40_original), estimator= "WLSMV", warn = T)
psicosoc_3f_inicial<- lavaan::cfa(psicosoc_3f_inicial_form, data = dim_suseso_p38_p39_p40_original[complete.cases(dim_suseso_p38_p39_p40_original),], ordered=names(dim_suseso_p38_p39_p40_original), estimator= "WLSMV", warn = T)
psicosoc_4f_inicial<- lavaan::cfa(psicosoc_4f_inicial_form, data = dim_suseso_p38_p39_p40_original[complete.cases(dim_suseso_p38_p39_p40_original),], ordered=names(dim_suseso_p38_p39_p40_original), estimator= "WLSMV", warn = T)
psicosoc_5f_inicial<- lavaan::cfa(psicosoc_5f_inicial_form, data = dim_suseso_p38_p39_p40_original[complete.cases(dim_suseso_p38_p39_p40_original),], ordered=names(dim_suseso_p38_p39_p40_original), estimator= "WLSMV", warn = T)
data.table::data.table(cbind(modelos= c("1 factor, Riesgos Psicosociales","2 factores", "3 factores", "4 factores","5 factores"),
                             rbind(ajusteAFC(psicosoc_1f_inicial), 
                             ajusteAFC(psicosoc_2f_inicial),
                             ajusteAFC(psicosoc_3f_inicial),
                             ajusteAFC(psicosoc_4f_inicial),
                             ajusteAFC(psicosoc_5f_inicial)
                    )),keep.rownames = F) %>% 
  knitr::kable(.,format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
               caption = paste0("Tabla 16. Comparativo Índices de Ajuste de Modelos Propuestos para Preguntas sobre Riesgos Psicosociales"),
               align =c('l',rep('c', 101)),
               col.names = c("Modelos","Código", "gl","WLS X2","CMIN/df","aGFI","GFI", "RMSEA\n[IC 90%]","CFit","CFI","NNFI")) %>%
      #kableExtra::row_spec(1, bold= T, color= "black", background= "white")%>%
  kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 12)
Tabla 16. Comparativo Índices de Ajuste de Modelos Propuestos para Preguntas sobre Riesgos Psicosociales
Modelos Código gl WLS X2 CMIN/df aGFI GFI RMSEA [IC 90%] CFit CFI NNFI
1 factor, Riesgos Psicosociales psicosoc_1f_inicial 54 1574.285 29.153 0.869 0.937 0.232[0.222-0.241] 0.000 0.907 0.887
2 factores psicosoc_2f_inicial 53 728.888 13.753 0.938 0.971 0.156[0.146-0.166] 0.000 0.959 0.949
3 factores psicosoc_3f_inicial 51 601.732 11.799 0.947 0.976 0.143[0.133-0.154] 0.000 0.966 0.957
4 factores psicosoc_4f_inicial 48 252.646 5.263 0.976 0.990 0.090[0.079-0.101] 0.000 0.988 0.983
5 factores psicosoc_5f_inicial 44 140.464 3.192 0.986 0.994 0.065[0.053-0.077] 0.022 0.994 0.991
semPlot::semPaths(psicosoc_1f_inicial, 
                   residuals=T, 
                   what="std", 
                   label.cex=1.5, 
                   edge.label.cex=1,
                   fade=FALSE,
                   thresholds = F,
                   intercepts=F)

Cabe mencionar que todos los modelos apuntaron a que la pregunta por el apoyo percibido por familia y amigos p40_cond_trab_istas_10 (En su trabajo principal: | ¿Recibe ayuda y apoyo de su familia/amigos fuera del lugar de trabajo?) tiene un alto grado de unicidad, siendo difícil que responda a las variables latentes.


psicosoc_1f_sin_p40_10 <- "
psicosoc =~  p38_cond_trab_sal_psi+  p39_cond_trab_cult_org+  p40_cond_trab_istas_01+  p40_cond_trab_istas_02+ p40_cond_trab_istas_03+  p40_cond_trab_istas_06+ p40_cond_trab_istas_07+ p40_cond_trab_istas_08+  p40_cond_trab_istas_09+ p40_cond_trab_istas_04+  p40_cond_trab_istas_05"

psicosoc_2f_sin_p40_10 <- "
car_cul_tr =~  p39_cond_trab_cult_org+  p40_cond_trab_istas_01+  p40_cond_trab_istas_02+ p40_cond_trab_istas_04+ p40_cond_trab_istas_05  
rel_personas =~ p38_cond_trab_sal_psi+  p40_cond_trab_istas_03+ p40_cond_trab_istas_06+ p40_cond_trab_istas_07+ p40_cond_trab_istas_08+ p40_cond_trab_istas_09
"
psicosoc_3f_sin_p40_10 <- "
rel_par_ext=~ p38_cond_trab_sal_psi+ p40_cond_trab_istas_08+ p40_cond_trab_istas_09
rel_sup =~ p40_cond_trab_istas_03+ p40_cond_trab_istas_06+ p40_cond_trab_istas_07
car_cul_trab=~ p40_cond_trab_istas_04+ p40_cond_trab_istas_05+ p39_cond_trab_cult_org+ p40_cond_trab_istas_01+ p40_cond_trab_istas_02
"
psicosoc_4f_sin_p40_10 <- "
amb_cul =~ p38_cond_trab_sal_psi+  p39_cond_trab_cult_org
ex_psi =~  p40_cond_trab_istas_01+  p40_cond_trab_istas_02  
con_rol =~ p40_cond_trab_istas_04+  p40_cond_trab_istas_05
cal_res =~ p40_cond_trab_istas_03+ p40_cond_trab_istas_06+ p40_cond_trab_istas_07+ p40_cond_trab_istas_08+ p40_cond_trab_istas_09
"
psicosoc_5f_sin_p40_10 <- "
amb_cul =~ p38_cond_trab_sal_psi+  p39_cond_trab_cult_org
ex_psi =~  p40_cond_trab_istas_01+  p40_cond_trab_istas_02  
con_rol =~ p40_cond_trab_istas_04+  p40_cond_trab_istas_05
rel_par_ext =~ p40_cond_trab_istas_08+ p40_cond_trab_istas_09
rel_sup =~ p40_cond_trab_istas_03+ p40_cond_trab_istas_06+ p40_cond_trab_istas_07
"
psicosoc_1f_sin_p40_10_mod<- lavaan::cfa(psicosoc_1f_sin_p40_10, data = dim_suseso_p38_p39_p40_original[complete.cases(dim_suseso_p38_p39_p40_original),-12], ordered=names(dim_suseso_p38_p39_p40_original)[-12], estimator= "WLSMV", warn = T)
psicosoc_2f_sin_p40_10_mod<- lavaan::cfa(psicosoc_2f_sin_p40_10, data = dim_suseso_p38_p39_p40_original[complete.cases(dim_suseso_p38_p39_p40_original),-12], ordered=names(dim_suseso_p38_p39_p40_original)[-12], estimator= "WLSMV", warn = T)
psicosoc_3f_sin_p40_10_mod<- lavaan::cfa(psicosoc_3f_sin_p40_10, data = dim_suseso_p38_p39_p40_original[complete.cases(dim_suseso_p38_p39_p40_original),-12], ordered=names(dim_suseso_p38_p39_p40_original)[-12], estimator= "WLSMV", warn = T)
psicosoc_4f_sin_p40_10_mod<- lavaan::cfa(psicosoc_4f_sin_p40_10, data = dim_suseso_p38_p39_p40_original[complete.cases(dim_suseso_p38_p39_p40_original),-12], ordered=names(dim_suseso_p38_p39_p40_original)[-12], estimator= "WLSMV", warn = T)
psicosoc_5f_sin_p40_10_mod<- lavaan::cfa(psicosoc_5f_sin_p40_10, data = dim_suseso_p38_p39_p40_original[complete.cases(dim_suseso_p38_p39_p40_original),-12], ordered=names(dim_suseso_p38_p39_p40_original)[-12], estimator= "WLSMV", warn = T)

data.table::data.table(cbind(modelos= c("1 factor, Riesgos Psicosociales","2 factores", "3 factores", "4 factores","5 factores","1 factor, Riesgos Psicosociales","2 factores", "3 factores", "4 factores","5 factores"),
                             rbind(ajusteAFC(psicosoc_1f_inicial), 
                             ajusteAFC(psicosoc_2f_inicial),
                             ajusteAFC(psicosoc_3f_inicial),
                             ajusteAFC(psicosoc_4f_inicial),
                             ajusteAFC(psicosoc_5f_inicial),
                             ajusteAFC(psicosoc_1f_sin_p40_10_mod), 
                             ajusteAFC(psicosoc_2f_sin_p40_10_mod),
                             ajusteAFC(psicosoc_3f_sin_p40_10_mod),
                             ajusteAFC(psicosoc_4f_sin_p40_10_mod),
                             ajusteAFC(psicosoc_5f_sin_p40_10_mod)
                    )),keep.rownames = F) %>% 
  knitr::kable(.,format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
               caption = paste0("Tabla 17. Comparativo Índices de Ajuste de Modelos Propuestos para Preguntas sobre Riesgos Psicosociales (más modelos sin pregunta 10)"),
               align =c('l',rep('c', 101)),
               col.names = c("Modelos","Código", "gl","WLS X2","CMIN/df","aGFI","GFI", "RMSEA\n[IC 90%]","CFit","CFI","NNFI")) %>%
      kableExtra::column_spec(1:2, width = "5em")%>%
  kableExtra::pack_rows("Variables iniciales", 1, 5) %>%
  kableExtra::pack_rows("Sin pregunta 10", 6, 10) %>%
  kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 12)
Tabla 17. Comparativo Índices de Ajuste de Modelos Propuestos para Preguntas sobre Riesgos Psicosociales (más modelos sin pregunta 10)
Modelos Código gl WLS X2 CMIN/df aGFI GFI RMSEA [IC 90%] CFit CFI NNFI
Variables iniciales
1 factor, Riesgos Psicosociales psicosoc_1f_inicial 54 1574.285 29.153 0.869 0.937 0.232[0.222-0.241] 0.000 0.907 0.887
2 factores psicosoc_2f_inicial 53 728.888 13.753 0.938 0.971 0.156[0.146-0.166] 0.000 0.959 0.949
3 factores psicosoc_3f_inicial 51 601.732 11.799 0.947 0.976 0.143[0.133-0.154] 0.000 0.966 0.957
4 factores psicosoc_4f_inicial 48 252.646 5.263 0.976 0.990 0.090[0.079-0.101] 0.000 0.988 0.983
5 factores psicosoc_5f_inicial 44 140.464 3.192 0.986 0.994 0.065[0.053-0.077] 0.022 0.994 0.991
Sin pregunta 10
1 factor, Riesgos Psicosociales psicosoc_1f_sin_p40_10_mod 44 1541.387 35.032 0.858 0.936 0.255[0.244-0.266] 0.000 0.908 0.885
2 factores psicosoc_2f_sin_p40_10_mod 43 714.105 16.607 0.933 0.970 0.172[0.161-0.184] 0.000 0.959 0.947
3 factores psicosoc_3f_sin_p40_10_mod 41 592.945 14.462 0.941 0.976 0.160[0.149-0.172] 0.000 0.966 0.955
4 factores psicosoc_4f_sin_p40_10_mod 38 238.244 6.270 0.975 0.990 0.100[0.088-0.113] 0.000 0.988 0.982
5 factores psicosoc_5f_sin_p40_10_mod 34 134.993 3.970 0.984 0.994 0.075[0.062-0.089] 0.001 0.994 0.990

Con todo, el modelo estadístico empeora una vez que se elimina dicho ítem. De igual manera, el modelo de 5 factores obtuvo un mejor ajuste y ajuste en todos los índices presentados, pero nos mantendremos con un modelo que mantiene dicho ítem.


#Cargas factoriales.
afc_lambda_std_psicosoc<-
    data.table::data.table(lavaan::lavInspect(psicosoc_5f_inicial, what = "std", add.labels = TRUE)$`lambda`,keep.rownames = T) %>% 
    dplyr::left_join(cols_labels, by=c("rn"="V1")) %>% 
    dplyr::select(V2,everything()) %>% 
    dplyr::mutate(across(where(is.numeric), ~ round(.x, 2))) %>% 
    dplyr::mutate(across(where(is.numeric), ~ ifelse(.x==0,NA,.x))) 
for (i in 1:nrow(afc_lambda_std_psicosoc)){
    afc_lambda_std_psicosoc$V2[i]<-stringr::str_wrap(afc_lambda_std_psicosoc$V2[i], width = 40, indent = 0, exdent = 0)
}

#R cuadrado var latentes
afc_psi_std_psicosoc<-
    cbind.data.frame(V2=c("Ambiente y Cultura", "Exigencias\nPsicológicas", "Conflicto\nde Rol", "Relación con\nPares y Ext.", "Relación con\nSuperiores"),
                     data.table::data.table(lavaan::lavInspect(psicosoc_5f_inicial, what = "std", add.labels = TRUE)$psi,keep.rownames = T)) %>% 
    dplyr::mutate(across(where(is.numeric), ~ round(.x, 2))) %>% 
    dplyr::mutate(across(where(is.numeric), ~ ifelse(.x==1,NA,.x))) 

rbind.data.frame(afc_lambda_std_psicosoc,
                 afc_psi_std_psicosoc) %>% 
    knitr::kable(format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
                 caption = paste0("Tabla 18a. Cargas Factoriales y Covarianzas Variables Latentes"),
                 align =c('l',rep('c', 101)),
                 col.names = c("Ítem","Código", 
                               "Ambiente y Cultura", "Exigencias\nPsicológicas", "Conflicto\nde Rol", "Relación con\nPares y Ext.", "Relación con\nSuperiores"))%>%
    kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 12) %>%
    kableExtra::pack_rows("Variables manifiestas", 1, 12) %>%
    kableExtra::pack_rows("Variables latentes", 13, 17) %>%
    kableExtra::add_footnote(c("Nota. "),
                             notation = "none")%>%
    kableExtra::scroll_box(width = "100%", height = "375px")
Tabla 18a. Cargas Factoriales y Covarianzas Variables Latentes
Ítem Código Ambiente y Cultura Exigencias Psicológicas Conflicto de Rol Relación con Pares y Ext. Relación con Superiores
Variables manifiestas
¿Cómo calificaría la salud psicológica de las personas con las que trabaja en su lugar de trabajo principal? p38_cond_trab_sal_psi 0.69
¿Cuán de acuerdo está con la siguiente afirmación?: “La cultura de mi organización tolera comportamientos que perjudican la salud mental de los trabajadores.” p39_cond_trab_cult_org -0.65
En su trabajo principal, usted: | ¿Tiene que trabajar muy rápido para entregar tareas solicitadas en poco tiempo? p40_cond_trab_istas_01 0.90
En su trabajo principal, usted: | ¿Trabaja a un ritmo acelerado durante la jornada? p40_cond_trab_istas_02 0.91
En su trabajo principal, usted: | ¿Se le exigen cosas contradictorias en el trabajo? p40_cond_trab_istas_04 0.87
En su trabajo principal, usted: | ¿Tiene que hacer tareas que usted cree que deberían hacerse de otra manera? p40_cond_trab_istas_05 0.80
En su trabajo principal: | ¿Recibe ayuda y apoyo para el trabajo de sus compañeras o compañeros de trabajo? p40_cond_trab_istas_08 0.77
En su trabajo principal: | ¿Hay un buen ambiente entre usted y sus compañeros y compañeras de trabajo? p40_cond_trab_istas_09 0.82
En su trabajo principal: | ¿Recibe ayuda y apoyo de su familia/amigos fuera del lugar de trabajo? p40_cond_trab_istas_10 0.31
En su trabajo principal, usted: | ¿Recibe toda la información que necesita para realizar bien su trabajo? p40_cond_trab_istas_03 0.68
En su trabajo principal: | Su superior directo, ¿está dispuesto a escuchar sus problemas en el trabajo? p40_cond_trab_istas_06 0.92
En su trabajo principal: | ¿Recibe ayuda y apoyo de su superior directo? p40_cond_trab_istas_07 0.96
Variables latentes
Ambiente y Cultura amb_cul -0.44 -0.73 0.68 0.66
Exigencias Psicológicas ex_psi -0.44 0.64 -0.25 -0.21
Conflicto de Rol con_rol -0.73 0.64 -0.46 -0.55
Relación con Pares y Ext. rel_par_ext 0.68 -0.25 -0.46 0.66
Relación con Superiores rel_sup 0.66 -0.21 -0.55 0.66
Nota.
#A factor with 2 variables is only considered reliable when the variables are highly correlated with each another (r > .70) but fairly uncorrelated with other variables. Yong, A. G., & Pearce, S. (2013, p. 80).


#Cargas factoriales.
afc_lambda_std_psicosoc2<-
    data.table::data.table(lavaan::lavInspect(psicosoc_5f_sin_p40_10_mod, what = "std", add.labels = TRUE)$`lambda`,keep.rownames = T) %>% 
    dplyr::left_join(cols_labels, by=c("rn"="V1")) %>% 
    dplyr::select(V2,everything()) %>% 
    dplyr::mutate(across(where(is.numeric), ~ round(.x, 2))) %>% 
    dplyr::mutate(across(where(is.numeric), ~ ifelse(.x==0,NA,.x))) 

for (i in 1:nrow(afc_lambda_std_psicosoc2)){
    afc_lambda_std_psicosoc2$V2[i]<-stringr::str_wrap(afc_lambda_std_psicosoc2$V2[i], width = 40, indent = 0, exdent = 0)
}

#R cuadrado var latentes
afc_psi_std_psicosoc2<-
    cbind.data.frame(V2=c("Ambiente y Cultura", "Exigencias\nPsicológicas", "Conflicto\nde Rol", "Relación con\nPares y Ext.", "Relación con\nSuperiores"),
                     data.table::data.table(lavaan::lavInspect(psicosoc_5f_sin_p40_10_mod, what = "std", add.labels = TRUE)$psi,keep.rownames = T)) %>% 
    dplyr::mutate(across(where(is.numeric), ~ round(.x, 2))) %>% 
    dplyr::mutate(across(where(is.numeric), ~ ifelse(.x==1,NA,.x))) 

rbind.data.frame(afc_lambda_std_psicosoc2,
                 afc_psi_std_psicosoc2) %>% 
    knitr::kable(format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
                 caption = paste0("Tabla 18b. Cargas Factoriales y Covarianzas Variables Latentes (sin p. 10)"),
                 align =c('l',rep('c', 101)),
                 col.names = c("Ítem","Código", 
                               "Ambiente y Cultura", "Exigencias\nPsicológicas", "Conflicto\nde Rol", "Relación con\nPares y Ext.", "Relación con\nSuperiores"))%>%
    kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 12) %>%
    kableExtra::pack_rows("Variables manifiestas", 1, 11) %>%
    kableExtra::pack_rows("Variables latentes", 12, 16) %>%
    kableExtra::add_footnote(c("Nota. "),
                             notation = "none")%>%
    kableExtra::scroll_box(width = "100%", height = "375px")
Tabla 18b. Cargas Factoriales y Covarianzas Variables Latentes (sin p. 10)
Ítem Código Ambiente y Cultura Exigencias Psicológicas Conflicto de Rol Relación con Pares y Ext. Relación con Superiores
Variables manifiestas
¿Cómo calificaría la salud psicológica de las personas con las que trabaja en su lugar de trabajo principal? p38_cond_trab_sal_psi 0.68
¿Cuán de acuerdo está con la siguiente afirmación?: “La cultura de mi organización tolera comportamientos que perjudican la salud mental de los trabajadores.” p39_cond_trab_cult_org -0.65
En su trabajo principal, usted: | ¿Tiene que trabajar muy rápido para entregar tareas solicitadas en poco tiempo? p40_cond_trab_istas_01 0.90
En su trabajo principal, usted: | ¿Trabaja a un ritmo acelerado durante la jornada? p40_cond_trab_istas_02 0.91
En su trabajo principal, usted: | ¿Se le exigen cosas contradictorias en el trabajo? p40_cond_trab_istas_04 0.87
En su trabajo principal, usted: | ¿Tiene que hacer tareas que usted cree que deberían hacerse de otra manera? p40_cond_trab_istas_05 0.80
En su trabajo principal: | ¿Recibe ayuda y apoyo para el trabajo de sus compañeras o compañeros de trabajo? p40_cond_trab_istas_08 0.76
En su trabajo principal: | ¿Hay un buen ambiente entre usted y sus compañeros y compañeras de trabajo? p40_cond_trab_istas_09 0.81
En su trabajo principal, usted: | ¿Recibe toda la información que necesita para realizar bien su trabajo? p40_cond_trab_istas_03 0.68
En su trabajo principal: | Su superior directo, ¿está dispuesto a escuchar sus problemas en el trabajo? p40_cond_trab_istas_06 0.92
En su trabajo principal: | ¿Recibe ayuda y apoyo de su superior directo? p40_cond_trab_istas_07 0.96
Variables latentes
Ambiente y Cultura amb_cul -0.44 -0.73 0.69 0.66
Exigencias Psicológicas ex_psi -0.44 0.64 -0.26 -0.21
Conflicto de Rol con_rol -0.73 0.64 -0.47 -0.55
Relación con Pares y Ext. rel_par_ext 0.69 -0.26 -0.47 0.67
Relación con Superiores rel_sup 0.66 -0.21 -0.55 0.67
Nota.
#A factor with 2 variables is only considered reliable when the variables are highly correlated with each another (r > .70) but fairly uncorrelated with other variables. Yong, A. G., & Pearce, S. (2013, p. 80).


psicosoc_5f_inicial_mi<-
  subset(lavaan::modindices(psicosoc_5f_inicial)[order(lavaan::modindices(psicosoc_5f_inicial)$mi, decreasing=TRUE), ], mi > 5 & abs(sepc.all)>0.2)%>%
  data.frame()%>%
  dplyr::mutate(lhs=paste0(lhs,op,rhs))%>%
  dplyr::mutate(mi=sprintf("%04.2f",mi))%>%
  dplyr::mutate(sepc.all=sprintf("%04.2f",sepc.all))%>%
  dplyr::select(lhs,mi,sepc.all)
  
  knitr::kable(psicosoc_5f_inicial_mi,format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
               caption = paste0("Tabla 19. Índices de Modificación, Modelo de 5 Factores Preguntas sobre Riesgo Psicosocial"),
               align =c('l',rep('c', 101)),
               col.names = c("Relación entre variables","Índice de Modificación", "Cambio esperado del parámetro Estandarizado (SEPC)"))%>%
    kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 12) %>%
    kableExtra::row_spec(which(grepl("p40_cond_trab_istas_03",psicosoc_5f_inicial_mi$lhs)), bold= T, color= "white", background= "tomato")%>%
   kableExtra::row_spec(which(grepl("p40_cond_trab_istas_03",psicosoc_5f_inicial_mi$rhs)), bold= T, color= "white", background= "tomato")%>%
  kableExtra::add_footnote(c("Nota. En color rojo, parámetros a estudiar","=~ : efecto de una variable observada en una variable latente","~~: covarianza entre los errores de dos variables observadas"),
                            notation = "none")%>%
  kableExtra::scroll_box(width = "100%", height = "375px")
Tabla 19. Índices de Modificación, Modelo de 5 Factores Preguntas sobre Riesgo Psicosocial
Relación entre variables Índice de Modificación Cambio esperado del parámetro Estandarizado (SEPC)
123 amb_cul=~p40_cond_trab_istas_03 94.08 0.60
229 p40_cond_trab_istas_06~~p40_cond_trab_istas_07 90.35 5.27
143 con_rol=~p40_cond_trab_istas_03 75.19 -0.37
133 ex_psi=~p40_cond_trab_istas_03 54.81 -0.25
152 rel_par_ext=~p40_cond_trab_istas_03 39.83 0.46
228 p40_cond_trab_istas_03~~p40_cond_trab_istas_07 30.87 -1.39
227 p40_cond_trab_istas_03~~p40_cond_trab_istas_06 30.09 -0.93
125 amb_cul=~p40_cond_trab_istas_07 29.72 -0.53
124 amb_cul=~p40_cond_trab_istas_06 26.13 -0.46
145 con_rol=~p40_cond_trab_istas_07 21.19 0.28
144 con_rol=~p40_cond_trab_istas_06 17.65 0.25
212 p40_cond_trab_istas_05~~p40_cond_trab_istas_03 15.89 -0.34
153 rel_par_ext=~p40_cond_trab_istas_06 14.64 -0.37
170 p38_cond_trab_sal_psi~~p40_cond_trab_istas_09 14.59 0.47
121 amb_cul=~p40_cond_trab_istas_09 12.41 0.49
206 p40_cond_trab_istas_04~~p40_cond_trab_istas_03 11.47 -0.35
147 rel_par_ext=~p39_cond_trab_cult_org 11.08 0.35
146 rel_par_ext=~p38_cond_trab_sal_psi 11.08 0.37
161 rel_sup=~p40_cond_trab_istas_08 10.39 0.45
182 p39_cond_trab_cult_org~~p40_cond_trab_istas_03 9.38 -0.22
162 rel_sup=~p40_cond_trab_istas_09 8.89 -0.44
136 con_rol=~p38_cond_trab_sal_psi 8.23 0.34
137 con_rol=~p39_cond_trab_cult_org 8.23 0.33
120 amb_cul=~p40_cond_trab_istas_08 7.45 -0.36
223 p40_cond_trab_istas_09~~p40_cond_trab_istas_07 6.80 -0.88
199 p40_cond_trab_istas_02~~p40_cond_trab_istas_03 6.38 -0.35
214 p40_cond_trab_istas_05~~p40_cond_trab_istas_07 6.34 0.76
154 rel_par_ext=~p40_cond_trab_istas_07 6.06 -0.25
191 p40_cond_trab_istas_01~~p40_cond_trab_istas_03 5.55 -0.32
222 p40_cond_trab_istas_09~~p40_cond_trab_istas_06 5.05 -0.51
Nota. En color rojo, parámetros a estudiar
=~ : efecto de una variable observada en una variable latente
~~: covarianza entre los errores de dos variables observadas

Cabe señalar que la variable latente Relación con superiores contiene p40_cond_trab_istas_03 (En su trabajo principal, usted: | ¿Recibe toda la información que necesita para realizar bien su trabajo?), p40_cond_trab_istas_06 (En su trabajo principal: | Su superior directo, ¿está dispuesto a escuchar sus problemas en el trabajo?) y p40_cond_trab_istas_07 (En su trabajo principal: | ¿Recibe ayuda y apoyo de su superior directo?). Sin embargo, p40_cond_trab_istas_03 tiene relación con p40_cond_trab_istas_04 (En su trabajo principal, usted: | ¿Se le exigen cosas contradictorias en el trabajo?) y p40_cond_trab_istas_05 (En su trabajo principal, usted: | ¿Tiene que hacer tareas que usted cree que deberían hacerse de otra manera?).


psicosoc_1f_sin_p3 <- "
psicosoc =~  p38_cond_trab_sal_psi+  p39_cond_trab_cult_org+  p40_cond_trab_istas_01+  p40_cond_trab_istas_02+ p40_cond_trab_istas_06+ p40_cond_trab_istas_07+ p40_cond_trab_istas_08+  p40_cond_trab_istas_09+ p40_cond_trab_istas_04+  p40_cond_trab_istas_05"

psicosoc_2f_sin_p3 <- "
car_cul_tr =~  p39_cond_trab_cult_org+  p40_cond_trab_istas_01+  p40_cond_trab_istas_02+ p40_cond_trab_istas_04+ p40_cond_trab_istas_05  
rel_personas =~ p38_cond_trab_sal_psi+ p40_cond_trab_istas_06+ p40_cond_trab_istas_07+ p40_cond_trab_istas_08+ p40_cond_trab_istas_09
"
psicosoc_3f_sin_p3 <- "
rel_par_ext=~ p38_cond_trab_sal_psi+ p40_cond_trab_istas_08+ p40_cond_trab_istas_09
rel_sup =~ p40_cond_trab_istas_06+ p40_cond_trab_istas_07
car_cul_trab=~ p40_cond_trab_istas_04+ p40_cond_trab_istas_05+ p39_cond_trab_cult_org+ p40_cond_trab_istas_01+ p40_cond_trab_istas_02
"
psicosoc_4f_sin_p3 <- "
amb_cul =~ p38_cond_trab_sal_psi+  p39_cond_trab_cult_org
ex_psi =~  p40_cond_trab_istas_01+  p40_cond_trab_istas_02  
con_rol =~ p40_cond_trab_istas_04+  p40_cond_trab_istas_05
cal_res =~ p40_cond_trab_istas_06+ p40_cond_trab_istas_07+ p40_cond_trab_istas_08+ p40_cond_trab_istas_09
"
psicosoc_5f_sin_p3 <- "
amb_cul =~ p38_cond_trab_sal_psi+  p39_cond_trab_cult_org
ex_psi =~  p40_cond_trab_istas_01+  p40_cond_trab_istas_02  
con_rol =~ p40_cond_trab_istas_04+  p40_cond_trab_istas_05
rel_par_ext =~ p40_cond_trab_istas_08+ p40_cond_trab_istas_09
rel_sup =~ p40_cond_trab_istas_06+ p40_cond_trab_istas_07
"

psicosoc_1f_sin_p3_mod<- lavaan::cfa(psicosoc_1f_sin_p3, data = dim_suseso_p38_p39_p40_original[complete.cases(dim_suseso_p38_p39_p40_original),-5], ordered=names(dim_suseso_p38_p39_p40_original)[-5], estimator= "WLSMV", warn = T)
psicosoc_2f_sin_p3_mod<- lavaan::cfa(psicosoc_2f_sin_p3, data = dim_suseso_p38_p39_p40_original[complete.cases(dim_suseso_p38_p39_p40_original),-5], ordered=names(dim_suseso_p38_p39_p40_original)[-5], estimator= "WLSMV", warn = T)
psicosoc_3f_sin_p3_mod<- lavaan::cfa(psicosoc_3f_sin_p3, data = dim_suseso_p38_p39_p40_original[complete.cases(dim_suseso_p38_p39_p40_original),-5], ordered=names(dim_suseso_p38_p39_p40_original)[-5], estimator= "WLSMV", warn = T)
psicosoc_4f_sin_p3_mod<- lavaan::cfa(psicosoc_4f_sin_p3, data = dim_suseso_p38_p39_p40_original[complete.cases(dim_suseso_p38_p39_p40_original),-5], ordered=names(dim_suseso_p38_p39_p40_original)[-5], estimator= "WLSMV", warn = T)
psicosoc_5f_sin_p3_mod<- lavaan::cfa(psicosoc_5f_sin_p3, data = dim_suseso_p38_p39_p40_original[complete.cases(dim_suseso_p38_p39_p40_original),-5], ordered=names(dim_suseso_p38_p39_p40_original)[-5], estimator= "WLSMV", warn = T)

data.table::data.table(cbind(modelos= c("1 factor, Riesgos Psicosociales","2 factores", "3 factores", "4 factores","5 factores","1 factor, Riesgos Psicosociales","2 factores", "3 factores", "4 factores","5 factores"),
                             rbind(ajusteAFC(psicosoc_1f_inicial), 
                             ajusteAFC(psicosoc_2f_inicial),
                             ajusteAFC(psicosoc_3f_inicial),
                             ajusteAFC(psicosoc_4f_inicial),
                             ajusteAFC(psicosoc_5f_inicial),
                             ajusteAFC(psicosoc_1f_sin_p3_mod), 
                             ajusteAFC(psicosoc_2f_sin_p3_mod),
                             ajusteAFC(psicosoc_3f_sin_p3_mod),
                             ajusteAFC(psicosoc_4f_sin_p3_mod),
                             ajusteAFC(psicosoc_5f_sin_p3_mod)
                    )),keep.rownames = F) %>% 
  knitr::kable(.,format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
               caption = paste0("Tabla 20. Comparativo Índices de Ajuste de Modelos Propuestos para Preguntas sobre Riesgos Psicosociales (más modelos sin pregunta 03 y 10)"),
               align =c('l',rep('c', 101)),
               col.names = c("Modelos","Código", "gl","WLS X2","CMIN/df","aGFI","GFI", "RMSEA\n[IC 90%]","CFit","CFI","NNFI")) %>%
      kableExtra::column_spec(1:2, width = "5em")%>%
  kableExtra::pack_rows("Variables iniciales", 1, 5) %>%
  kableExtra::pack_rows("Sin pregunta 3 y 10", 6, 10) %>%
  kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 12)
Tabla 20. Comparativo Índices de Ajuste de Modelos Propuestos para Preguntas sobre Riesgos Psicosociales (más modelos sin pregunta 03 y 10)
Modelos Código gl WLS X2 CMIN/df aGFI GFI RMSEA [IC 90%] CFit CFI NNFI
Variables iniciales
1 factor, Riesgos Psicosociales psicosoc_1f_inicial 54 1574.285 29.153 0.869 0.937 0.232[0.222-0.241] 0.000 0.907 0.887
2 factores psicosoc_2f_inicial 53 728.888 13.753 0.938 0.971 0.156[0.146-0.166] 0.000 0.959 0.949
3 factores psicosoc_3f_inicial 51 601.732 11.799 0.947 0.976 0.143[0.133-0.154] 0.000 0.966 0.957
4 factores psicosoc_4f_inicial 48 252.646 5.263 0.976 0.990 0.090[0.079-0.101] 0.000 0.988 0.983
5 factores psicosoc_5f_inicial 44 140.464 3.192 0.986 0.994 0.065[0.053-0.077] 0.022 0.994 0.991
Sin pregunta 3 y 10
1 factor, Riesgos Psicosociales psicosoc_1f_sin_p3_mod 35 1447.357 41.353 0.844 0.935 0.277[0.265-0.290] 0.000 0.906 0.880
2 factores psicosoc_2f_sin_p3_mod 34 607.703 17.874 0.933 0.973 0.179[0.167-0.192] 0.000 0.962 0.950
3 factores psicosoc_3f_sin_p3_mod 32 443.952 13.874 0.948 0.980 0.157[0.144-0.170] 0.000 0.973 0.962
4 factores psicosoc_4f_sin_p3_mod 29 166.133 5.729 0.978 0.993 0.095[0.081-0.109] 0.000 0.991 0.986
5 factores psicosoc_5f_sin_p3_mod 25 35.121 1.405 0.995 0.998 0.028[0.000-0.048] 0.969 0.999 0.999

A partir de la tabla anterior, podemos observar que los modelos mejoran ostensiblemente una vez eliminado los ítemes 03 y 10, particularmente el modelo de 5 factores.


psicosoc_5f_sin_p3_mod_mi<-
  subset(lavaan::modindices(psicosoc_5f_sin_p3_mod)[order(lavaan::modindices(psicosoc_5f_sin_p3_mod)$mi, decreasing=TRUE), ], mi > 5 & abs(sepc.all)>0.2)%>%
  data.frame()%>%
  dplyr::mutate(lhs=paste0(lhs,op,rhs))%>%
  dplyr::mutate(mi=sprintf("%04.2f",mi))%>%
  dplyr::mutate(sepc.all=sprintf("%04.2f",sepc.all))%>%
  dplyr::select(lhs,mi,sepc.all)
  
  knitr::kable(psicosoc_5f_sin_p3_mod_mi,format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
               caption = paste0("Tabla 21. Índices de Modificación, Modelo de 5 Factores Preguntas sobre Riesgo Psicosocial (sin p. 3 y 10)"),
               align =c('l',rep('c', 101)),
               col.names = c("Relación entre variables","Índice de Modificación", "Cambio esperado del parámetro Estandarizado (SEPC)"))%>%
    kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 12) %>%
    kableExtra::row_spec(which(grepl("p40_cond_trab_istas_09",psicosoc_5f_sin_p3_mod_mi$lhs)), bold= T, color= "white", background= "tomato")%>%
   kableExtra::row_spec(which(grepl("p40_cond_trab_istas_09",psicosoc_5f_inicial_mi$rhs)), bold= T, color= "white", background= "tomato")%>%
  kableExtra::add_footnote(c("Nota. En color rojo, parámetros a estudiar","=~ : efecto de una variable observada en una variable latente","~~: covarianza entre los errores de dos variables observadas"),
                            notation = "none")%>%
  kableExtra::scroll_box(width = "100%", height = "375px")
Tabla 21. Índices de Modificación, Modelo de 5 Factores Preguntas sobre Riesgo Psicosocial (sin p. 3 y 10)
Relación entre variables Índice de Modificación Cambio esperado del parámetro Estandarizado (SEPC)
139 rel_sup=~p40_cond_trab_istas_09 14.94 -0.50
138 rel_sup=~p40_cond_trab_istas_08 14.94 0.47
146 p38_cond_trab_sal_psi~~p40_cond_trab_istas_09 14.22 0.47
104 amb_cul=~p40_cond_trab_istas_08 13.96 -0.55
105 amb_cul=~p40_cond_trab_istas_09 13.96 0.59
125 rel_par_ext=~p39_cond_trab_cult_org 10.27 0.35
124 rel_par_ext=~p38_cond_trab_sal_psi 10.27 0.37
116 con_rol=~p38_cond_trab_sal_psi 8.62 0.36
117 con_rol=~p39_cond_trab_cult_org 8.62 0.34
181 p40_cond_trab_istas_08~~p40_cond_trab_istas_07 6.81 1.31
121 con_rol=~p40_cond_trab_istas_09 6.76 -0.20
183 p40_cond_trab_istas_09~~p40_cond_trab_istas_07 5.28 -1.45
Nota. En color rojo, parámetros a estudiar
=~ : efecto de una variable observada en una variable latente
~~: covarianza entre los errores de dos variables observadas

Si bien el ítem p40_cond_trab_istas_09 (En su trabajo principal: | ¿Hay un buen ambiente entre usted y sus compañeros y compañeras de trabajo?) se encuentra bastante relacionada al constructo ambiente y cultura, lo cual se estima bastante razonable debido a su contenido. Sin embargo, dicho constructo no responde del todo al origen de los ítems, cuyo elemento central es la relación de la/el encuestada/o con sus pares.


# https://rdrr.io/cran/semTools/man/htmt.html

semTools::htmt(psicosoc_5f_sin_p3, dim_suseso_p38_p39_p40_original[,-c(5,12)], sample.cov = NULL, missing = 'listwise', ordered = names(dim_suseso_p38_p39_p40_original)[-c(5,12)], absolute = TRUE)%>% 
  as.data.table(keep.rownames = T) %>% 
  dplyr::mutate(across(where(is.numeric), ~ round(.x, 2))) %>% 
  knitr::kable(format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
               caption = paste0("Tabla 22. Validez Discriminante"),
               align =c('l',rep('c', 101)),
               col.names = c("Var. Latentes","Ambiente y Cultura", "Exigencias\nPsicológicas", "Conflicto\nde Rol", "Relación con\nPares y Ext.", "Relación con\nSuperiores"))%>%
    kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 12) %>%
  kableExtra::add_footnote(c("Nota. "),
                            notation = "none")%>%
  kableExtra::scroll_box(width = "100%", height = "375px")
Tabla 22. Validez Discriminante
Var. Latentes Ambiente y Cultura Exigencias Psicológicas Conflicto de Rol Relación con Pares y Ext. Relación con Superiores
amb_cul 1.00 0.44 0.73 0.68 0.59
ex_psi 0.44 1.00 0.64 0.26 0.15
con_rol 0.73 0.64 1.00 0.47 0.47
rel_par_ext 0.68 0.26 0.47 1.00 0.62
rel_sup 0.59 0.15 0.47 0.62 1.00
Nota.
#  Technically, the HTMT provides two advantages over the disattenuated construct score correlation: The HTMT does not require a factor analysis to obtain factor loadings, nor does it require the calculation of construct scores. This allows for determining the HTMT even if the raw data is not available, but the correlation matrix is. Furthermore, HTMT builds on the available measures and data and—contrary to the standard MTMM approach—does not require simultaneous surveying of the same theoretical concept with alternative measurement approaches. Therefore, this approach does not suffer from the standard MTMM approach’s well-known issues regarding data requirements and parallel measures (Schmitt 1978; Schmitt and Stults 1986).
# We suggest assessing the heterotrait-monotrait ratio (HTMT) of the correlations, which is the average of the heterotrait-heteromethod correlations (i.e., the correlations of indicators across constructs measuring different phenomena), relative to the average of the monotrait-heteromethod correlations 

#Use the HTMT criterion to assess discriminant validity! If the HTMT value is below 0.90, discriminant validity has been established between two reflective constructs. 

No se constatan valores mayores a .90, lo que añade evidencia a que los constructos se encuentran diferenciados entre ellos.


#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_
#Para ver el número de parámetros
#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_

if(no_mostrar==1){
for (i in 2:100){
  ano<-i
  try(semPlot::semPaths(psicosoc_5f_sin_p3_mod, 
                  residuals=T, 
                  what="std", 
                  label.cex=1.5, 
                  edge.label.cex=1,
                  fade=FALSE,
                  thresholds = F,
                  edge.label.position=rep(.5,ano),
                  filetype="pdf",
                  filename=paste0("Número de parámetros ",ano),
                  intercepts=F)
    )
  }
}
#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_
#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_
semPlot::semPaths(psicosoc_5f_sin_p3_mod, 
                  residuals=T, 
                  what="std", 
                  label.cex=1.5, 
                  edge.label.cex=1,
                  fade=FALSE,
                  thresholds = F,
                  #58 en total
                  edge.label.position=c(rep(c(0.45,0.55),6),
                                        rep(c(0.45,0.55),6),rep(c(0.45,0.55),6),rep(0.5,5),
                                        rep(0.5,14)), #11  it, #17 #14 parámetros para las cargas
                  nodeLabels=c("p38","p39","p40_1","p40_2","p40_4",
                                           "p40_5","p40_8","p40_9",
                                           "p40_6", "p40_7",
                                           "Amb.\nCult","Ex.Psi.","Conflicto","Rel.Pares", "Rel.Sup."),
                  intercepts=F, 
                  curveAdjacent = TRUE,
                  title=F, 
                  layout="tree3",
                  sizeMan=5, 
                  gui = T, 
                  allVars = FALSE,
                  cut=1.1,
                  sizeLat=5, 
                  edge.color="black",
                  curvePivot=T,
                  borders=FALSE, 
                  edge.width = 0.5, 
                  node.width =1, 
                  node.height= 1,
                  label.scale=T,
                  curve = 1.5,
                  mar = c(5.8, 0.8, 7.8, 0.8))
Figura 11. Cargas factoriales estandarizadas y comunalidades para preguntas sobre Riesgos Psicosociales (solución de 5 factores, sin p. 3 y 10)

Figura 11. Cargas factoriales estandarizadas y comunalidades para preguntas sobre Riesgos Psicosociales (solución de 5 factores, sin p. 3 y 10)

Es importante observar la gran medida de unicidad de los ítems de salud psicológica de compañeros de trabajo y cultura organizacional perjudicial de la organización. Se ha documentado que ítems con distintas categorías de respuesta, a pesar de ser estandarizados, pudiesen presentar menores cargas factoriales. De todas formas, teniendo en cuenta el adecuado ajuste del modelo factorial, el tamaño de la muestra (>500), el origen teórico común del resto de las preguntas y considerando los valores discriminantes, decidimos conservar este factor a pesar de no haber alcanzado una magnitud mayor a 0.7, siendo factible desplazar el punto de corte a 0.6 (Awang et al. 2016).


dim_suseso_p38_p39_p40_sin_it310<-dim_suseso_p38_p39_p40%>% dplyr::select(-p40_cond_trab_istas_03_num_psicosoc , -p40_cond_trab_istas_10_num_psicosoc )%>% na.omit()

alfa_dim_psicosoc_p38_39_p40_sin_it_310<-psych::alpha(dim_suseso_p38_p39_p40_sin_it310[complete.cases(dim_suseso_p38_p39_p40_sin_it310),],
                                        use="complete.obs",n.obs=nrow(dim_suseso_p38_p39_p40_sin_it310),check.keys=T)

var_lab_p38_39_40<- attributes(surveymonkey_accionsalududp_df2_cor)$"variable.labels"[c(grep("p38|p39|p40", colnames(surveymonkey_accionsalududp_df2_cor)))]


alfa_dim_psicosoc_despues_eliminacion_items<-psych::alpha(dim_suseso_p38_p39_p40_sin_it310, use="complete.obs", n.obs=nrow(dim_suseso_p38_p39_p40_sin_it310))
## Some items ( p39_cond_trab_cult_org_num_psicosoc p40_cond_trab_istas_01_num_psicosoc p40_cond_trab_istas_02_num_psicosoc p40_cond_trab_istas_04_num_psicosoc p40_cond_trab_istas_05_num_psicosoc ) were negatively correlated with the total scale and 
## probably should be reversed.  
## To do this, run the function again with the 'check.keys=TRUE' option
hetcor_matp40_2_sin310<-hetcor(dim_suseso_p38_p39_p40_sin_it310, ML = T, std.err = T, use="complete.obs", bins=4, pd=TRUE)#


alfa_ord_psicosoc_sin_310<-alpha(hetcor_matp40_2_sin310$correlations,#polychoric(data.matrix(dim_sm_p345_original))$rho,
                   use="complete.obs",
                   n.iter= clus_iter,
                   check.keys=T,
                   n.obs=nrow(dim_suseso_p38_p39_p40_sin_it310[complete.cases(dim_suseso_p38_p39_p40_sin_it310),])
)

numeric_alfa_ord_psicosoc<-
  scan(text = as.character(capture.output(print(alfa_ord_psicosoc))[11]), what = " ") %>% 
  readr::parse_number()

Una vez eliminados ambos ítems, se obtiene un alfa de cronbach de (alfa= 0.82).


3) Resiliencia (Autoeficacia)

III.1) Normalidad Multivariada

#,starts_with("p4_afront"),starts_with("p5_animo")
scale2 <- function(x, na.rm = FALSE) (x - mean(x, na.rm = na.rm)) / sd(x, na.rm)

options(knitr.kable.NA = '')
dim_resil_p42<-surveymonkey_accionsalududp_df2_cor %>%dplyr::mutate_at(.vars=vars(c("p42_resiliencia_1","p42_resiliencia_2","p42_resiliencia_3")),.funs = list(`num_resil`=~scale2(as.numeric(.),na.rm=T))) %>% 
  dplyr::select(ends_with("num_resil")) 

MVN::mvn(dim_resil_p42[complete.cases(dim_resil_p42),], subset = NULL, mvnTest = "mardia", covariance = TRUE, tol = 1e-25, alpha = 0.5,scale = FALSE, desc = TRUE, transform = "none", R = 1000,univariateTest = "Lillie",univariatePlot = "none", multivariatePlot = "none",multivariateOutlierMethod = "none", bc = FALSE, bcType = "rounded",showOutliers = FALSE, showNewData = FALSE)$multivariateNormality%>%
  data.frame()%>%
  dplyr::mutate(across(c("Statistic","p.value"),~ifelse(grepl("NA",.),NA_real_,as.numeric(as.character(.)))))%>%
  dplyr::mutate(Statistic=sprintf("%8.2f",Statistic))%>%
  dplyr::mutate(p.value=sprintf("%5.3f",p.value))%>%
  dplyr::mutate(across(c("Statistic","p.value"),~ifelse(grepl("NA",.),"-",as.character(.))))%>%
   knitr::kable(.,format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
               caption = paste0("Tabla 23. Normalidad Multivariada, Resiliencia"),
               col.names = c("Prueba","Estadistico","Valor p","Normalidad"),
align =c('l',rep('c', 101)))%>%
    kableExtra::add_footnote(c("Nota. Mardia Skewness= Asimetría Multivariante de Mardia (1970); Mardia Kurtosis= Curtosis Multivariante de Mardia (1970); Las escalas fueron estandarizadas a valores Z"), notation = "none")%>%
  kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 13)
Tabla 23. Normalidad Multivariada, Resiliencia
Prueba Estadistico Valor p Normalidad
Mardia Skewness 333.60 0.000 NO
Mardia Kurtosis 20.15 0.000 NO
MVN
NO
Nota. Mardia Skewness= Asimetría Multivariante de Mardia (1970); Mardia Kurtosis= Curtosis Multivariante de Mardia (1970); Las escalas fueron estandarizadas a valores Z

Por lo visto en la tabla anterior, las variables que conforman esta escala no cumplen con la propiedad de normalidad multivariada. En vista de lo anterior, deberán asumirse métodos de análisis que no asuman dicha normalidad en las variables manifiestas.


III.2) Adecuación para el Análisis Factorial

A partir de la prueba de esfericidad se puede concluir que los datos son adecuados para el análisis factorial (X2 de Barlett (10,523)= 683.47, p<0.001) (Barlett 1937).


#LOS ARGUMENTOS DEBEN SER NUMÉRICOS, NO PUEDEN SER ORDINALES
#_#_#_#_#_#_#_#_#_#_#_
dim_resil_p42_gral<-surveymonkey_accionsalududp_df2_cor %>% 
  dplyr::select("p42_resiliencia_1","p42_resiliencia_2","p42_resiliencia_3")

dim_resil_p42_num<- surveymonkey_accionsalududp_df2_cor %>% dplyr::mutate_at(.vars=vars(c("p42_resiliencia_1","p42_resiliencia_2","p42_resiliencia_3")),.funs = list(`num_resil`=~as.numeric(.))) %>% 
  dplyr::select(ends_with("num_resil")) %>% 
  na.omit() %>% 
  data.frame()

cbind(Modelos=c("Resiliencia"),
      KMO=round(psych::KMO(na.omit(dim_resil_p42_num))$MSA,2)) %>% 
    knitr::kable(.,format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
                 caption = paste0("Tabla 24. Keyser-Meyer-Olkin"),
                 align =c('l',rep('c', 101)))%>%
    #kableExtra::add_footnote(c("Nota. Los ítems son")), notation = "none")%>%
    kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 13)  
Tabla 24. Keyser-Meyer-Olkin
Modelos KMO
Resiliencia 0.71
#el índice Kaiser Meyer Olkin (KMO), el cual toma valores entre 0 y 1. La medida puede ser interpretada con distintos lineamientos; sin embargo, los más utilizados son: valores menores de 0,5 se consideran inaceptables; de 0,5 a 0,59, pobres; de 0,6 a 0,79, regulares, y de 0,8 a 1, meritorios. Este índice toma el valor de 1 solo en el caso de que una variable sea perfectamente predicha.
# Méndez Martínez, Carolina, & Rondón Sepúlveda, Martín Alonso. (2012). Introducción al análisis factorial exploratorio. Revista Colombiana de Psiquiatría, 41(1), 197-207. Retrieved February 24, 2021, from http://www.scielo.org.co/scielo.php?script=sci_arttext&pid=S0034-74502012000100014&lng=en&tlng=es.

Los valores KMO obtenidos indican una adecuación aceptable pero mediocre para llevar a cabo el análisis factorial.


III.3) Matriz de correlaciones Policóricas

Se generó una matriz de correlaciones heterogéneas con las preguntas correspondientes a resiliencia.


#<div style="border: 1px solid #ddd; padding: 5px; overflow-y: scroll; height:600px; overflow-x: scroll; width:100%;">

require(polycor)
#max-height:150%; overflow: scroll;
#Computes a heterogenous correlation matrix, consisting of Pearson product-moment correlations between numeric variables, polyserial correlations between numeric and ordinal variables, and polychoric correlations between ordinal variables.

#dim_resil_p42_num = numerico
#dim_resil_p42_gral = general
#dim_resil_p42 = escalado z

var_lbls_p42<-
  cbind.data.frame(vars=names(surveymonkey_accionsalududp_df2_cor)[grep("p42_", colnames(surveymonkey_accionsalududp_df2_cor))],
    label=attributes(surveymonkey_accionsalududp_df2_cor)$"variable.labels"[grep("p42_", colnames(surveymonkey_accionsalududp_df2_cor))])

hetcor_matp42_2<-hetcor(dim_resil_p42_gral, ML = T, std.err = T, use="complete.obs", bins=4, pd=TRUE)#

hetcor_matp42_2_df<-
reshape2::melt(tibble::as_tibble(hetcor_matp42_2$correlations,rownames = "rowname")) %>% 
    dplyr::left_join(melt(tibble::as_tibble(hetcor_matp42_2$tests,rownames = "rowname")),by=c("rowname","variable")) %>% 
  dplyr::rename("Var1"="rowname", "Var2"="variable", "corr"="value.x", "pval"="value.y") %>% 
  dplyr::mutate(Var1=factor(Var1, levels=var_lbls_p42$vars)) %>% 
  dplyr::mutate(Var2=factor(Var2, levels=var_lbls_p42$vars)) %>% 
  dplyr::left_join(var_lbls_p42, by=c("Var1"="vars")) %>% 
  dplyr::left_join(var_lbls_p42, by=c("Var2"="vars")) %>% 
  dplyr::rename("Var1_lab"="label.x", "Var2_lab"="label.y")

pd3 <- hetcor_matp42_2_df %>% 
  dplyr::mutate(data_id = paste0(Var1, '-', Var2),
         tooltip = paste0('Y: ',Var1_lab, '<br>', 'X: ',Var2_lab, '<br>Rho: ', round(as.numeric(corr), 2), 
                          '<br>p', ifelse(pval<.001,"<0.001",paste0("=",sprintf("%.4f",pval)))))

p3 <- ggplot(pd3) +
  geom_tile_interactive(aes(Var2,Var1, fill = corr,
                            tooltip = tooltip
                            ), color = "gray")  +
  scale_fill_gradient2(low = "#E46726", high = "#6D9EC1",
                       mid = "white", midpoint = 0, limit = c(-1, 1), space = "Lab",
                       name = "Corr") +
  geom_text(mapping = aes(x = Var1, y = Var2, label = round(corr, 2)), size = 2) +
  ggplot2::coord_fixed() +
  theme_minimal() +
  theme(axis.text.x = element_blank())+
  theme(axis.text.y = element_blank())+
  guides(fill = FALSE) +
  xlab("") + ylab("")
girafe(ggobj = p3)

Figura 12. Matriz de Correlaciones Policóricas de las Variables sobre Resiliencia


III.4) Confiabilidad

Generamos pruebas de confiabilidad.


alfa_dim_resil_p42<- psych::alpha(data.frame(na.omit(dim_resil_p42_num)),use="complete.obs", n.obs= nrow(data.frame(na.omit(dim_resil_p42_num))), check.keys=T)

var_lab_p42<- attributes(surveymonkey_accionsalududp_df2_cor)$"variable.labels"[c(grep("p42", colnames(surveymonkey_accionsalududp_df2_cor)))]

data.table(cbind.data.frame(var_lab_p42,alfa_dim_resil_p42$alpha.drop),
           keep.rownames = T)%>%
    dplyr::mutate(var_lab_p42=dplyr::case_when(grepl("-$",rn)~paste0(var_lab_p42," (REVERTIDO)"),
                                                     T~var_lab_p42)) %>% 
    dplyr::select(var_lab_p42, raw_alpha, std.alpha,`G6(smc)`)%>%
    dplyr::mutate_at(vars(raw_alpha, std.alpha,`G6(smc)`),~round(.,2)) %>% 
   knitr::kable(.,format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
               caption = paste0("Tabla 25a. Alfa si se elimina un ítem, Preguntas sobre Resiliencia",paste0("(alfa= ",round(alfa_dim_resil_p42$total$std.alpha,2),", SMC= ",round(alfa_dim_resil_p42$total$`G6(smc`,2),")")),
               col.names = c("Ítem","Alfa Bruto","Alfa Est.","SMC"),
align =c('l',rep('c', 101)))%>%
    kableExtra::add_footnote(c("Nota. SMC= Correlaciones Múltiples al Cuadrado"), notation = "none")%>%
  kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 12)
Tabla 25a. Alfa si se elimina un ítem, Preguntas sobre Resiliencia(alfa= 0.83, SMC= 0.77)
Ítem Alfa Bruto Alfa Est. SMC
De los enunciados a continuación, indique la opción que mejor se aplique a usted: | Puedo confiar en mis habilidades en situaciones difíciles. 0.80 0.80 0.67
De los enunciados a continuación, indique la opción que mejor se aplique a usted: | Soy capaz de resolver la mayoría de los problemas por mi cuenta. 0.74 0.74 0.59
De los enunciados a continuación, indique la opción que mejor se aplique a usted: | Usualmente puedo resolver bien las tareas desafiantes y complejas. 0.73 0.74 0.58
Nota. SMC= Correlaciones Múltiples al Cuadrado

No se constatan ítemes cuya eliminación signifique una mejora de la confiabilidad.


#Contreras Espinoza S, Novoa-Muñoz F. Ventajas del alfa ordinal respecto al alfa de Cronbach ilustradas con la encuesta AUDIT-OMS. Rev Panam Salud Publica. 2018;42:e65. https://doi.org/10.26633/ RPSP.2018.65

alfa_ord_resi<-alpha(hetcor_matp42_2$correlations,#polychoric(data.matrix(dim_sm_p345_original))$rho,
                   use="complete.obs",
                   n.iter= clus_iter,
                   n.obs=nrow(dim_resil_p42_num[complete.cases(dim_resil_p42_num),])
)

numeric_alfa_ord_resi<-
  scan(text = as.character(capture.output(print(alfa_ord_resi))[11]), what = " ") %>% 
  readr::parse_number()

data.table(cbind.data.frame(var_lab_p42,
                            alfa_ord_resi$alpha.drop),
           keep.rownames = T)%>%
  dplyr::select(var_lab_p42, raw_alpha, std.alpha)%>%
  dplyr::mutate_at(vars(raw_alpha, std.alpha),~round(.,2)) %>% 
  knitr::kable(.,format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
               caption = paste0("Tabla 25b. Alfa si se elimina un ítem Resiliencia",
                                paste0("(alfa ordinal= ",round(alfa_ord_resi$total$std.alpha,2),", SMC= ",round(alfa_ord_resi$total$`G6(smc`,2),")")),
               col.names = c("Ítem","Alfa Ordinal Bruto","Alfa Ordinal Est."),
               align =c('l',rep('c', 101)))%>%
  kableExtra::add_footnote(c("Nota. SMC= Correlaciones Múltiples al Cuadrado"), notation = "none")%>%
  kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 11)
Tabla 25b. Alfa si se elimina un ítem Resiliencia(alfa ordinal= 0.91, SMC= 0.87)
Ítem Alfa Ordinal Bruto Alfa Ordinal Est.
De los enunciados a continuación, indique la opción que mejor se aplique a usted: | Puedo confiar en mis habilidades en situaciones difíciles. 0.90 0.90
De los enunciados a continuación, indique la opción que mejor se aplique a usted: | Soy capaz de resolver la mayoría de los problemas por mi cuenta. 0.85 0.85
De los enunciados a continuación, indique la opción que mejor se aplique a usted: | Usualmente puedo resolver bien las tareas desafiantes y complejas. 0.85 0.85
Nota. SMC= Correlaciones Múltiples al Cuadrado


III.5) Unidimensionalidad


cbind.data.frame(Modelos=c("Resiliencia"),
                 rbind(psych::unidim(dim_resil_p42_num,cor= "poly")$uni))%>% 
  dplyr::select(`Modelos`,`u`,`Unidim.A`,`alpha`,`av.r`,`median.r`) %>% 
  dplyr::mutate_if(is.numeric, round, 2) %>% 
   knitr::kable(.,format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
               caption = paste0("Tabla 26. Unidimensionalidad, Resiliencia"),
               col.names = c("Modelos","Undimiensionalidad Cruda","Unidimensionalidad Ajustada","Alfa estandarizado","Promedio de la Correlación entre ítems (ICC)", "Mediana de la correlación entre ítems (ICC)"),
align =c('l',rep('c', 101)))%>%
    #kableExtra::add_footnote(c("Nota. Los ítems son")), notation = "none")%>%
  kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 13)  
Tabla 26. Unidimensionalidad, Resiliencia
Modelos Undimiensionalidad Cruda Unidimensionalidad Ajustada Alfa estandarizado Promedio de la Correlación entre ítems (ICC) Mediana de la correlación entre ítems (ICC)
Resiliencia 1 1 0.91 0.76 0.74
# When finding pairwise correlations, should we use the global values of the tau parameter (which is somewhat faster), or the local values (global=FALSE)? The local option is equivalent to the polycor solution, or to doing one correlation at a time. global=TRUE borrows information for one item pair from the other pairs using those item's frequencies. This will make a difference in the presence of lots of missing data. With very small sample sizes with global=FALSE and correct=TRUE, the function will fail (for as yet underdetermined reasons.

##Koo and Li (2016) gives the following suggestion for interpreting ICC (Koo and Li 2016):
#below 0.50: poor
#between 0.50 and 0.75: moderate
#between 0.75 and 0.90: good
#above 0.90: excellent

A partir de la tabla anterior, se observa una alta unidimensionalidad.


III.6) Análisis Factorial Exploratorio (AFE)

Para el presente modelo que asume observaciones completas en variables de resiliencia(autoeficacia), se estiman 523 casos. En vista de que tenemos una dimensión capturada y 3 ítems en total, decidimos generar estructuras factoriales competidoras que asumen de 1 a 2 factores latentes.


VSS.scree(hetcor_matp42_2$correlations, main="")
Figura 13. Gráfico de Codo de Catell, Matriz Policórica Preguntas sobre Resiliencia

Figura 13. Gráfico de Codo de Catell, Matriz Policórica Preguntas sobre Resiliencia

#Es tal vez la técnica más utilizada. El aporte se mide con los valores propios, que representan el total de varianza explicada por el factor. El criterio utilizado para su uso se basa en tomar para el análisis solo aquellos factores que tengan valores propios mayores a 1
# Al igual que en el criterio anterior, depende de los valores propios, pero se diferencia porque los valores son graficados y se hace un análisis visual buscando en la curva un punto de inflexión donde esta cambie de sentido o de concavidad. Un problema que puede llegar a presentar es ser muy subjetivo y, por lo tanto, depender básicamente del criterio del investigador. No se recomienda cuando el número de variables en análisis es muy alto y la contribución de los nuevos ítems es similar 

# Méndez Martínez, Carolina, & Rondón Sepúlveda, Martín Alonso. (2012). Introducción al análisis factorial exploratorio. Revista Colombiana de Psiquiatría, 41(1), 197-207. Retrieved February 24, 2021, from http://www.scielo.org.co/scielo.php?script=sci_arttext&pid=S0034-74502012000100014&lng=en&tlng=es.

A partir del gráfico de codos, se puede interpretar que el número óptimo de factores con valores propios superiores a 1, sería igual a 1.


# Presaghi, Fabio & Desimoni, Marta. (2015). Title A Parallel Analysis With Polychoric Correlation Matrices. 10.13140/RG.2.1.4380.2640. 

random.polychor.pa(data.matrix=data.matrix(dim_resil_p42_gral), nrep=500, q.eigen=0.99, r.seed=1234)
## ***** RESULTS FOR PARALLEL ANALYSIS ***** 
## *** computation starts at: 17:36:45 
## *** number of units (rows) in data.matrix: 875 
## *** LISTWISE deletion needed. The new sample size is: 523 
## *** SINGLE sample Parallel Analysis 
## *** simulation method: RANDOM 
## *** distribution: UNIFORM 
## *** difficulty factor: FALSE 
## *** correction for continuity set to: 0.0 
## *** number of variables (cols) in data.matrix: 3 
## *** Groups of items with diffent number of categories found in your data.matrix: 
##         Items Categories Min.Cat Max.Cat
## 1 GROUP     3          4       1       4
## 
## Computations for sub-sample:  1 
##  The first simulation for FA took: 0.024 secs.
## 25 % - 50 % - 75 % - 100 % completed!
##  The first simulation for PCA took: 0.019 secs.
## 25 % - 50 % - 75 % - 100 % completed!
## computation ended at: 17:37:05 
## Elapsed Time: 0 mins 
## 
##  Comparison between RANDOM eigenvalues and EMPIRICAL eigenvalues 
## 
## ******* RESULTS for PARALLEL ANALYSIS:  
##                                                                  sample.1
## # of factors (PCA) for Velicer MAP criterium (Pearson corr)...:         1
## # of factors (PCA) for Velicer MAP(4th power)(Polychoric corr):         1
## # of factors (PCA) for Velicer MAP criterium (Polychoric corr):         1
## # of factors (PCA) for Velicer MAP(4th power)(Pearson corr)...:         1
## # of factors (PCA) for PA method (Polychoric Corr.)...........:         1
## # of factors (PCA) for PA method (Pearson Corr.)..............:         1
## # of factors for PA method (Polychoric Corr.).................:         1
## # of factors for PA method (Pearson Corr.)....................:         1
Figura 14. Gráfico de Codo, Matriz Policórica Preguntas sobre Resiliencia

Figura 14. Gráfico de Codo, Matriz Policórica Preguntas sobre Resiliencia

#This means that the function guarantees that the empirical and the simulated data matrix are similar, but this also means that by changing the sample of participants the simulated data will change (even if slightly).

#The function will extract the eigenvalues from each randomly generated polychoric matrices and the requested percentile is returned. Eigenvalues from polychoric correlation matrix obtained from real data is also compute and compared, in a (scree) plot, with the eigenvalues extracted from the simulation (Polychoric matrices). Recently, Cho, Li & Bandalos (2009) showed that, in using PA method, it is important to match the type of the correlation matrix used to recover the eigenvalues from real data with the type of correlation matrix used to estimate random eigenvalues. Crossing the type of correlations (using Polychoric correlation matrix to estimate real eigenvalues and random simulated Pearson correlation matrices) may result in a wrong decision (i.e., retaining more non-random factors than the needed). A comparison with eigenvalues extracted from both randomly simulated Pearson correlation matrices and real data is also included. Finally, for both type of correlation matrix (Polychoric vs Pearson), the two versions (the classic squared coefficient and the 4th power coefficient) of Velicer's MAP criterion are calculated (Velicer, 1976; Velicer, Eaton, & Fava, 2000) by implementing under R the code released by O'Connor (2000) for SPSS, SAS and MATLAB. As the poly.mat() function used to calculate the polychoric correlation matrix is going to be deprecated in favour of polychoric() function, the random.polychor.pa was consequently updated (version 1.1.2) to account for changes in psych() package.

#FUENTE:
### https://www.rdocumentation.org/packages/random.polychor.pa/versions/1.1.3.1/topics/random.polychor.pa
### https://stats.stackexchange.com/questions/31948/looking-for-a-step-through-an-example-of-a-factor-analysis-on-dichotomous-data

#:#:#::#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:
invisible("IMPORTANTE PENSAR QUE NO SE SI LA CORRECCIÖN DE CONTINUIDAD QUE USA HETCOR VALE CONSERVARLA")
#https://stackoverflow.com/questions/59167406/hetcor-can-one-add-a-correction-for-continuity
#https://stackoverflow.com/questions/59167406/hetcor-can-one-add-a-correction-for-continuity

#The continuity parameter is passed to polychoric() function to handle the correction for continuity. In polychoric() function this correction for continuity is set by default to .5 (i.e. correct=TRUE). However in some cases this correction for continuity causes the polychorich() function to stop unexpectedly and consequently also random.polychor.pa() stops. So we added this parameter to allow users to bypass this problem. This parameter is set by default to 0.0 (i.e., no correction for continuity applied) and user may add the correction for continuity by setting the value to 0.5.

#random.polychor.pa(data.matrix=data.matrix(dim_sm_p345), nrep=500, q.eigen=0.99, r.seed=1234,continuity=0.5)

#this parameter allows to choose between uniform (that is also the default) or multinomial distribution for the simulation of random data sets.

A partir del parallel analysis, se obtiene 1 variable latente.


mod_1_factor_era_resil<-
psych::fa(hetcor_matp42_2$correlations,
           nfactors= 1, 
           cor= "poly", 
           fm= "pa", 
           use="complete.obs", 
           n.obs= nrow(dim_suseso_p38_p39_p40_original[complete.cases(dim_suseso_p38_p39_p40_original),]),
           #n.iter=500, 
           rotate="oblimin")

DiagrammeR::grViz("
digraph Factor  {
  rankdir=RL;
  size='8,6';
  node [fontname='Helvetica' fontsize=14 shape=box, width=2];
  edge [fontname='Helvetica' fontsize=10];
V1  [label = 'p42_resiliencia_1'];
V2  [label = 'p42_resiliencia_2'];
V3  [label = 'p42_resiliencia_3'];
node [shape=ellipse, width ='1'];
PA1-> V1 [ label = 0.8 ];
PA1-> V2 [ label = 0.9 ];
PA1-> V3 [ label = 0.9 ];
{ rank=same;
V1;V2;V3;}{ rank=same;
PA1;}}")

Figura 15. Cargas factoriales para preguntas sobre Resiliencia, Análisis Factorial Exploratorio


III.7) Análisis Factorial Confirmatorio(AFC)

Dado que es un modelo que pordría tener problemas de identificación debido a la cantidad de parámetros, introduciremos a la estimación el método de estanndarización de la varianza, en el que fija la varianza del actor a 1 pero estima libremente todas las cargas factoriales como se señala en este enlace.


library(lavaan)  
library(semPlot)
library(semTools)
  # Latent variables

resil_1f_inicial_form <- "
resil =~  p42_resiliencia_1+ p42_resiliencia_2+ p42_resiliencia_3"


resil_1f_inicial<- lavaan::cfa(resil_1f_inicial_form, data = dim_resil_p42_gral[complete.cases(dim_resil_p42_gral),], ordered=names(dim_resil_p42_gral), estimator= "WLSMV", warn = T,std.lv=T)

#summary(resil_1f_inicial,fit.measures = TRUE, standardized = TRUE)
data.table::data.table(cbind(modelos= c("1 factor"),
                             rbind(ajusteAFC(resil_1f_inicial))),keep.rownames = F) %>% 
  knitr::kable(.,format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
               caption = paste0("Tabla 27. Comparativo Índices de Ajuste de Modelos Propuestos para Preguntas sobre Resiliencia"),
               align =c('l',rep('c', 101)),
               col.names = c("Modelos","Código", "gl","WLS X2","CMIN/df","aGFI","GFI", "RMSEA\n[IC 90%]","CFit","CFI","NNFI")) %>%
      #kableExtra::row_spec(1, bold= T, color= "black", background= "white")%>%
  kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 12)
Tabla 27. Comparativo Índices de Ajuste de Modelos Propuestos para Preguntas sobre Resiliencia
Modelos Código gl WLS X2 CMIN/df aGFI GFI RMSEA [IC 90%] CFit CFI NNFI
1 factor resil_1f_inicial 0 0.000 NaN 1.000 1.000 0.000[0.000-0.000] NA 1.000 1.000

Cabe señalar que este es un modelo saturado. Es esperable que ahbiendo calculado sólo una variable latente existan 3 varianzas y 3 covarianzas, por lo que el parámetro a ser estimado sean 3 varianzas de error y 3 cargas factoriales. En este caso, los grados de libertad son 0 (3 elementos - 3 parámetros a estimar).


#Cargas factoriales.
afc_lambda_std_resil<-
    data.table::data.table(lavaan::lavInspect(resil_1f_inicial, what = "std", add.labels = TRUE)$`lambda`,keep.rownames = T) %>% 
    dplyr::left_join(cols_labels, by=c("rn"="V1")) %>% 
    dplyr::select(V2,everything()) %>% 
    dplyr::mutate(across(where(is.numeric), ~ round(.x, 2))) %>% 
    dplyr::mutate(across(where(is.numeric), ~ ifelse(.x==0,NA,.x))) 
for (i in 1:nrow(afc_lambda_std_resil)){
    afc_lambda_std_resil$V2[i]<-stringr::str_wrap(afc_lambda_std_resil$V2[i], width = 40, indent = 0, exdent = 0)
}

#R cuadrado var latentes
afc_psi_std_resil<-
    cbind.data.frame(V2=c("Resiliencia"),
                     data.table::data.table(lavaan::lavInspect(resil_1f_inicial, what = "std", add.labels = TRUE)$psi,keep.rownames = T)) %>% 
    dplyr::mutate(across(where(is.numeric), ~ round(.x, 2))) %>% 
    dplyr::mutate(across(where(is.numeric), ~ ifelse(.x==1,NA,.x))) 

rbind.data.frame(afc_lambda_std_resil) %>% 
    knitr::kable(format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
                 caption = paste0("Tabla 28. Cargas Factoriales, Resiliencia"),
                 align =c('l',rep('c', 101))) %>% 
                 #col.names = c("Ítem","Código", 
                  #             "Ambiente y Cultura", "Exigencias\nPsicológicas", "Conflicto\nde Rol", "Relación con\nPares y Ext.", "Relación con\nSuperiores"))%>%
    kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 12) %>%
    kableExtra::add_footnote(c("Nota. "),
                             notation = "none")%>%
    kableExtra::scroll_box(width = "100%", height = "275px")
Tabla 28. Cargas Factoriales, Resiliencia
V2 rn resil
De los enunciados a continuación, indique la opción que mejor se aplique a usted: | Puedo confiar en mis habilidades en situaciones difíciles. p42_resiliencia_1 0.82
De los enunciados a continuación, indique la opción que mejor se aplique a usted: | Soy capaz de resolver la mayoría de los problemas por mi cuenta. p42_resiliencia_2 0.90
De los enunciados a continuación, indique la opción que mejor se aplique a usted: | Usualmente puedo resolver bien las tareas desafiantes y complejas. p42_resiliencia_3 0.91
Nota.
#A factor with 2 variables is only considered reliable when the variables are highly correlated with each another (r > .70) but fairly uncorrelated with other variables. Yong, A. G., & Pearce, S. (2013, p. 80).


#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_
#Para ver el número de parámetros
#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_

if(no_mostrar==1){
for (i in 2:100){
  ano<-i
  try(semPlot::semPaths(resil_1f_inicial, 
                  residuals=T, 
                  what="std", 
                  label.cex=1.5, 
                  edge.label.cex=1,
                  fade=FALSE,
                  thresholds = F,
                  edge.label.position=rep(.5,ano),
                  filetype="pdf",
                  filename=paste0("Número de parámetros ",ano),
                  intercepts=F)
    )
  }
}
#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_
#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_
semPlot::semPaths(resil_1f_inicial, 
                  residuals=T, 
                  what="std", 
                  label.cex=c(2,2,2,4), 
                  edge.label.cex=1,
                  fade=FALSE,
                  thresholds = F,
                  #58 en total
                  edge.label.position=c(rep(c(0.45,0.55),1),
                                        rep(c(0.45,0.55),2),rep(0.5,4)), #10 pars
                  nodeLabels=c("p42_1","p42_2","p42_3",
                                           "Resiliencia"),
                  intercepts=F, 
                  curveAdjacent = TRUE,
                  title=F, 
                  layout="tree3",
                  sizeMan=5, 
                  gui = T, 
                  allVars = FALSE,
                  cut=1.1,
                  sizeLat=5, 
                  edge.color="black",
                  curvePivot=T,
                  borders=FALSE, 
                  edge.width = 0.5, 
                  node.width =1, 
                  node.height= 1,
                  label.scale=T,
                  curve = 1.5,
                  mar = c(5.8, 0.8, 7.8, 0.8))
Figura 16. Cargas factoriales estandarizadas y comunalidades para preguntas sobre Resiliencia (Autoeficacia) (solución de 1 factor)

Figura 16. Cargas factoriales estandarizadas y comunalidades para preguntas sobre Resiliencia (Autoeficacia) (solución de 1 factor)

4) Situación COVID-19, Elementos de Protección y Medidas Implementadas

asdasd

#p6_exp_c19_pac_cont:¿Cuántos PACIENTES contagiados con COVID-19 (con sospecha y/o confirmado) hay en total en su lugar de trabajo principal, en la última semana? *Se reducen las alternativas de respuesta (se colapsan en Más de 100.)
#p7_exp_c19_trab_cont:¿Cuántos TRABAJADORES contagiados con COVID-19 (con sospecha y/o confirmado) hay en total en su lugar de trabajo principal, en la última semana? *Se reducen las alternativas de respuesta (se colapsan en Más de 25.)
#p8_exp_c19_cerca_cont:¿Qué  tan cercano es el contacto que usted tiene con pacientes con COVID-19? *Se reducen las alternativas de respuesta a 4
#p9_exp_c19_exp_sit_dg_03:¿Ha experimentado alguna de las siguientes situaciones, desde el primer caso diagnosticado en el país? (por favor marque las que apliquen a su caso) | Le solicitaron que trabajara a pesar de la exposición a COVID-19. *Sí No, cambiado a V/F
#p9_exp_c19_exp_sit_dg_05:¿Ha experimentado alguna de las siguientes situaciones, desde el primer caso diagnosticado en el país? (por favor marque las que apliquen a su caso) | Le solicitaron que trabajara a pesar de los síntomas. *Sí No, cambiado a V/F
#p9_exp_c19_exp_sit_dg_09:¿Ha experimentado alguna de las siguientes situaciones, desde el primer caso diagnosticado en el país? (por favor marque las que apliquen a su caso) | Dio positivo en el examen para descartar COVID-19. *Sí No, cambiado a V/F
#p9_exp_c19_exp_sit_dg_10:¿Ha experimentado alguna de las siguientes situaciones, desde el primer caso diagnosticado en el país? (por favor marque las que apliquen a su caso) | Presentó formularios de compensación por contraer COVID-19 en el trabajo (Seguro de vida, enfermedad laboral). *Sí No, cambiado a V/F
#p10_exp_c19_preocupa_llevar:¿Se ha sentido preocupado por llevar el virus desde el trabajo a aquellos con los que vives y/o amigos?
#p11_exp_c19_miedo_pand:¿Cómo califica su nivel de miedo de la situación de pandemia al día de hoy?
#p14_contr_cont_cap_epp:¿Ha participado en alguna capacitación sobre el uso correcto de EPP’s?
#p15_contr_cont_14a_eval_cap:¿Cómo evaluaría la eficacia de las capacitaciones recibidas para trabajar de forma segura con el COVID-19?
#p16_contr_cont_conf_epps:¿Cuán confiado se siente al ponerse y quitarse los EPP’s de manera segura?


#p6_exp_c19_pac_cont p7_exp_c19_trab_cont p8_exp_c19_cerca_cont p9_exp_c19_exp_sit_dg_03 p9_exp_c19_exp_sit_dg_05 p9_exp_c19_exp_sit_dg_09 p9_exp_c19_exp_sit_dg_10 p10_exp_c19_preocupa_llevar  p11_exp_c19_miedo_pand p14_contr_cont_cap_epp p15_contr_cont_14a_eval_cap p16_contr_cont_conf_epps

IV.1) Normalidad Multivariada

#,starts_with("p4_afront"),starts_with("p5_animo")
scale2 <- function(x, na.rm = FALSE) (x - mean(x, na.rm = na.rm)) / sd(x, na.rm)

options(knitr.kable.NA = '')
dim_covid_sc<-surveymonkey_accionsalududp_df2_cor %>%dplyr::mutate_at(.vars=vars(c("p6_exp_c19_pac_cont", "p7_exp_c19_trab_cont", "p8_exp_c19_cerca_cont", "p9_exp_c19_exp_sit_dg_03", "p9_exp_c19_exp_sit_dg_05", 
"p9_exp_c19_exp_sit_dg_09", "p9_exp_c19_exp_sit_dg_10", "p10_exp_c19_preocupa_llevar",  "p11_exp_c19_miedo_pand", "p14_contr_cont_cap_epp", "p15_contr_cont_14a_eval_cap", "p16_contr_cont_conf_epps")),.funs = list(`num_covid_sc`=~scale2(as.numeric(.),na.rm=T))) %>% 
  dplyr::select(ends_with("num_covid_sc")) 

dim_covid_original<-surveymonkey_accionsalududp_df2_cor %>% dplyr::select("p6_exp_c19_pac_cont", "p7_exp_c19_trab_cont", "p8_exp_c19_cerca_cont", "p9_exp_c19_exp_sit_dg_03", "p9_exp_c19_exp_sit_dg_05", 
"p9_exp_c19_exp_sit_dg_09", "p9_exp_c19_exp_sit_dg_10", "p10_exp_c19_preocupa_llevar",  "p11_exp_c19_miedo_pand", "p14_contr_cont_cap_epp", "p15_contr_cont_14a_eval_cap", "p16_contr_cont_conf_epps")

dim_covid_num<-surveymonkey_accionsalududp_df2_cor %>%dplyr::mutate_at(.vars=vars(c("p6_exp_c19_pac_cont", "p7_exp_c19_trab_cont", "p8_exp_c19_cerca_cont", "p9_exp_c19_exp_sit_dg_03", "p9_exp_c19_exp_sit_dg_05", 
"p9_exp_c19_exp_sit_dg_09", "p9_exp_c19_exp_sit_dg_10", "p10_exp_c19_preocupa_llevar",  "p11_exp_c19_miedo_pand", "p14_contr_cont_cap_epp", "p15_contr_cont_14a_eval_cap", "p16_contr_cont_conf_epps")),.funs = list(`num_covid`=~as.numeric(.))) %>% 
  dplyr::select(ends_with("num_covid")) 


MVN::mvn(dim_covid_num[complete.cases(dim_covid_num),], subset = NULL, mvnTest = "mardia", covariance = TRUE, tol = 1e-25, alpha = 0.5,scale = FALSE, desc = TRUE, transform = "none", R = 1000,univariateTest = "Lillie",univariatePlot = "none", multivariatePlot = "none",multivariateOutlierMethod = "none", bc = FALSE, bcType = "rounded",showOutliers = FALSE, showNewData = FALSE)$multivariateNormality%>%
  data.frame()%>%
  dplyr::mutate(across(c("Statistic","p.value"),~ifelse(grepl("NA",.),NA_real_,as.numeric(as.character(.)))))%>%
  dplyr::mutate(Statistic=sprintf("%8.2f",Statistic))%>%
  dplyr::mutate(p.value=sprintf("%5.3f",p.value))%>%
  dplyr::mutate(across(c("Statistic","p.value"),~ifelse(grepl("NA",.),"-",as.character(.))))%>%
   knitr::kable(.,format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
               caption = paste0("Tabla 29. Normalidad Multivariada, Preguntas sobre Situación COVID-19"),
               col.names = c("Prueba","Estadistico","Valor p","Normalidad"),
align =c('l',rep('c', 101)))%>%
    kableExtra::add_footnote(c("Nota. Mardia Skewness= Asimetría Multivariante de Mardia (1970); Mardia Kurtosis= Curtosis Multivariante de Mardia (1970); Las escalas fueron estandarizadas a valores Z"), notation = "none")%>%
  kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 13)
Tabla 29. Normalidad Multivariada, Preguntas sobre Situación COVID-19
Prueba Estadistico Valor p Normalidad
Mardia Skewness 4206.41 0.000 NO
Mardia Kurtosis 24.39 0.000 NO
MVN
NO
Nota. Mardia Skewness= Asimetría Multivariante de Mardia (1970); Mardia Kurtosis= Curtosis Multivariante de Mardia (1970); Las escalas fueron estandarizadas a valores Z


IV.2) Adecuación para el Análisis Factorial

A partir de la prueba de esfericidad se puede concluir que los datos son adecuados para el análisis factorial (X2 de Barlett (66,439)= 450.17, p<0.001) (Barlett 1937).


#LOS ARGUMENTOS DEBEN SER NUMÉRICOS, NO PUEDEN SER ORDINALES
#_#_#_#_#_#_#_#_#_#_#_

cbind(Modelos=c("COVID-19"),
      KMO=round(psych::KMO(dim_covid_num)$MSA,2)) %>% 
    knitr::kable(.,format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
                 caption = paste0("Tabla 30. Keyser-Meyer-Olkin"),
                 align =c('l',rep('c', 101)))%>%
    #kableExtra::add_footnote(c("Nota. Los ítems son")), notation = "none")%>%
    kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 13)  
Tabla 30. Keyser-Meyer-Olkin
Modelos KMO
COVID-19 0.58
#el índice Kaiser Meyer Olkin (KMO), el cual toma valores entre 0 y 1. La medida puede ser interpretada con distintos lineamientos; sin embargo, los más utilizados son: valores menores de 0,5 se consideran inaceptables; de 0,5 a 0,59, pobres; de 0,6 a 0,79, regulares, y de 0,8 a 1, meritorios. Este índice toma el valor de 1 solo en el caso de que una variable sea perfectamente predicha.
# Méndez Martínez, Carolina, & Rondón Sepúlveda, Martín Alonso. (2012). Introducción al análisis factorial exploratorio. Revista Colombiana de Psiquiatría, 41(1), 197-207. Retrieved February 24, 2021, from http://www.scielo.org.co/scielo.php?script=sci_arttext&pid=S0034-74502012000100014&lng=en&tlng=es.

Los valores KMO obtenidos indican una adecuación aceptable pero mediocre para llevar a cabo el análisis factorial.

#<div style="border: 1px solid #ddd; padding: 5px; overflow-y: scroll; height:600px; overflow-x: scroll; width:100%;">

require(polycor)
#max-height:150%; overflow: scroll;
#Computes a heterogenous correlation matrix, consisting of Pearson product-moment correlations between numeric variables, polyserial correlations between numeric and ordinal variables, and polychoric correlations between ordinal variables.

#dim_resil_p42_num = numerico
#dim_resil_p42_gral = general
#dim_resil_p42 = escalado z

index_covid_vars<-
match(c("p6_exp_c19_pac_cont", "p7_exp_c19_trab_cont", "p8_exp_c19_cerca_cont", "p9_exp_c19_exp_sit_dg_03", "p9_exp_c19_exp_sit_dg_05", 
"p9_exp_c19_exp_sit_dg_09", "p9_exp_c19_exp_sit_dg_10", "p10_exp_c19_preocupa_llevar",  "p11_exp_c19_miedo_pand", "p14_contr_cont_cap_epp", "p15_contr_cont_14a_eval_cap", "p16_contr_cont_conf_epps"),names(surveymonkey_accionsalududp_df2_cor))

var_lbls_covid<-
  cbind.data.frame(vars=c("p6_exp_c19_pac_cont", "p7_exp_c19_trab_cont", "p8_exp_c19_cerca_cont", "p9_exp_c19_exp_sit_dg_03", "p9_exp_c19_exp_sit_dg_05", 
"p9_exp_c19_exp_sit_dg_09", "p9_exp_c19_exp_sit_dg_10", "p10_exp_c19_preocupa_llevar",  "p11_exp_c19_miedo_pand", "p14_contr_cont_cap_epp", "p15_contr_cont_14a_eval_cap", "p16_contr_cont_conf_epps"),
    label=attributes(surveymonkey_accionsalududp_df2_cor)$"variable.labels"[index_covid_vars])

hetcor_mat_covid<-hetcor(dim_covid_original, ML = T, std.err = T, use="complete.obs", bins=4, pd=TRUE)#

hetcor_mat_covid_df<-
reshape2::melt(tibble::as_tibble(hetcor_mat_covid$correlations,rownames = "rowname")) %>% 
    dplyr::left_join(melt(tibble::as_tibble(hetcor_mat_covid$tests,rownames = "rowname")),by=c("rowname","variable")) %>% 
  dplyr::rename("Var1"="rowname", "Var2"="variable", "corr"="value.x", "pval"="value.y") %>% 
  dplyr::mutate(Var1=factor(Var1, levels=var_lbls_covid$vars)) %>% 
  dplyr::mutate(Var2=factor(Var2, levels=var_lbls_covid$vars)) %>% 
  dplyr::left_join(var_lbls_covid, by=c("Var1"="vars")) %>% 
  dplyr::left_join(var_lbls_covid, by=c("Var2"="vars")) %>% 
  dplyr::rename("Var1_lab"="label.x", "Var2_lab"="label.y")

pd4 <- hetcor_mat_covid_df %>% 
  dplyr::mutate(data_id = paste0(Var1, '-', Var2),
         tooltip = paste0('Y: ',Var1_lab, '<br>', 'X: ',Var2_lab, '<br>Rho: ', round(as.numeric(corr), 2), 
                          '<br>p', ifelse(pval<.001,"<0.001",paste0("=",sprintf("%.4f",pval)))))

p4 <- ggplot(pd4) +
  geom_tile_interactive(aes(Var2,Var1, fill = corr,
                            tooltip = tooltip
                            ), color = "gray")  +
  scale_fill_gradient2(low = "#E46726", high = "#6D9EC1",
                       mid = "white", midpoint = 0, limit = c(-1, 1), space = "Lab",
                       name = "Corr") +
  geom_text(mapping = aes(x = Var1, y = Var2, label = round(corr, 2)), size = 2) +
  ggplot2::coord_fixed() +
  theme_minimal() +
  theme(axis.text.x = element_blank())+
  theme(axis.text.y = element_blank())+
  guides(fill = FALSE) +
  xlab("") + ylab("")
girafe(ggobj = p4)

Figura 17. Matriz de Correlaciones Policóricas de las Variables sobre Resiliencia


IV.4) Confiabilidad

Generamos pruebas de confiabilidad.


alfa_dim_covid_num<- psych::alpha(data.frame(na.omit(dim_covid_num)),use="complete.obs", n.obs= nrow(data.frame(na.omit(dim_covid_num))), check.keys=T)

data.table(cbind.data.frame(var_lbls_covid,alfa_dim_covid_num$alpha.drop),
           keep.rownames = T)%>%
    dplyr::mutate(label=dplyr::case_when(grepl("-$",rn)~paste0(label," (REVERTIDO)"),
                                                     T~label)) %>% 
    dplyr::select(label, raw_alpha, std.alpha,`G6(smc)`)%>%
    dplyr::mutate_at(vars(raw_alpha, std.alpha,`G6(smc)`),~round(.,2)) %>% 
   knitr::kable(.,format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
               caption = paste0("Tabla 31a. Alfa si se elimina un ítem, Preguntas sobre COVID",paste0("(alfa= ",round(alfa_dim_resil_p42$total$std.alpha,2),", SMC= ",round(alfa_dim_resil_p42$total$`G6(smc`,2),")")),
               col.names = c("Ítem","Alfa Bruto","Alfa Est.","SMC"),
align =c('l',rep('c', 101)))%>%
    kableExtra::add_footnote(c("Nota. SMC= Correlaciones Múltiples al Cuadrado"), notation = "none")%>%
  kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 12)
Tabla 31a. Alfa si se elimina un ítem, Preguntas sobre COVID(alfa= 0.83, SMC= 0.77)
Ítem Alfa Bruto Alfa Est. SMC
¿Cuántos PACIENTES contagiados con COVID-19 (con sospecha y/o confirmado) hay en total en su lugar de trabajo principal, en la última semana? 0.37 0.48 0.50
¿Cuántos TRABAJADORES contagiados con COVID-19 (con sospecha y/o confirmado) hay en total en su lugar de trabajo principal, en la última semana? 0.35 0.45 0.49
¿Qué  tan cercano es el contacto que usted tiene con pacientes con COVID-19? (REVERTIDO) 0.46 0.48 0.52
¿Ha experimentado alguna de las siguientes situaciones, desde el primer caso diagnosticado en el país? (por favor marque las que apliquen a su caso) | Le solicitaron que trabajara a pesar de la exposición a COVID-19. 0.38 0.44 0.49
¿Ha experimentado alguna de las siguientes situaciones, desde el primer caso diagnosticado en el país? (por favor marque las que apliquen a su caso) | Le solicitaron que trabajara a pesar de los síntomas. 0.40 0.48 0.52
¿Ha experimentado alguna de las siguientes situaciones, desde el primer caso diagnosticado en el país? (por favor marque las que apliquen a su caso) | Dio positivo en el examen para descartar COVID-19. 0.40 0.49 0.53
¿Ha experimentado alguna de las siguientes situaciones, desde el primer caso diagnosticado en el país? (por favor marque las que apliquen a su caso) | Presentó formularios de compensación por contraer COVID-19 en el trabajo (Seguro de vida, enfermedad laboral). 0.40 0.50 0.54
¿Se ha sentido preocupado por llevar el virus desde el trabajo a aquellos con los que vives y/o amigos? 0.33 0.45 0.47
¿Cómo califica su nivel de miedo de la situación de pandemia al día de hoy? 0.32 0.44 0.46
¿Ha participado en alguna capacitación sobre el uso correcto de EPP’s? 0.43 0.52 0.55
¿Cómo evaluaría la eficacia de las capacitaciones recibidas para trabajar de forma segura con el COVID-19? 0.38 0.47 0.51
¿Cuán confiado se siente al ponerse y quitarse los EPP’s de manera segura? (REVERTIDO) 0.39 0.48 0.51
Nota. SMC= Correlaciones Múltiples al Cuadrado

No se constatan ítemes cuya eliminación signifique una mejora de la confiabilidad.


#Contreras Espinoza S, Novoa-Muñoz F. Ventajas del alfa ordinal respecto al alfa de Cronbach ilustradas con la encuesta AUDIT-OMS. Rev Panam Salud Publica. 2018;42:e65. https://doi.org/10.26633/ RPSP.2018.65

alfa_ord_covid<-alpha(hetcor_mat_covid$correlations,#polychoric(data.matrix(dim_sm_p345_original))$rho,
                   use="complete.obs",
                   n.iter= clus_iter,
                   check.keys = T,
                   n.obs=nrow(dim_covid_num[complete.cases(dim_covid_num),])
)

numeric_alfa_ord_covid<-
  scan(text = as.character(capture.output(print(alfa_ord_resi))[11]), what = " ") %>% 
  readr::parse_number()

data.table(cbind.data.frame(var_lbls_covid,
                            alfa_ord_covid$alpha.drop),
           keep.rownames = T)%>%
  dplyr::select(rn, label, raw_alpha, std.alpha)%>%
  data.frame() %>% 
      dplyr::mutate(label=dplyr::case_when(grepl("-$",rn)~paste0(label," (REVERTIDO)"),
                                                     T~label)) %>% 
  dplyr::select(-rn) %>% 
    dplyr::mutate_at(vars(raw_alpha, std.alpha),~round(.,2)) %>% 
  knitr::kable(.,format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
               caption = paste0("Tabla 31b. Alfa si se elimina un ítem COVID",
                                paste0("(alfa ordinal= ",round(alfa_ord_covid$total$std.alpha,2),", SMC= ",round(alfa_ord_covid$total$`G6(smc`,2),")")),
               col.names = c("Ítem","Alfa Ordinal Bruto","Alfa Ordinal Est."),
               align =c('l',rep('c', 101)))%>%
  kableExtra::add_footnote(c("Nota. SMC= Correlaciones Múltiples al Cuadrado"), notation = "none")%>%
  kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 11)
Tabla 31b. Alfa si se elimina un ítem COVID(alfa ordinal= 0.64, SMC= 0.72)
Ítem Alfa Ordinal Bruto Alfa Ordinal Est.
¿Cuántos PACIENTES contagiados con COVID-19 (con sospecha y/o confirmado) hay en total en su lugar de trabajo principal, en la última semana? 0.63 0.63
¿Cuántos TRABAJADORES contagiados con COVID-19 (con sospecha y/o confirmado) hay en total en su lugar de trabajo principal, en la última semana? 0.61 0.61
¿Qué  tan cercano es el contacto que usted tiene con pacientes con COVID-19? (REVERTIDO) 0.62 0.62
¿Ha experimentado alguna de las siguientes situaciones, desde el primer caso diagnosticado en el país? (por favor marque las que apliquen a su caso) | Le solicitaron que trabajara a pesar de la exposición a COVID-19. 0.58 0.58
¿Ha experimentado alguna de las siguientes situaciones, desde el primer caso diagnosticado en el país? (por favor marque las que apliquen a su caso) | Le solicitaron que trabajara a pesar de los síntomas. 0.59 0.59
¿Ha experimentado alguna de las siguientes situaciones, desde el primer caso diagnosticado en el país? (por favor marque las que apliquen a su caso) | Dio positivo en el examen para descartar COVID-19. 0.63 0.63
¿Ha experimentado alguna de las siguientes situaciones, desde el primer caso diagnosticado en el país? (por favor marque las que apliquen a su caso) | Presentó formularios de compensación por contraer COVID-19 en el trabajo (Seguro de vida, enfermedad laboral). 0.63 0.63
¿Se ha sentido preocupado por llevar el virus desde el trabajo a aquellos con los que vives y/o amigos? 0.62 0.62
¿Cómo califica su nivel de miedo de la situación de pandemia al día de hoy? 0.60 0.60
¿Ha participado en alguna capacitación sobre el uso correcto de EPP’s? 0.66 0.66
¿Cómo evaluaría la eficacia de las capacitaciones recibidas para trabajar de forma segura con el COVID-19? 0.62 0.62
¿Cuán confiado se siente al ponerse y quitarse los EPP’s de manera segura? (REVERTIDO) 0.63 0.63
Nota. SMC= Correlaciones Múltiples al Cuadrado


IV.5) Unidimensionalidad


cbind.data.frame(Modelos=c("COVID"),
                 rbind(psych::unidim(na.omit(dim_covid_num),cor= "poly", check.keys = T)$uni))%>% 
  dplyr::select(`Modelos`,`u`,`Unidim.A`,`alpha`,`av.r`,`median.r`) %>% 
  dplyr::mutate_if(is.numeric, round, 2) %>% 
   knitr::kable(.,format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
               caption = paste0("Tabla 32. Unidimensionalidad, Resiliencia"),
               col.names = c("Modelos","Undimiensionalidad Cruda","Unidimensionalidad Ajustada","Alfa estandarizado","Promedio de la Correlación entre ítems (ICC)", "Mediana de la correlación entre ítems (ICC)"),
align =c('l',rep('c', 101)))%>%
    #kableExtra::add_footnote(c("Nota. Los ítems son")), notation = "none")%>%
  kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 13)  
## Error in polychoric(x, correct = correct): You have more than8 categories for your items, polychoric is probably not needed

IV.6) Análisis Factorial Exploratorio (AFE)

Para el presente modelo que asume observaciones completas en variables de resiliencia(autoeficacia), se estiman 523 casos. En vista de que tenemos una dimensión capturada y 3 ítems en total, decidimos generar estructuras factoriales competidoras que asumen de 1 a 2 factores latentes.


VSS.scree(hetcor_mat_covid$correlations, main="")
Figura 13. Gráfico de Codo de Catell, Matriz Policórica Preguntas sobre Resiliencia

Figura 13. Gráfico de Codo de Catell, Matriz Policórica Preguntas sobre Resiliencia

#Es tal vez la técnica más utilizada. El aporte se mide con los valores propios, que representan el total de varianza explicada por el factor. El criterio utilizado para su uso se basa en tomar para el análisis solo aquellos factores que tengan valores propios mayores a 1
# Al igual que en el criterio anterior, depende de los valores propios, pero se diferencia porque los valores son graficados y se hace un análisis visual buscando en la curva un punto de inflexión donde esta cambie de sentido o de concavidad. Un problema que puede llegar a presentar es ser muy subjetivo y, por lo tanto, depender básicamente del criterio del investigador. No se recomienda cuando el número de variables en análisis es muy alto y la contribución de los nuevos ítems es similar 

# Méndez Martínez, Carolina, & Rondón Sepúlveda, Martín Alonso. (2012). Introducción al análisis factorial exploratorio. Revista Colombiana de Psiquiatría, 41(1), 197-207. Retrieved February 24, 2021, from http://www.scielo.org.co/scielo.php?script=sci_arttext&pid=S0034-74502012000100014&lng=en&tlng=es.

A partir del gráfico de codos, se puede interpretar que el número óptimo de factores con valores propios superiores a 1, sería igual a 1.


# Presaghi, Fabio & Desimoni, Marta. (2015). Title A Parallel Analysis With Polychoric Correlation Matrices. 10.13140/RG.2.1.4380.2640. 

random.polychor.pa(data.matrix=data.matrix(dim_covid_original), nrep=500, q.eigen=0.99, r.seed=1234)
## ***** RESULTS FOR PARALLEL ANALYSIS ***** 
## *** computation starts at: 17:39:34 
## *** number of units (rows) in data.matrix: 875 
## *** LISTWISE deletion needed. The new sample size is: 439 
## *** SINGLE sample Parallel Analysis 
## *** simulation method: RANDOM 
## *** distribution: UNIFORM 
## *** difficulty factor: FALSE 
## *** correction for continuity set to: 0.0 
## *** number of variables (cols) in data.matrix: 12 
## *** Groups of items with diffent number of categories found in your data.matrix: 
##         Items Categories Min.Cat Max.Cat
## 1 GROUP     4          6       1       6
## 2 GROUP     1          7       1       7
## 3 GROUP     4          2       0       1
## 4 GROUP     1          5       1       5
## 5 GROUP     1         10       1      10
## 6 GROUP     1          4       1       4
## 
## Computations for sub-sample:  1
## Error in polychoric(matrix.3, global = FALSE, correct = continuity, weight = weights.sub): You have more than8 categories for your items, polychoric is probably not needed
#This means that the function guarantees that the empirical and the simulated data matrix are similar, but this also means that by changing the sample of participants the simulated data will change (even if slightly).

#The function will extract the eigenvalues from each randomly generated polychoric matrices and the requested percentile is returned. Eigenvalues from polychoric correlation matrix obtained from real data is also compute and compared, in a (scree) plot, with the eigenvalues extracted from the simulation (Polychoric matrices). Recently, Cho, Li & Bandalos (2009) showed that, in using PA method, it is important to match the type of the correlation matrix used to recover the eigenvalues from real data with the type of correlation matrix used to estimate random eigenvalues. Crossing the type of correlations (using Polychoric correlation matrix to estimate real eigenvalues and random simulated Pearson correlation matrices) may result in a wrong decision (i.e., retaining more non-random factors than the needed). A comparison with eigenvalues extracted from both randomly simulated Pearson correlation matrices and real data is also included. Finally, for both type of correlation matrix (Polychoric vs Pearson), the two versions (the classic squared coefficient and the 4th power coefficient) of Velicer's MAP criterion are calculated (Velicer, 1976; Velicer, Eaton, & Fava, 2000) by implementing under R the code released by O'Connor (2000) for SPSS, SAS and MATLAB. As the poly.mat() function used to calculate the polychoric correlation matrix is going to be deprecated in favour of polychoric() function, the random.polychor.pa was consequently updated (version 1.1.2) to account for changes in psych() package.

#FUENTE:
### https://www.rdocumentation.org/packages/random.polychor.pa/versions/1.1.3.1/topics/random.polychor.pa
### https://stats.stackexchange.com/questions/31948/looking-for-a-step-through-an-example-of-a-factor-analysis-on-dichotomous-data

#:#:#::#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:
invisible("IMPORTANTE PENSAR QUE NO SE SI LA CORRECCIÖN DE CONTINUIDAD QUE USA HETCOR VALE CONSERVARLA")
#https://stackoverflow.com/questions/59167406/hetcor-can-one-add-a-correction-for-continuity
#https://stackoverflow.com/questions/59167406/hetcor-can-one-add-a-correction-for-continuity

#The continuity parameter is passed to polychoric() function to handle the correction for continuity. In polychoric() function this correction for continuity is set by default to .5 (i.e. correct=TRUE). However in some cases this correction for continuity causes the polychorich() function to stop unexpectedly and consequently also random.polychor.pa() stops. So we added this parameter to allow users to bypass this problem. This parameter is set by default to 0.0 (i.e., no correction for continuity applied) and user may add the correction for continuity by setting the value to 0.5.

#random.polychor.pa(data.matrix=data.matrix(dim_sm_p345), nrep=500, q.eigen=0.99, r.seed=1234,continuity=0.5)

#this parameter allows to choose between uniform (that is also the default) or multinomial distribution for the simulation of random data sets.


```r
#Each of the procedures has its advantages and disadvantages. Using either the chi square test or the change in square test is, of course, sensitive to the number of subjects and leads to the nonsensical condition that if one wants to find many factors, one simply runs more subjects. Parallel analysis is partially sensitive to sample size in that for large samples the eigen values of random factors will be very small. The scree test is quite appealling but can lead to differences of interpretation as to when the scree "breaks". The eigen value of 1 rule, although the default for many programs, seems to be a rough way of dividing the number of variables by 3. Extracting interpretable factors means that the number of factors reflects the investigators creativity more than the data. VSS, while very simple to understand, will not work very well if the data are very factorially complex. (Simulations suggests it will work fine if the complexities of some of the items are no more than 2).

vss(hetcor_mat_covid$correlations, n=6,n.obs=nrow(dim_covid_original[complete.cases(dim_covid_original),]), use="complete cases", rotate="oblimin", cor= "poly", fm="pa", plot=F)
```

```
## 
## Very Simple Structure
## Call: vss(x = hetcor_mat_covid$correlations, n = 6, rotate = "oblimin", 
##     fm = "pa", n.obs = nrow(dim_covid_original[complete.cases(dim_covid_original), 
##         ]), plot = F, use = "complete cases", cor = "poly")
## VSS complexity 1 achieves a maximimum of 0.54  with  6  factors
## VSS complexity 2 achieves a maximimum of 0.65  with  6  factors
## 
## The Velicer MAP achieves a minimum of 0.03  with  1  factors 
## BIC achieves a minimum of  -18.67  with  6  factors
## Sample Size adjusted BIC achieves a minimum of  9.89  with  6  factors
## 
## Statistics by number of factors 
##   vss1 vss2   map dof chisq     prob sqresid  fit RMSEA BIC SABIC complex
## 1 0.35 0.00 0.033  54   682 1.3e-109    10.8 0.35 0.163 354 525.2     1.0
## 2 0.44 0.52 0.039  43   467  1.7e-72     8.1 0.52 0.150 205 341.4     1.4
## 3 0.46 0.55 0.051  33   277  2.2e-40     7.3 0.57 0.130  76 181.1     1.5
## 4 0.49 0.59 0.066  24   175  7.4e-25     6.4 0.62 0.120  29 104.9     1.5
## 5 0.54 0.62 0.082  16   115  4.1e-17     5.5 0.67 0.119  18  68.8     1.6
## 6 0.54 0.65 0.106   9    36  3.8e-05     4.8 0.71 0.083 -19   9.9     1.7
##   eChisq  SRMR eCRMS  eBIC
## 1    881 0.123 0.136 552.1
## 2    433 0.086 0.107 171.8
## 3    257 0.067 0.094  56.1
## 4    149 0.051 0.084   2.6
## 5     69 0.034 0.070 -28.6
## 6     22 0.020 0.053 -32.3
```

```r
vss(hetcor_mat_covid$correlations, n=6,n.obs=nrow(dim_covid_original[complete.cases(dim_covid_original),]), use="complete cases", rotate="oblimin",cor= "poly", fm="pa", plot=T,title="Estructura Muy Simple, \nFactrización de Eje Principales, Rotación Oblicua")
```

<div class="figure" style="text-align: center">
<img src="Propiedades_Psicometricas_corr_files/figure-html/vss_covid_2-1.png" alt="Figura 3. Estructura Simple Matriz Policórica, Preguntas de Salud Mental" width="768" />
<p class="caption">Figura 3. Estructura Simple Matriz Policórica, Preguntas de Salud Mental</p>
</div>

```
## 
## Very Simple Structure of  Estructura Muy Simple, 
## Factrización de Eje Principales, Rotación Oblicua 
## Call: vss(x = hetcor_mat_covid$correlations, n = 6, rotate = "oblimin", 
##     fm = "pa", n.obs = nrow(dim_covid_original[complete.cases(dim_covid_original), 
##         ]), plot = T, title = "Estructura Muy Simple, \nFactrización de Eje Principales, Rotación Oblicua", 
##     use = "complete cases", cor = "poly")
## VSS complexity 1 achieves a maximimum of 0.54  with  6  factors
## VSS complexity 2 achieves a maximimum of 0.65  with  6  factors
## 
## The Velicer MAP achieves a minimum of 0.03  with  1  factors 
## BIC achieves a minimum of  -18.67  with  6  factors
## Sample Size adjusted BIC achieves a minimum of  9.89  with  6  factors
## 
## Statistics by number of factors 
##   vss1 vss2   map dof chisq     prob sqresid  fit RMSEA BIC SABIC complex
## 1 0.35 0.00 0.033  54   682 1.3e-109    10.8 0.35 0.163 354 525.2     1.0
## 2 0.44 0.52 0.039  43   467  1.7e-72     8.1 0.52 0.150 205 341.4     1.4
## 3 0.46 0.55 0.051  33   277  2.2e-40     7.3 0.57 0.130  76 181.1     1.5
## 4 0.49 0.59 0.066  24   175  7.4e-25     6.4 0.62 0.120  29 104.9     1.5
## 5 0.54 0.62 0.082  16   115  4.1e-17     5.5 0.67 0.119  18  68.8     1.6
## 6 0.54 0.65 0.106   9    36  3.8e-05     4.8 0.71 0.083 -19   9.9     1.7
##   eChisq  SRMR eCRMS  eBIC
## 1    881 0.123 0.136 552.1
## 2    433 0.086 0.107 171.8
## 3    257 0.067 0.094  56.1
## 4    149 0.051 0.084   2.6
## 5     69 0.034 0.070 -28.6
## 6     22 0.020 0.053 -32.3
```

```r
invisible(c("Haciéndolo con todos los datos estandarizados"))
#vss(data.matrix(dim_sm_p345_original) %>%  standardize(), n=6,n.obs=nrow(dim_sm_p345_original[complete.cases(dim_sm_p345_original),]), use="complete cases", rotate="oblimin",cor= "poly", fm="pa", plot=T,title="Estructura Muy Simple, \nFactrización de Eje Principales, Rotación Oblicua")

invisible(c("Haciéndolo con todos la matriz policórica obtenida por el paquete hetcor"))
#vss(hetcor_mat$correlations, n=6,n.obs=nrow(dim_sm_p345_original[complete.cases(dim_sm_p345_original),]), use="complete cases", fm="pa", plot=T,title="Estructura Muy Simple, \nFactrización de Eje Principales, Rotación Oblicua")


#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_
#FUENTES:

# https://stats.stackexchange.com/questions/32669/vss-criterion-for-the-number-of-factors-in-rs-psych-package
# http://search.r-project.org/R/library/psych/html/VSS.html
# https://it.unt.edu/sites/default/files/vss_l_jds_dec2014.pdf
# http://dwoll.de/rexrepos/posts/multFApoly.html
#n is the maximum number of factors to extract  (default is 8)
#rotate is a string "none" or "varimax" for type of rotation (default is "none"
#:#:#:#:#:#:
#How to find the correlations: "cor" is Pearson", "cov" is covariance, "tet" is tetrachoric, "poly" is polychoric, "mixed" uses mixed cor for a mixture of tetrachorics, polychorics, Pearsons, biserials, and polyserials, Yuleb is Yulebonett, Yuleq and YuleY are the obvious Yule coefficients as appropriate

# It will produce normal factor analysis output but also will save the polychoric matrix (rho) and items difficulties (tau) for subsequent irt analyses.

#FUENTES
## http://www.psicothema.com/pdf/4206.pdf
```


A partir de la Tabla anterior, se encontró que una solución de 5 dimensiones también es razonable. De todas formas, se compararon los índices de ajuste de distintas soluciones factoriales, que asumen desde 1 hasta 10 variables latentes.


  library(psych)
 library(GPArotation)
 library(dplyr)
 library(plyr)
 library(knitr)

 efas <- list()

 for (i in 1:10) {
     fitn <- psych::fa(hetcor_mat_covid$correlations,
          nfactors= i, 
          cor= "poly", 
          fm= "pa", 
          use="complete.obs", 
          n.obs= nrow(dim_covid_original[complete.cases(dim_covid_original),]),
          #n.iter=500, 
          rotate="oblimin")
     efas[[i]] <- data.frame(fitn$TLI, fitn$RMSEA[1], fitn$RMSEA[2], fitn$RMSEA[3], fitn$rms, fitn$BIC) %>% 
     mutate(Factors = i,
            RMSEA_ci = paste0(round(fitn.RMSEA.2.,2),", ",round(fitn.RMSEA.3.,2))) %>% 
     dplyr::rename(TLI = fitn.TLI,
            RMSEA = fitn.RMSEA.1.,
            "RMSEA CI90%" = RMSEA_ci,
            SRMR = fitn.rms, 
            BIC = fitn.BIC) %>% 
     dplyr::select(Factors, TLI, RMSEA, "RMSEA CI90%", SRMR, BIC)
     }
## Error in data.frame(fitn$TLI, fitn$RMSEA[1], fitn$RMSEA[2], fitn$RMSEA[3], : arguments imply differing number of rows: 1, 0
do.call("rbind", efas)  %>%
   data.table::data.table(keep.rownames = F) %>% 
   dplyr::mutate_at(c(2,3,5),~round(as.numeric(.),2)) %>% 
   dplyr::mutate_at(c(6),~round(as.numeric(.),0)) %>% 
  knitr::kable(format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
               caption = paste0("Tabla 33. Comparación de Índices de Ajuste, Preguntas sobre Salud Mental"),
               #col.names = c("Prueba","Estadistico","Valor p","Normalidad"),
align =c('l',rep('c', 101)))%>%
    kableExtra::add_footnote(c("Nota. TLI= Tucker-Lewis Index; RMSEA= Root Mean Square Error of Approximation; SRMR= Standardized Root Mean Residual; BIC= Bayesian Information Criterion"), notation = "none")%>%
  kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 12)
Tabla 33. Comparación de Índices de Ajuste, Preguntas sobre Salud Mental
Factors TLI RMSEA RMSEA CI90% SRMR BIC
1 0.22 0.16 0.15, 0.17 0.12 354
2 0.34 0.15 0.14, 0.16 0.09 205
3 0.50 0.13 0.12, 0.14 0.07 76
4 0.58 0.12 0.1, 0.14 0.05 29
5 0.58 0.12 0.1, 0.14 0.03 18
6 0.80 0.08 0.06, 0.11 0.02 -19
7 0.50 0.13 0.09, 0.18 0.01 7
Nota. TLI= Tucker-Lewis Index; RMSEA= Root Mean Square Error of Approximation; SRMR= Standardized Root Mean Residual; BIC= Bayesian Information Criterion


modelo_6_factores_covid <-
psych::fa(hetcor_mat_covid$correlations,
          nfactors= 6, 
          cor= "poly", 
          fm= "pa", 
          use="complete.obs", 
          n.obs= nrow(dim_covid_original[complete.cases(dim_covid_original),]),
          #n.iter=500, 
          rotate="oblimin")

modelo_5_factores_covid <-
psych::fa(hetcor_mat_covid$correlations,
          nfactors= 5, 
          cor= "poly", 
          fm= "pa", 
          use="complete.obs", 
          n.obs= nrow(dim_covid_original[complete.cases(dim_covid_original),]),
          #n.iter=500, 
          rotate="oblimin")

modelo_1_factor_covid <-
psych::fa(hetcor_mat_covid$correlations, 
          nfactors= 1,
          cor= "poly", 
          fm= "pa", 
          use= "complete.obs", 
          n.obs= nrow(dim_covid_original[complete.cases(dim_covid_original),]),
          #n.iter=500, 
          rotate="oblimin") 
#En el caso de las rotaciones oblicuas, se parte del supuesto de correlación entre los nuevos factores, que en la vida real es el escenario más común, lo que conduce a que las ponderaciones calculadas no coincidan con las correlaciones entre el factor y la variable. Dentro de los métodos de rotación oblicua más utilizados se encuentran el oblimin y el promax. La rotación oblimin permite establecer relaciones jerárquicas entre los factores, para lo cual debe establecer el grado de inclinación (δ) entre ellos. Un valor δ de cero da las rotaciones más oblicuas (3,5).

#En cuanto a la rotación promax, modifica los resultados de una rotación ortogonal hasta crear una solución con cargas factoriales lo más próximas posible a la "estructura ideal". Para ello, eleva las cargas factoriales obtenidas en una rotación ortogonal a una determinada potencia (conocida como κ). En general, los valores de κ se encuentran entre 2 y 4, pero, a mayor potencia, mayor oblicuidad en la solución (el valor de κ más común es de 4) (3,5).

# Méndez Martínez, Carolina, & Rondón Sepúlveda, Martín Alonso. (2012). Introducción al análisis factorial exploratorio. Revista Colombiana de Psiquiatría, 41(1), 197-207. Retrieved February 24, 2021, from http://www.scielo.org.co/scielo.php?script=sci_arttext&pid=S0034-74502012000100014&lng=en&tlng=es.

#:#:#:#:#:#:#:#:#:#:#:#:#:#:
# The Root Mean Square Error of Approximation (RMSEA) provides information as to how well the model, with unknown but optimally chosen parameter estimates, would fit the population covariance matrix (Byrne, 1998).
# One of its key advantages is that the RMSEA calculates confidence intervals around its value.
# Values below .060 indicate close fit (Hu & Bentler, 1999). Values up to .080 are commonly accepted as adequate.
# The Standardized Root Mean Residual (SRMR) is the square root of the difference between the residuals of the sample covariance matrix and the hypothesized covariance model.
# As SRMR is standardized, its values range between 0 and 1. Commonly, models with values below .05 threshold are considered to indicate good fit (Byrne, 1998). Also, values up to .08 are acceptable (Hu & Bentler, 1999).
# TLI’s values may fall below zero or be above one (Hair et al., 2013). For CFI and TLI values above .95 are indicative of good fit (Hu & Bentler, 1999). In practice, CFI and TLI values from .90 to .95 are considered acceptable.


#Hair, R. D., Black, W. C., Babin, B. J., Anderson, R. E., & Tatham, R. L. (2013). Multivariate data analysis. Englewood Cliffs, NJ: Prentice–Hall.

#:#:#:#:#:#:#:#:#:#:#:#:#:#:
# Situaciones en que las saturaciones sean bajas (menor de .40) y el número de ítems por factor también sea bajo (3 ítems) requieren tamaños muestrales mayores para tener alguna garantía de generalización de los resultados. Como es habitual utilizar muestras de conveniencia hay que tener en cuenta dos problemas: la no-representatividad y la atenuación por restricción de rango.
# Lloret-Segura, Susana, Ferreres-Traver, Adoración, Hernández-Baeza, Ana, & Tomás-Marco, Inés. (2014). El Análisis Factorial Exploratorio de los Ítems: una guía práctica, revisada y actualizada. Anales de Psicología, 30(3), 1151-1169. https://dx.doi.org/10.6018/analesps.30.3.199361

modelo_cargas_fac_covid <-
data.frame(matrix(as.numeric(loadings(modelo_6_factores_covid)), attributes(loadings(modelo_6_factores_covid))$dim, dimnames=attributes(loadings(modelo_6_factores_covid))$dimnames))%>%
  dplyr::mutate_at(1:dim(loadings(modelo_6_factores_covid))[2], ~round(as.numeric(.),2)) %>% 
  dplyr::mutate_at(1:dim(loadings(modelo_6_factores_covid))[2], ~ifelse(.<.3,"-",as.character(.))) %>% 
  dplyr::select(PA1, PA2, PA3, PA4, PA5, PA6)

colnames(modelo_cargas_fac_covid)<- paste0(paste0("PA",1:attributes(loadings(modelo_6_factores_covid))$dim[2]),"\nR2=",round(modelo_6_factores_covid$R2,2))

modelo_cargas_fac_covid %>% 
  knitr::kable(format = "html", format.args = list(decimal.mark = ".", big.mark = ","),
               caption = paste0("Tabla 34. Cargas factoriales, Modelo de 6 factores Preguntas de COVID"),
               #col.names = c("Prueba","Estadistico","Valor p","Normalidad"),
align =c(rep('c', 101)))%>%
  kableExtra::add_footnote(c("Nota. Se omiten cargas factoriales menores a .3"), notation = "none")%>%  kableExtra::kable_styling(bootstrap_options = c("striped", "hover"),font_size = 12)
Tabla 34. Cargas factoriales, Modelo de 6 factores Preguntas de COVID
PA1 R2=1.17 PA2 R2=1.14 PA3 R2=1.02 PA4 R2=0.66 PA5 R2=0.69 PA6 R2=0.63
p6_exp_c19_pac_cont
1.07
p7_exp_c19_trab_cont
0.41
p8_exp_c19_cerca_cont
p9_exp_c19_exp_sit_dg_03 0.99
p9_exp_c19_exp_sit_dg_05
0.65
p9_exp_c19_exp_sit_dg_09
0.31
0.54
p9_exp_c19_exp_sit_dg_10
0.75
p10_exp_c19_preocupa_llevar
1.06
p11_exp_c19_miedo_pand
0.5
p14_contr_cont_cap_epp
p15_contr_cont_14a_eval_cap
0.42
p16_contr_cont_conf_epps
Nota. Se omiten cargas factoriales menores a .3

hay casos heywood


SEM

sem_form <- "
    RESIL =~  p42_resiliencia_1+ p42_resiliencia_2+ p42_resiliencia_3
    agot_est =~ p3_siente_1+  p3_siente_2+ p3_siente_3
    sueno =~ p3_siente_5+  p3_siente_6
    estres_post =~ p4_afront_1+ p4_afront_2+ p4_afront_3
    sint_ans =~ p5_animo_1+  p5_animo_2
    sint_dep=~ p5_animo_3+  p5_animo_4
    amb_cul =~ p38_cond_trab_sal_psi+  p39_cond_trab_cult_org
    ex_psi =~  p40_cond_trab_istas_01+  p40_cond_trab_istas_02  
    con_rol =~ p40_cond_trab_istas_04+  p40_cond_trab_istas_05
    rel_par_ext =~ p40_cond_trab_istas_08+ p40_cond_trab_istas_09
    rel_sup =~ p40_cond_trab_istas_06+ p40_cond_trab_istas_07
        
    SM =~  agot_est+  sueno+ estres_post+ sint_ans+ sint_dep
    PSICOSOC =~ amb_cul+ ex_psi+ con_rol+ rel_par_ext+ rel_sup
    
    SM~ PSICOSOC+RESIL+PSICOSOC:RESIL
    "
#No era una solución factible

sem_form2 <- "
    RESIL =~  p42_resiliencia_1+ p42_resiliencia_2+ p42_resiliencia_3
    SM =~ p3_siente_1+  p3_siente_2+ p3_siente_3+ p3_siente_5+  p3_siente_6+ p4_afront_1+ p4_afront_2+ p4_afront_3+ p5_animo_1+  p5_animo_2+ p5_animo_3+  p5_animo_4
    PSICOSOC =~ p38_cond_trab_sal_psi+  p39_cond_trab_cult_org+ p40_cond_trab_istas_01+  p40_cond_trab_istas_02+ p40_cond_trab_istas_04+  p40_cond_trab_istas_05+ p40_cond_trab_istas_08+ p40_cond_trab_istas_09+ p40_cond_trab_istas_06+ p40_cond_trab_istas_07

    SM~ PSICOSOC+RESIL
    "#+PSICOSOC:RESIL
#La interacción introdujo térmnos problemáticos

sem_form3_sin_p38 <- "
    RESIL =~  p42_resiliencia_1+ p42_resiliencia_2+ p42_resiliencia_3
    SM =~ p3_siente_1+  p3_siente_2+ p3_siente_3+ p3_siente_5+  p3_siente_6+ p4_afront_1+ p4_afront_2+ p4_afront_3+ p5_animo_1+  p5_animo_2+ p5_animo_3+  p5_animo_4
    PSICOSOC =~ p39_cond_trab_cult_org+ p40_cond_trab_istas_01+  p40_cond_trab_istas_02+ p40_cond_trab_istas_04+  p40_cond_trab_istas_05+ p40_cond_trab_istas_08+ p40_cond_trab_istas_09+ p40_cond_trab_istas_06+ p40_cond_trab_istas_07

    SM~ PSICOSOC+RESIL
    "#+PSICOSOC:RESIL
#

ord_vec<-
c("p42_resiliencia_1", "p42_resiliencia_2", "p42_resiliencia_3",
  "p3_siente_1",  "p3_siente_2", "p3_siente_3",
  "p3_siente_5",  "p3_siente_6",
  "p4_afront_1", "p4_afront_2", "p4_afront_3",
  "p5_animo_1",  "p5_animo_2", "p5_animo_3",  "p5_animo_4",
  "p38_cond_trab_sal_psi",  "p39_cond_trab_cult_org",
  "p40_cond_trab_istas_01",  "p40_cond_trab_istas_02",
  "p40_cond_trab_istas_04",  "p40_cond_trab_istas_05",
  "p40_cond_trab_istas_08", "p40_cond_trab_istas_09",
  "p40_cond_trab_istas_06", "p40_cond_trab_istas_07")

sem<- lavaan::sem(sem_form2, data = surveymonkey_accionsalududp_df2_cor[,ord_vec], ordered=ord_vec, estimator= "WLSMV", warn = T,std.lv=T)
summary(sem, fit.measures=TRUE, rsq=TRUE, standardized=TRUE)
## lavaan 0.6-7 ended normally after 31 iterations
## 
##   Estimator                                       DWLS
##   Optimization method                           NLMINB
##   Number of free parameters                        120
##                                                       
##                                                   Used       Total
##   Number of observations                           523         875
##                                                                   
## Model Test User Model:
##                                               Standard      Robust
##   Test Statistic                              2831.986    2197.350
##   Degrees of freedom                               272         272
##   P-value (Chi-square)                           0.000       0.000
##   Scaling correction factor                                  1.377
##   Shift parameter                                          140.942
##        simple second-order correction                             
## 
## Model Test Baseline Model:
## 
##   Test statistic                             51829.327   18071.736
##   Degrees of freedom                               300         300
##   P-value                                        0.000       0.000
##   Scaling correction factor                                  2.900
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    0.950       0.892
##   Tucker-Lewis Index (TLI)                       0.945       0.881
##                                                                   
##   Robust Comparative Fit Index (CFI)                            NA
##   Robust Tucker-Lewis Index (TLI)                               NA
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.134       0.116
##   90 Percent confidence interval - lower         0.130       0.112
##   90 Percent confidence interval - upper         0.139       0.121
##   P-value RMSEA <= 0.05                          0.000       0.000
##                                                                   
##   Robust RMSEA                                                  NA
##   90 Percent confidence interval - lower                        NA
##   90 Percent confidence interval - upper                        NA
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.113       0.113
## 
## Parameter Estimates:
## 
##   Standard errors                           Robust.sem
##   Information                                 Expected
##   Information saturated (h1) model        Unstructured
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   RESIL =~                                                              
##     p42_resilinc_1    0.852    0.026   32.289    0.000    0.852    0.852
##     p42_resilinc_2    0.870    0.023   37.870    0.000    0.870    0.870
##     p42_resilinc_3    0.912    0.022   41.705    0.000    0.912    0.912
##   SM =~                                                                 
##     p3_siente_1       0.659    0.022   29.654    0.000    0.741    0.741
##     p3_siente_2       0.737    0.019   39.350    0.000    0.829    0.829
##     p3_siente_3       0.729    0.019   38.799    0.000    0.819    0.819
##     p3_siente_5       0.774    0.017   44.632    0.000    0.870    0.870
##     p3_siente_6       0.761    0.018   42.405    0.000    0.855    0.855
##     p4_afront_1       0.585    0.024   24.035    0.000    0.657    0.657
##     p4_afront_2       0.677    0.020   33.267    0.000    0.762    0.762
##     p4_afront_3       0.658    0.021   30.640    0.000    0.740    0.740
##     p5_animo_1        0.721    0.020   36.856    0.000    0.811    0.811
##     p5_animo_2        0.682    0.020   33.699    0.000    0.767    0.767
##     p5_animo_3        0.619    0.023   26.483    0.000    0.696    0.696
##     p5_animo_4        0.692    0.019   35.632    0.000    0.779    0.779
##   PSICOSOC =~                                                           
##     p38_cnd_trb_s_    0.657    0.029   22.528    0.000    0.657    0.657
##     p39_cnd_trb_c_   -0.537    0.035  -15.159    0.000   -0.537   -0.537
##     p40_cnd_tr__01   -0.735    0.023  -32.365    0.000   -0.735   -0.735
##     p40_cnd_tr__02   -0.767    0.022  -34.177    0.000   -0.767   -0.767
##     p40_cnd_tr__04   -0.678    0.027  -24.780    0.000   -0.678   -0.678
##     p40_cnd_tr__05   -0.692    0.026  -26.204    0.000   -0.692   -0.692
##     p40_cnd_tr__08    0.518    0.034   15.324    0.000    0.518    0.518
##     p40_cnd_tr__09    0.550    0.033   16.789    0.000    0.550    0.550
##     p40_cnd_tr__06    0.902    0.016   55.986    0.000    0.902    0.902
##     p40_cnd_tr__07    0.885    0.018   48.858    0.000    0.885    0.885
## 
## Regressions:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   SM ~                                                                  
##     PSICOSOC          0.487    0.046   10.632    0.000    0.433    0.433
##     RESIL            -0.114    0.049   -2.314    0.021   -0.102   -0.102
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   RESIL ~~                                                              
##     PSICOSOC         -0.128    0.040   -3.224    0.001   -0.128   -0.128
## 
## Intercepts:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .p42_resilinc_1    0.000                               0.000    0.000
##    .p42_resilinc_2    0.000                               0.000    0.000
##    .p42_resilinc_3    0.000                               0.000    0.000
##    .p3_siente_1       0.000                               0.000    0.000
##    .p3_siente_2       0.000                               0.000    0.000
##    .p3_siente_3       0.000                               0.000    0.000
##    .p3_siente_5       0.000                               0.000    0.000
##    .p3_siente_6       0.000                               0.000    0.000
##    .p4_afront_1       0.000                               0.000    0.000
##    .p4_afront_2       0.000                               0.000    0.000
##    .p4_afront_3       0.000                               0.000    0.000
##    .p5_animo_1        0.000                               0.000    0.000
##    .p5_animo_2        0.000                               0.000    0.000
##    .p5_animo_3        0.000                               0.000    0.000
##    .p5_animo_4        0.000                               0.000    0.000
##    .p38_cnd_trb_s_    0.000                               0.000    0.000
##    .p39_cnd_trb_c_    0.000                               0.000    0.000
##    .p40_cnd_tr__01    0.000                               0.000    0.000
##    .p40_cnd_tr__02    0.000                               0.000    0.000
##    .p40_cnd_tr__04    0.000                               0.000    0.000
##    .p40_cnd_tr__05    0.000                               0.000    0.000
##    .p40_cnd_tr__08    0.000                               0.000    0.000
##    .p40_cnd_tr__09    0.000                               0.000    0.000
##    .p40_cnd_tr__06    0.000                               0.000    0.000
##    .p40_cnd_tr__07    0.000                               0.000    0.000
##     RESIL             0.000                               0.000    0.000
##    .SM                0.000                               0.000    0.000
##     PSICOSOC          0.000                               0.000    0.000
## 
## Thresholds:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##     p42_rslnc_1|t1   -2.528    0.202  -12.495    0.000   -2.528   -2.528
##     p42_rslnc_1|t2   -1.771    0.101  -17.533    0.000   -1.771   -1.771
##     p42_rslnc_1|t3   -0.464    0.057   -8.137    0.000   -0.464   -0.464
##     p42_rslnc_2|t1   -2.528    0.202  -12.495    0.000   -2.528   -2.528
##     p42_rslnc_2|t2   -1.594    0.089  -17.818    0.000   -1.594   -1.594
##     p42_rslnc_2|t3   -0.166    0.055   -3.013    0.003   -0.166   -0.166
##     p42_rslnc_3|t1   -2.528    0.202  -12.495    0.000   -2.528   -2.528
##     p42_rslnc_3|t2   -1.749    0.099  -17.594    0.000   -1.749   -1.749
##     p42_rslnc_3|t3   -0.259    0.056   -4.669    0.000   -0.259   -0.259
##     p3_siente_1|t1   -1.996    0.121  -16.566    0.000   -1.996   -1.996
##     p3_siente_1|t2   -0.961    0.065  -14.755    0.000   -0.961   -0.961
##     p3_siente_1|t3    0.147    0.055    2.664    0.008    0.147    0.147
##     p3_siente_1|t4    1.443    0.082   17.682    0.000    1.443    1.443
##     p3_siente_2|t1   -1.499    0.084  -17.776    0.000   -1.499   -1.499
##     p3_siente_2|t2   -0.753    0.061  -12.369    0.000   -0.753   -0.753
##     p3_siente_2|t3    0.259    0.056    4.669    0.000    0.259    0.259
##     p3_siente_2|t4    1.429    0.081   17.653    0.000    1.429    1.429
##     p3_siente_3|t1   -1.629    0.092  -17.799    0.000   -1.629   -1.629
##     p3_siente_3|t2   -0.799    0.062  -12.942    0.000   -0.799   -0.799
##     p3_siente_3|t3    0.259    0.056    4.669    0.000    0.259    0.259
##     p3_siente_3|t4    1.318    0.076   17.293    0.000    1.318    1.318
##     p3_siente_5|t1   -1.163    0.071  -16.447    0.000   -1.163   -1.163
##     p3_siente_5|t2   -0.524    0.058   -9.082    0.000   -0.524   -0.524
##     p3_siente_5|t3    0.235    0.055    4.234    0.000    0.235    0.235
##     p3_siente_5|t4    1.117    0.069   16.121    0.000    1.117    1.117
##     p3_siente_6|t1   -0.946    0.065  -14.603    0.000   -0.946   -0.946
##     p3_siente_6|t2   -0.294    0.056   -5.278    0.000   -0.294   -0.294
##     p3_siente_6|t3    0.406    0.057    7.187    0.000    0.406    0.406
##     p3_siente_6|t4    1.192    0.072   16.634    0.000    1.192    1.192
##     p4_afront_1|t1   -0.753    0.061  -12.369    0.000   -0.753   -0.753
##     p4_afront_1|t2    0.127    0.055    2.315    0.021    0.127    0.127
##     p4_afront_1|t3    0.866    0.063   13.745    0.000    0.866    0.866
##     p4_afront_1|t4    1.845    0.107   17.285    0.000    1.845    1.845
##     p4_afront_2|t1   -0.812    0.062  -13.104    0.000   -0.812   -0.812
##     p4_afront_2|t2    0.065    0.055    1.179    0.238    0.065    0.065
##     p4_afront_2|t3    0.631    0.059   10.699    0.000    0.631    0.631
##     p4_afront_2|t4    1.686    0.095   17.727    0.000    1.686    1.686
##     p4_afront_3|t1   -0.304    0.056   -5.452    0.000   -0.304   -0.304
##     p4_afront_3|t2    0.486    0.057    8.481    0.000    0.486    0.486
##     p4_afront_3|t3    1.074    0.068   15.778    0.000    1.074    1.074
##     p4_afront_3|t4    1.795    0.103   17.461    0.000    1.795    1.795
##     p5_animo_1|t1    -0.895    0.064  -14.061    0.000   -0.895   -0.895
##     p5_animo_1|t2     0.475    0.057    8.309    0.000    0.475    0.475
##     p5_animo_1|t3     1.307    0.076   17.245    0.000    1.307    1.307
##     p5_animo_2|t1    -1.126    0.070  -16.187    0.000   -1.126   -1.126
##     p5_animo_2|t2     0.142    0.055    2.577    0.010    0.142    0.142
##     p5_animo_2|t3     1.057    0.068   15.637    0.000    1.057    1.057
##     p5_animo_3|t1    -0.741    0.061  -12.204    0.000   -0.741   -0.741
##     p5_animo_3|t2     0.540    0.058    9.339    0.000    0.540    0.540
##     p5_animo_3|t3     1.390    0.079   17.550    0.000    1.390    1.390
##     p5_animo_4|t1    -0.691    0.060  -11.539    0.000   -0.691   -0.691
##     p5_animo_4|t2     0.620    0.059   10.530    0.000    0.620    0.620
##     p5_animo_4|t3     1.514    0.085   17.792    0.000    1.514    1.514
##     p38_cnd_tr__|1   -1.996    0.121  -16.566    0.000   -1.996   -1.996
##     p38_cnd_tr__|2   -0.274    0.056   -4.930    0.000   -0.274   -0.274
##     p38_cnd_tr__|3    1.154    0.070   16.383    0.000    1.154    1.154
##     p39_cnd_tr__|1   -0.984    0.066  -14.981    0.000   -0.984   -0.984
##     p39_cnd_tr__|2    0.026    0.055    0.481    0.631    0.026    0.026
##     p39_cnd_tr__|3    0.710    0.060   11.789    0.000    0.710    0.710
##     p39_cnd_tr__|4    1.499    0.084   17.776    0.000    1.499    1.499
##     p40_cnd___01|1   -0.853    0.063  -13.586    0.000   -0.853   -0.853
##     p40_cnd___01|2   -0.074    0.055   -1.354    0.176   -0.074   -0.074
##     p40_cnd___01|3    1.016    0.066   15.277    0.000    1.016    1.016
##     p40_cnd___01|4    1.845    0.107   17.285    0.000    1.845    1.845
##     p40_cnd___02|1   -0.953    0.065  -14.679    0.000   -0.953   -0.953
##     p40_cnd___02|2   -0.012    0.055   -0.218    0.827   -0.012   -0.012
##     p40_cnd___02|3    1.065    0.068   15.708    0.000    1.065    1.065
##     p40_cnd___02|4    1.901    0.111   17.053    0.000    1.901    1.901
##     p40_cnd___04|1   -1.820    0.105  -17.379    0.000   -1.820   -1.820
##     p40_cnd___04|2   -1.378    0.079  -17.511    0.000   -1.378   -1.378
##     p40_cnd___04|3   -0.284    0.056   -5.104    0.000   -0.284   -0.284
##     p40_cnd___04|4    0.360    0.056    6.408    0.000    0.360    0.360
##     p40_cnd___05|1   -1.514    0.085  -17.792    0.000   -1.514   -1.514
##     p40_cnd___05|2   -0.832    0.062  -13.346    0.000   -0.832   -0.832
##     p40_cnd___05|3    0.294    0.056    5.278    0.000    0.294    0.294
##     p40_cnd___05|4    1.048    0.067   15.566    0.000    1.048    1.048
##     p40_cnd___08|1   -0.486    0.057   -8.481    0.000   -0.486   -0.486
##     p40_cnd___08|2    0.518    0.058    8.996    0.000    0.518    0.518
##     p40_cnd___08|3    1.330    0.077   17.340    0.000    1.330    1.330
##     p40_cnd___08|4    1.901    0.111   17.053    0.000    1.901    1.901
##     p40_cnd___09|1   -0.314    0.056   -5.626    0.000   -0.314   -0.314
##     p40_cnd___09|2    0.953    0.065   14.679    0.000    0.953    0.953
##     p40_cnd___09|3    1.795    0.103   17.461    0.000    1.795    1.795
##     p40_cnd___09|4    2.274    0.155   14.657    0.000    2.274    2.274
##     p40_cnd___06|1   -0.046    0.055   -0.830    0.407   -0.046   -0.046
##     p40_cnd___06|2    0.753    0.061   12.369    0.000    0.753    0.753
##     p40_cnd___06|3    1.232    0.073   16.871    0.000    1.232    1.232
##     p40_cnd___06|4    1.771    0.101   17.533    0.000    1.771    1.771
##     p40_cnd___07|1   -0.294    0.056   -5.278    0.000   -0.294   -0.294
##     p40_cnd___07|2    0.513    0.058    8.910    0.000    0.513    0.513
##     p40_cnd___07|3    1.108    0.069   16.053    0.000    1.108    1.108
##     p40_cnd___07|4    1.727    0.098   17.646    0.000    1.727    1.727
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .p42_resilinc_1    0.273                               0.273    0.273
##    .p42_resilinc_2    0.243                               0.243    0.243
##    .p42_resilinc_3    0.169                               0.169    0.169
##    .p3_siente_1       0.451                               0.451    0.451
##    .p3_siente_2       0.313                               0.313    0.313
##    .p3_siente_3       0.329                               0.329    0.329
##    .p3_siente_5       0.243                               0.243    0.243
##    .p3_siente_6       0.269                               0.269    0.269
##    .p4_afront_1       0.568                               0.568    0.568
##    .p4_afront_2       0.420                               0.420    0.420
##    .p4_afront_3       0.452                               0.452    0.452
##    .p5_animo_1        0.342                               0.342    0.342
##    .p5_animo_2        0.411                               0.411    0.411
##    .p5_animo_3        0.516                               0.516    0.516
##    .p5_animo_4        0.394                               0.394    0.394
##    .p38_cnd_trb_s_    0.569                               0.569    0.569
##    .p39_cnd_trb_c_    0.712                               0.712    0.712
##    .p40_cnd_tr__01    0.460                               0.460    0.460
##    .p40_cnd_tr__02    0.412                               0.412    0.412
##    .p40_cnd_tr__04    0.540                               0.540    0.540
##    .p40_cnd_tr__05    0.522                               0.522    0.522
##    .p40_cnd_tr__08    0.731                               0.731    0.731
##    .p40_cnd_tr__09    0.698                               0.698    0.698
##    .p40_cnd_tr__06    0.187                               0.187    0.187
##    .p40_cnd_tr__07    0.218                               0.218    0.218
##     RESIL             1.000                               1.000    1.000
##    .SM                1.000                               0.791    0.791
##     PSICOSOC          1.000                               1.000    1.000
## 
## Scales y*:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##     p42_resilinc_1    1.000                               1.000    1.000
##     p42_resilinc_2    1.000                               1.000    1.000
##     p42_resilinc_3    1.000                               1.000    1.000
##     p3_siente_1       1.000                               1.000    1.000
##     p3_siente_2       1.000                               1.000    1.000
##     p3_siente_3       1.000                               1.000    1.000
##     p3_siente_5       1.000                               1.000    1.000
##     p3_siente_6       1.000                               1.000    1.000
##     p4_afront_1       1.000                               1.000    1.000
##     p4_afront_2       1.000                               1.000    1.000
##     p4_afront_3       1.000                               1.000    1.000
##     p5_animo_1        1.000                               1.000    1.000
##     p5_animo_2        1.000                               1.000    1.000
##     p5_animo_3        1.000                               1.000    1.000
##     p5_animo_4        1.000                               1.000    1.000
##     p38_cnd_trb_s_    1.000                               1.000    1.000
##     p39_cnd_trb_c_    1.000                               1.000    1.000
##     p40_cnd_tr__01    1.000                               1.000    1.000
##     p40_cnd_tr__02    1.000                               1.000    1.000
##     p40_cnd_tr__04    1.000                               1.000    1.000
##     p40_cnd_tr__05    1.000                               1.000    1.000
##     p40_cnd_tr__08    1.000                               1.000    1.000
##     p40_cnd_tr__09    1.000                               1.000    1.000
##     p40_cnd_tr__06    1.000                               1.000    1.000
##     p40_cnd_tr__07    1.000                               1.000    1.000
## 
## R-Square:
##                    Estimate
##     p42_resilinc_1    0.727
##     p42_resilinc_2    0.757
##     p42_resilinc_3    0.831
##     p3_siente_1       0.549
##     p3_siente_2       0.687
##     p3_siente_3       0.671
##     p3_siente_5       0.757
##     p3_siente_6       0.731
##     p4_afront_1       0.432
##     p4_afront_2       0.580
##     p4_afront_3       0.548
##     p5_animo_1        0.658
##     p5_animo_2        0.589
##     p5_animo_3        0.484
##     p5_animo_4        0.606
##     p38_cnd_trb_s_    0.431
##     p39_cnd_trb_c_    0.288
##     p40_cnd_tr__01    0.540
##     p40_cnd_tr__02    0.588
##     p40_cnd_tr__04    0.460
##     p40_cnd_tr__05    0.478
##     p40_cnd_tr__08    0.269
##     p40_cnd_tr__09    0.302
##     p40_cnd_tr__06    0.813
##     p40_cnd_tr__07    0.782
##     SM                0.209
sem2<- lavaan::sem(sem_form3_sin_p38, data = subset(surveymonkey_accionsalududp_df2_cor[,ord_vec],select=-p38_cond_trab_sal_psi), ordered=ord_vec[which(ord_vec!="p38_cond_trab_sal_psi")], estimator= "WLSMV", warn = T,std.lv=T)
summary(sem, fit.measures=TRUE, rsq=TRUE, standardized=TRUE)
## lavaan 0.6-7 ended normally after 31 iterations
## 
##   Estimator                                       DWLS
##   Optimization method                           NLMINB
##   Number of free parameters                        120
##                                                       
##                                                   Used       Total
##   Number of observations                           523         875
##                                                                   
## Model Test User Model:
##                                               Standard      Robust
##   Test Statistic                              2831.986    2197.350
##   Degrees of freedom                               272         272
##   P-value (Chi-square)                           0.000       0.000
##   Scaling correction factor                                  1.377
##   Shift parameter                                          140.942
##        simple second-order correction                             
## 
## Model Test Baseline Model:
## 
##   Test statistic                             51829.327   18071.736
##   Degrees of freedom                               300         300
##   P-value                                        0.000       0.000
##   Scaling correction factor                                  2.900
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    0.950       0.892
##   Tucker-Lewis Index (TLI)                       0.945       0.881
##                                                                   
##   Robust Comparative Fit Index (CFI)                            NA
##   Robust Tucker-Lewis Index (TLI)                               NA
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.134       0.116
##   90 Percent confidence interval - lower         0.130       0.112
##   90 Percent confidence interval - upper         0.139       0.121
##   P-value RMSEA <= 0.05                          0.000       0.000
##                                                                   
##   Robust RMSEA                                                  NA
##   90 Percent confidence interval - lower                        NA
##   90 Percent confidence interval - upper                        NA
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.113       0.113
## 
## Parameter Estimates:
## 
##   Standard errors                           Robust.sem
##   Information                                 Expected
##   Information saturated (h1) model        Unstructured
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   RESIL =~                                                              
##     p42_resilinc_1    0.852    0.026   32.289    0.000    0.852    0.852
##     p42_resilinc_2    0.870    0.023   37.870    0.000    0.870    0.870
##     p42_resilinc_3    0.912    0.022   41.705    0.000    0.912    0.912
##   SM =~                                                                 
##     p3_siente_1       0.659    0.022   29.654    0.000    0.741    0.741
##     p3_siente_2       0.737    0.019   39.350    0.000    0.829    0.829
##     p3_siente_3       0.729    0.019   38.799    0.000    0.819    0.819
##     p3_siente_5       0.774    0.017   44.632    0.000    0.870    0.870
##     p3_siente_6       0.761    0.018   42.405    0.000    0.855    0.855
##     p4_afront_1       0.585    0.024   24.035    0.000    0.657    0.657
##     p4_afront_2       0.677    0.020   33.267    0.000    0.762    0.762
##     p4_afront_3       0.658    0.021   30.640    0.000    0.740    0.740
##     p5_animo_1        0.721    0.020   36.856    0.000    0.811    0.811
##     p5_animo_2        0.682    0.020   33.699    0.000    0.767    0.767
##     p5_animo_3        0.619    0.023   26.483    0.000    0.696    0.696
##     p5_animo_4        0.692    0.019   35.632    0.000    0.779    0.779
##   PSICOSOC =~                                                           
##     p38_cnd_trb_s_    0.657    0.029   22.528    0.000    0.657    0.657
##     p39_cnd_trb_c_   -0.537    0.035  -15.159    0.000   -0.537   -0.537
##     p40_cnd_tr__01   -0.735    0.023  -32.365    0.000   -0.735   -0.735
##     p40_cnd_tr__02   -0.767    0.022  -34.177    0.000   -0.767   -0.767
##     p40_cnd_tr__04   -0.678    0.027  -24.780    0.000   -0.678   -0.678
##     p40_cnd_tr__05   -0.692    0.026  -26.204    0.000   -0.692   -0.692
##     p40_cnd_tr__08    0.518    0.034   15.324    0.000    0.518    0.518
##     p40_cnd_tr__09    0.550    0.033   16.789    0.000    0.550    0.550
##     p40_cnd_tr__06    0.902    0.016   55.986    0.000    0.902    0.902
##     p40_cnd_tr__07    0.885    0.018   48.858    0.000    0.885    0.885
## 
## Regressions:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   SM ~                                                                  
##     PSICOSOC          0.487    0.046   10.632    0.000    0.433    0.433
##     RESIL            -0.114    0.049   -2.314    0.021   -0.102   -0.102
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   RESIL ~~                                                              
##     PSICOSOC         -0.128    0.040   -3.224    0.001   -0.128   -0.128
## 
## Intercepts:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .p42_resilinc_1    0.000                               0.000    0.000
##    .p42_resilinc_2    0.000                               0.000    0.000
##    .p42_resilinc_3    0.000                               0.000    0.000
##    .p3_siente_1       0.000                               0.000    0.000
##    .p3_siente_2       0.000                               0.000    0.000
##    .p3_siente_3       0.000                               0.000    0.000
##    .p3_siente_5       0.000                               0.000    0.000
##    .p3_siente_6       0.000                               0.000    0.000
##    .p4_afront_1       0.000                               0.000    0.000
##    .p4_afront_2       0.000                               0.000    0.000
##    .p4_afront_3       0.000                               0.000    0.000
##    .p5_animo_1        0.000                               0.000    0.000
##    .p5_animo_2        0.000                               0.000    0.000
##    .p5_animo_3        0.000                               0.000    0.000
##    .p5_animo_4        0.000                               0.000    0.000
##    .p38_cnd_trb_s_    0.000                               0.000    0.000
##    .p39_cnd_trb_c_    0.000                               0.000    0.000
##    .p40_cnd_tr__01    0.000                               0.000    0.000
##    .p40_cnd_tr__02    0.000                               0.000    0.000
##    .p40_cnd_tr__04    0.000                               0.000    0.000
##    .p40_cnd_tr__05    0.000                               0.000    0.000
##    .p40_cnd_tr__08    0.000                               0.000    0.000
##    .p40_cnd_tr__09    0.000                               0.000    0.000
##    .p40_cnd_tr__06    0.000                               0.000    0.000
##    .p40_cnd_tr__07    0.000                               0.000    0.000
##     RESIL             0.000                               0.000    0.000
##    .SM                0.000                               0.000    0.000
##     PSICOSOC          0.000                               0.000    0.000
## 
## Thresholds:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##     p42_rslnc_1|t1   -2.528    0.202  -12.495    0.000   -2.528   -2.528
##     p42_rslnc_1|t2   -1.771    0.101  -17.533    0.000   -1.771   -1.771
##     p42_rslnc_1|t3   -0.464    0.057   -8.137    0.000   -0.464   -0.464
##     p42_rslnc_2|t1   -2.528    0.202  -12.495    0.000   -2.528   -2.528
##     p42_rslnc_2|t2   -1.594    0.089  -17.818    0.000   -1.594   -1.594
##     p42_rslnc_2|t3   -0.166    0.055   -3.013    0.003   -0.166   -0.166
##     p42_rslnc_3|t1   -2.528    0.202  -12.495    0.000   -2.528   -2.528
##     p42_rslnc_3|t2   -1.749    0.099  -17.594    0.000   -1.749   -1.749
##     p42_rslnc_3|t3   -0.259    0.056   -4.669    0.000   -0.259   -0.259
##     p3_siente_1|t1   -1.996    0.121  -16.566    0.000   -1.996   -1.996
##     p3_siente_1|t2   -0.961    0.065  -14.755    0.000   -0.961   -0.961
##     p3_siente_1|t3    0.147    0.055    2.664    0.008    0.147    0.147
##     p3_siente_1|t4    1.443    0.082   17.682    0.000    1.443    1.443
##     p3_siente_2|t1   -1.499    0.084  -17.776    0.000   -1.499   -1.499
##     p3_siente_2|t2   -0.753    0.061  -12.369    0.000   -0.753   -0.753
##     p3_siente_2|t3    0.259    0.056    4.669    0.000    0.259    0.259
##     p3_siente_2|t4    1.429    0.081   17.653    0.000    1.429    1.429
##     p3_siente_3|t1   -1.629    0.092  -17.799    0.000   -1.629   -1.629
##     p3_siente_3|t2   -0.799    0.062  -12.942    0.000   -0.799   -0.799
##     p3_siente_3|t3    0.259    0.056    4.669    0.000    0.259    0.259
##     p3_siente_3|t4    1.318    0.076   17.293    0.000    1.318    1.318
##     p3_siente_5|t1   -1.163    0.071  -16.447    0.000   -1.163   -1.163
##     p3_siente_5|t2   -0.524    0.058   -9.082    0.000   -0.524   -0.524
##     p3_siente_5|t3    0.235    0.055    4.234    0.000    0.235    0.235
##     p3_siente_5|t4    1.117    0.069   16.121    0.000    1.117    1.117
##     p3_siente_6|t1   -0.946    0.065  -14.603    0.000   -0.946   -0.946
##     p3_siente_6|t2   -0.294    0.056   -5.278    0.000   -0.294   -0.294
##     p3_siente_6|t3    0.406    0.057    7.187    0.000    0.406    0.406
##     p3_siente_6|t4    1.192    0.072   16.634    0.000    1.192    1.192
##     p4_afront_1|t1   -0.753    0.061  -12.369    0.000   -0.753   -0.753
##     p4_afront_1|t2    0.127    0.055    2.315    0.021    0.127    0.127
##     p4_afront_1|t3    0.866    0.063   13.745    0.000    0.866    0.866
##     p4_afront_1|t4    1.845    0.107   17.285    0.000    1.845    1.845
##     p4_afront_2|t1   -0.812    0.062  -13.104    0.000   -0.812   -0.812
##     p4_afront_2|t2    0.065    0.055    1.179    0.238    0.065    0.065
##     p4_afront_2|t3    0.631    0.059   10.699    0.000    0.631    0.631
##     p4_afront_2|t4    1.686    0.095   17.727    0.000    1.686    1.686
##     p4_afront_3|t1   -0.304    0.056   -5.452    0.000   -0.304   -0.304
##     p4_afront_3|t2    0.486    0.057    8.481    0.000    0.486    0.486
##     p4_afront_3|t3    1.074    0.068   15.778    0.000    1.074    1.074
##     p4_afront_3|t4    1.795    0.103   17.461    0.000    1.795    1.795
##     p5_animo_1|t1    -0.895    0.064  -14.061    0.000   -0.895   -0.895
##     p5_animo_1|t2     0.475    0.057    8.309    0.000    0.475    0.475
##     p5_animo_1|t3     1.307    0.076   17.245    0.000    1.307    1.307
##     p5_animo_2|t1    -1.126    0.070  -16.187    0.000   -1.126   -1.126
##     p5_animo_2|t2     0.142    0.055    2.577    0.010    0.142    0.142
##     p5_animo_2|t3     1.057    0.068   15.637    0.000    1.057    1.057
##     p5_animo_3|t1    -0.741    0.061  -12.204    0.000   -0.741   -0.741
##     p5_animo_3|t2     0.540    0.058    9.339    0.000    0.540    0.540
##     p5_animo_3|t3     1.390    0.079   17.550    0.000    1.390    1.390
##     p5_animo_4|t1    -0.691    0.060  -11.539    0.000   -0.691   -0.691
##     p5_animo_4|t2     0.620    0.059   10.530    0.000    0.620    0.620
##     p5_animo_4|t3     1.514    0.085   17.792    0.000    1.514    1.514
##     p38_cnd_tr__|1   -1.996    0.121  -16.566    0.000   -1.996   -1.996
##     p38_cnd_tr__|2   -0.274    0.056   -4.930    0.000   -0.274   -0.274
##     p38_cnd_tr__|3    1.154    0.070   16.383    0.000    1.154    1.154
##     p39_cnd_tr__|1   -0.984    0.066  -14.981    0.000   -0.984   -0.984
##     p39_cnd_tr__|2    0.026    0.055    0.481    0.631    0.026    0.026
##     p39_cnd_tr__|3    0.710    0.060   11.789    0.000    0.710    0.710
##     p39_cnd_tr__|4    1.499    0.084   17.776    0.000    1.499    1.499
##     p40_cnd___01|1   -0.853    0.063  -13.586    0.000   -0.853   -0.853
##     p40_cnd___01|2   -0.074    0.055   -1.354    0.176   -0.074   -0.074
##     p40_cnd___01|3    1.016    0.066   15.277    0.000    1.016    1.016
##     p40_cnd___01|4    1.845    0.107   17.285    0.000    1.845    1.845
##     p40_cnd___02|1   -0.953    0.065  -14.679    0.000   -0.953   -0.953
##     p40_cnd___02|2   -0.012    0.055   -0.218    0.827   -0.012   -0.012
##     p40_cnd___02|3    1.065    0.068   15.708    0.000    1.065    1.065
##     p40_cnd___02|4    1.901    0.111   17.053    0.000    1.901    1.901
##     p40_cnd___04|1   -1.820    0.105  -17.379    0.000   -1.820   -1.820
##     p40_cnd___04|2   -1.378    0.079  -17.511    0.000   -1.378   -1.378
##     p40_cnd___04|3   -0.284    0.056   -5.104    0.000   -0.284   -0.284
##     p40_cnd___04|4    0.360    0.056    6.408    0.000    0.360    0.360
##     p40_cnd___05|1   -1.514    0.085  -17.792    0.000   -1.514   -1.514
##     p40_cnd___05|2   -0.832    0.062  -13.346    0.000   -0.832   -0.832
##     p40_cnd___05|3    0.294    0.056    5.278    0.000    0.294    0.294
##     p40_cnd___05|4    1.048    0.067   15.566    0.000    1.048    1.048
##     p40_cnd___08|1   -0.486    0.057   -8.481    0.000   -0.486   -0.486
##     p40_cnd___08|2    0.518    0.058    8.996    0.000    0.518    0.518
##     p40_cnd___08|3    1.330    0.077   17.340    0.000    1.330    1.330
##     p40_cnd___08|4    1.901    0.111   17.053    0.000    1.901    1.901
##     p40_cnd___09|1   -0.314    0.056   -5.626    0.000   -0.314   -0.314
##     p40_cnd___09|2    0.953    0.065   14.679    0.000    0.953    0.953
##     p40_cnd___09|3    1.795    0.103   17.461    0.000    1.795    1.795
##     p40_cnd___09|4    2.274    0.155   14.657    0.000    2.274    2.274
##     p40_cnd___06|1   -0.046    0.055   -0.830    0.407   -0.046   -0.046
##     p40_cnd___06|2    0.753    0.061   12.369    0.000    0.753    0.753
##     p40_cnd___06|3    1.232    0.073   16.871    0.000    1.232    1.232
##     p40_cnd___06|4    1.771    0.101   17.533    0.000    1.771    1.771
##     p40_cnd___07|1   -0.294    0.056   -5.278    0.000   -0.294   -0.294
##     p40_cnd___07|2    0.513    0.058    8.910    0.000    0.513    0.513
##     p40_cnd___07|3    1.108    0.069   16.053    0.000    1.108    1.108
##     p40_cnd___07|4    1.727    0.098   17.646    0.000    1.727    1.727
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .p42_resilinc_1    0.273                               0.273    0.273
##    .p42_resilinc_2    0.243                               0.243    0.243
##    .p42_resilinc_3    0.169                               0.169    0.169
##    .p3_siente_1       0.451                               0.451    0.451
##    .p3_siente_2       0.313                               0.313    0.313
##    .p3_siente_3       0.329                               0.329    0.329
##    .p3_siente_5       0.243                               0.243    0.243
##    .p3_siente_6       0.269                               0.269    0.269
##    .p4_afront_1       0.568                               0.568    0.568
##    .p4_afront_2       0.420                               0.420    0.420
##    .p4_afront_3       0.452                               0.452    0.452
##    .p5_animo_1        0.342                               0.342    0.342
##    .p5_animo_2        0.411                               0.411    0.411
##    .p5_animo_3        0.516                               0.516    0.516
##    .p5_animo_4        0.394                               0.394    0.394
##    .p38_cnd_trb_s_    0.569                               0.569    0.569
##    .p39_cnd_trb_c_    0.712                               0.712    0.712
##    .p40_cnd_tr__01    0.460                               0.460    0.460
##    .p40_cnd_tr__02    0.412                               0.412    0.412
##    .p40_cnd_tr__04    0.540                               0.540    0.540
##    .p40_cnd_tr__05    0.522                               0.522    0.522
##    .p40_cnd_tr__08    0.731                               0.731    0.731
##    .p40_cnd_tr__09    0.698                               0.698    0.698
##    .p40_cnd_tr__06    0.187                               0.187    0.187
##    .p40_cnd_tr__07    0.218                               0.218    0.218
##     RESIL             1.000                               1.000    1.000
##    .SM                1.000                               0.791    0.791
##     PSICOSOC          1.000                               1.000    1.000
## 
## Scales y*:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##     p42_resilinc_1    1.000                               1.000    1.000
##     p42_resilinc_2    1.000                               1.000    1.000
##     p42_resilinc_3    1.000                               1.000    1.000
##     p3_siente_1       1.000                               1.000    1.000
##     p3_siente_2       1.000                               1.000    1.000
##     p3_siente_3       1.000                               1.000    1.000
##     p3_siente_5       1.000                               1.000    1.000
##     p3_siente_6       1.000                               1.000    1.000
##     p4_afront_1       1.000                               1.000    1.000
##     p4_afront_2       1.000                               1.000    1.000
##     p4_afront_3       1.000                               1.000    1.000
##     p5_animo_1        1.000                               1.000    1.000
##     p5_animo_2        1.000                               1.000    1.000
##     p5_animo_3        1.000                               1.000    1.000
##     p5_animo_4        1.000                               1.000    1.000
##     p38_cnd_trb_s_    1.000                               1.000    1.000
##     p39_cnd_trb_c_    1.000                               1.000    1.000
##     p40_cnd_tr__01    1.000                               1.000    1.000
##     p40_cnd_tr__02    1.000                               1.000    1.000
##     p40_cnd_tr__04    1.000                               1.000    1.000
##     p40_cnd_tr__05    1.000                               1.000    1.000
##     p40_cnd_tr__08    1.000                               1.000    1.000
##     p40_cnd_tr__09    1.000                               1.000    1.000
##     p40_cnd_tr__06    1.000                               1.000    1.000
##     p40_cnd_tr__07    1.000                               1.000    1.000
## 
## R-Square:
##                    Estimate
##     p42_resilinc_1    0.727
##     p42_resilinc_2    0.757
##     p42_resilinc_3    0.831
##     p3_siente_1       0.549
##     p3_siente_2       0.687
##     p3_siente_3       0.671
##     p3_siente_5       0.757
##     p3_siente_6       0.731
##     p4_afront_1       0.432
##     p4_afront_2       0.580
##     p4_afront_3       0.548
##     p5_animo_1        0.658
##     p5_animo_2        0.589
##     p5_animo_3        0.484
##     p5_animo_4        0.606
##     p38_cnd_trb_s_    0.431
##     p39_cnd_trb_c_    0.288
##     p40_cnd_tr__01    0.540
##     p40_cnd_tr__02    0.588
##     p40_cnd_tr__04    0.460
##     p40_cnd_tr__05    0.478
##     p40_cnd_tr__08    0.269
##     p40_cnd_tr__09    0.302
##     p40_cnd_tr__06    0.813
##     p40_cnd_tr__07    0.782
##     SM                0.209
summary(sem2, fit.measures=TRUE, rsq=TRUE, standardized=TRUE)
## lavaan 0.6-7 ended normally after 28 iterations
## 
##   Estimator                                       DWLS
##   Optimization method                           NLMINB
##   Number of free parameters                        116
##                                                       
##                                                   Used       Total
##   Number of observations                           523         875
##                                                                   
## Model Test User Model:
##                                               Standard      Robust
##   Test Statistic                              2474.278    1941.487
##   Degrees of freedom                               249         249
##   P-value (Chi-square)                           0.000       0.000
##   Scaling correction factor                                  1.365
##   Shift parameter                                          128.351
##        simple second-order correction                             
## 
## Model Test Baseline Model:
## 
##   Test statistic                             50032.546   17747.529
##   Degrees of freedom                               276         276
##   P-value                                        0.000       0.000
##   Scaling correction factor                                  2.848
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    0.955       0.903
##   Tucker-Lewis Index (TLI)                       0.950       0.893
##                                                                   
##   Robust Comparative Fit Index (CFI)                            NA
##   Robust Tucker-Lewis Index (TLI)                               NA
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.131       0.114
##   90 Percent confidence interval - lower         0.126       0.109
##   90 Percent confidence interval - upper         0.136       0.119
##   P-value RMSEA <= 0.05                          0.000       0.000
##                                                                   
##   Robust RMSEA                                                  NA
##   90 Percent confidence interval - lower                        NA
##   90 Percent confidence interval - upper                        NA
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.110       0.110
## 
## Parameter Estimates:
## 
##   Standard errors                           Robust.sem
##   Information                                 Expected
##   Information saturated (h1) model        Unstructured
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   RESIL =~                                                              
##     p42_resilinc_1    0.850    0.026   32.269    0.000    0.850    0.850
##     p42_resilinc_2    0.871    0.023   38.390    0.000    0.871    0.871
##     p42_resilinc_3    0.912    0.022   42.243    0.000    0.912    0.912
##   SM =~                                                                 
##     p3_siente_1       0.672    0.022   29.998    0.000    0.741    0.741
##     p3_siente_2       0.751    0.019   40.244    0.000    0.828    0.828
##     p3_siente_3       0.743    0.019   40.015    0.000    0.820    0.820
##     p3_siente_5       0.790    0.017   46.520    0.000    0.871    0.871
##     p3_siente_6       0.777    0.017   44.491    0.000    0.857    0.857
##     p4_afront_1       0.595    0.025   24.202    0.000    0.657    0.657
##     p4_afront_2       0.689    0.020   33.596    0.000    0.760    0.760
##     p4_afront_3       0.669    0.022   30.736    0.000    0.738    0.738
##     p5_animo_1        0.735    0.019   37.975    0.000    0.811    0.811
##     p5_animo_2        0.698    0.020   34.537    0.000    0.770    0.770
##     p5_animo_3        0.629    0.024   26.668    0.000    0.694    0.694
##     p5_animo_4        0.703    0.019   36.117    0.000    0.776    0.776
##   PSICOSOC =~                                                           
##     p39_cnd_trb_c_    0.525    0.035   14.841    0.000    0.525    0.525
##     p40_cnd_tr__01    0.757    0.022   35.023    0.000    0.757    0.757
##     p40_cnd_tr__02    0.784    0.022   36.037    0.000    0.784    0.784
##     p40_cnd_tr__04    0.686    0.027   25.040    0.000    0.686    0.686
##     p40_cnd_tr__05    0.705    0.026   27.317    0.000    0.705    0.705
##     p40_cnd_tr__08   -0.520    0.034  -15.515    0.000   -0.520   -0.520
##     p40_cnd_tr__09   -0.534    0.033  -16.130    0.000   -0.534   -0.534
##     p40_cnd_tr__06   -0.910    0.016  -55.766    0.000   -0.910   -0.910
##     p40_cnd_tr__07   -0.890    0.018  -48.824    0.000   -0.890   -0.890
## 
## Regressions:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   SM ~                                                                  
##     PSICOSOC         -0.435    0.045   -9.643    0.000   -0.395   -0.395
##     RESIL            -0.120    0.049   -2.441    0.015   -0.109   -0.109
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   RESIL ~~                                                              
##     PSICOSOC          0.122    0.039    3.108    0.002    0.122    0.122
## 
## Intercepts:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .p42_resilinc_1    0.000                               0.000    0.000
##    .p42_resilinc_2    0.000                               0.000    0.000
##    .p42_resilinc_3    0.000                               0.000    0.000
##    .p3_siente_1       0.000                               0.000    0.000
##    .p3_siente_2       0.000                               0.000    0.000
##    .p3_siente_3       0.000                               0.000    0.000
##    .p3_siente_5       0.000                               0.000    0.000
##    .p3_siente_6       0.000                               0.000    0.000
##    .p4_afront_1       0.000                               0.000    0.000
##    .p4_afront_2       0.000                               0.000    0.000
##    .p4_afront_3       0.000                               0.000    0.000
##    .p5_animo_1        0.000                               0.000    0.000
##    .p5_animo_2        0.000                               0.000    0.000
##    .p5_animo_3        0.000                               0.000    0.000
##    .p5_animo_4        0.000                               0.000    0.000
##    .p39_cnd_trb_c_    0.000                               0.000    0.000
##    .p40_cnd_tr__01    0.000                               0.000    0.000
##    .p40_cnd_tr__02    0.000                               0.000    0.000
##    .p40_cnd_tr__04    0.000                               0.000    0.000
##    .p40_cnd_tr__05    0.000                               0.000    0.000
##    .p40_cnd_tr__08    0.000                               0.000    0.000
##    .p40_cnd_tr__09    0.000                               0.000    0.000
##    .p40_cnd_tr__06    0.000                               0.000    0.000
##    .p40_cnd_tr__07    0.000                               0.000    0.000
##     RESIL             0.000                               0.000    0.000
##    .SM                0.000                               0.000    0.000
##     PSICOSOC          0.000                               0.000    0.000
## 
## Thresholds:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##     p42_rslnc_1|t1   -2.528    0.202  -12.495    0.000   -2.528   -2.528
##     p42_rslnc_1|t2   -1.771    0.101  -17.533    0.000   -1.771   -1.771
##     p42_rslnc_1|t3   -0.464    0.057   -8.137    0.000   -0.464   -0.464
##     p42_rslnc_2|t1   -2.528    0.202  -12.495    0.000   -2.528   -2.528
##     p42_rslnc_2|t2   -1.594    0.089  -17.818    0.000   -1.594   -1.594
##     p42_rslnc_2|t3   -0.166    0.055   -3.013    0.003   -0.166   -0.166
##     p42_rslnc_3|t1   -2.528    0.202  -12.495    0.000   -2.528   -2.528
##     p42_rslnc_3|t2   -1.749    0.099  -17.594    0.000   -1.749   -1.749
##     p42_rslnc_3|t3   -0.259    0.056   -4.669    0.000   -0.259   -0.259
##     p3_siente_1|t1   -1.996    0.121  -16.566    0.000   -1.996   -1.996
##     p3_siente_1|t2   -0.961    0.065  -14.755    0.000   -0.961   -0.961
##     p3_siente_1|t3    0.147    0.055    2.664    0.008    0.147    0.147
##     p3_siente_1|t4    1.443    0.082   17.682    0.000    1.443    1.443
##     p3_siente_2|t1   -1.499    0.084  -17.776    0.000   -1.499   -1.499
##     p3_siente_2|t2   -0.753    0.061  -12.369    0.000   -0.753   -0.753
##     p3_siente_2|t3    0.259    0.056    4.669    0.000    0.259    0.259
##     p3_siente_2|t4    1.429    0.081   17.653    0.000    1.429    1.429
##     p3_siente_3|t1   -1.629    0.092  -17.799    0.000   -1.629   -1.629
##     p3_siente_3|t2   -0.799    0.062  -12.942    0.000   -0.799   -0.799
##     p3_siente_3|t3    0.259    0.056    4.669    0.000    0.259    0.259
##     p3_siente_3|t4    1.318    0.076   17.293    0.000    1.318    1.318
##     p3_siente_5|t1   -1.163    0.071  -16.447    0.000   -1.163   -1.163
##     p3_siente_5|t2   -0.524    0.058   -9.082    0.000   -0.524   -0.524
##     p3_siente_5|t3    0.235    0.055    4.234    0.000    0.235    0.235
##     p3_siente_5|t4    1.117    0.069   16.121    0.000    1.117    1.117
##     p3_siente_6|t1   -0.946    0.065  -14.603    0.000   -0.946   -0.946
##     p3_siente_6|t2   -0.294    0.056   -5.278    0.000   -0.294   -0.294
##     p3_siente_6|t3    0.406    0.057    7.187    0.000    0.406    0.406
##     p3_siente_6|t4    1.192    0.072   16.634    0.000    1.192    1.192
##     p4_afront_1|t1   -0.753    0.061  -12.369    0.000   -0.753   -0.753
##     p4_afront_1|t2    0.127    0.055    2.315    0.021    0.127    0.127
##     p4_afront_1|t3    0.866    0.063   13.745    0.000    0.866    0.866
##     p4_afront_1|t4    1.845    0.107   17.285    0.000    1.845    1.845
##     p4_afront_2|t1   -0.812    0.062  -13.104    0.000   -0.812   -0.812
##     p4_afront_2|t2    0.065    0.055    1.179    0.238    0.065    0.065
##     p4_afront_2|t3    0.631    0.059   10.699    0.000    0.631    0.631
##     p4_afront_2|t4    1.686    0.095   17.727    0.000    1.686    1.686
##     p4_afront_3|t1   -0.304    0.056   -5.452    0.000   -0.304   -0.304
##     p4_afront_3|t2    0.486    0.057    8.481    0.000    0.486    0.486
##     p4_afront_3|t3    1.074    0.068   15.778    0.000    1.074    1.074
##     p4_afront_3|t4    1.795    0.103   17.461    0.000    1.795    1.795
##     p5_animo_1|t1    -0.895    0.064  -14.061    0.000   -0.895   -0.895
##     p5_animo_1|t2     0.475    0.057    8.309    0.000    0.475    0.475
##     p5_animo_1|t3     1.307    0.076   17.245    0.000    1.307    1.307
##     p5_animo_2|t1    -1.126    0.070  -16.187    0.000   -1.126   -1.126
##     p5_animo_2|t2     0.142    0.055    2.577    0.010    0.142    0.142
##     p5_animo_2|t3     1.057    0.068   15.637    0.000    1.057    1.057
##     p5_animo_3|t1    -0.741    0.061  -12.204    0.000   -0.741   -0.741
##     p5_animo_3|t2     0.540    0.058    9.339    0.000    0.540    0.540
##     p5_animo_3|t3     1.390    0.079   17.550    0.000    1.390    1.390
##     p5_animo_4|t1    -0.691    0.060  -11.539    0.000   -0.691   -0.691
##     p5_animo_4|t2     0.620    0.059   10.530    0.000    0.620    0.620
##     p5_animo_4|t3     1.514    0.085   17.792    0.000    1.514    1.514
##     p39_cnd_tr__|1   -0.984    0.066  -14.981    0.000   -0.984   -0.984
##     p39_cnd_tr__|2    0.026    0.055    0.481    0.631    0.026    0.026
##     p39_cnd_tr__|3    0.710    0.060   11.789    0.000    0.710    0.710
##     p39_cnd_tr__|4    1.499    0.084   17.776    0.000    1.499    1.499
##     p40_cnd___01|1   -0.853    0.063  -13.586    0.000   -0.853   -0.853
##     p40_cnd___01|2   -0.074    0.055   -1.354    0.176   -0.074   -0.074
##     p40_cnd___01|3    1.016    0.066   15.277    0.000    1.016    1.016
##     p40_cnd___01|4    1.845    0.107   17.285    0.000    1.845    1.845
##     p40_cnd___02|1   -0.953    0.065  -14.679    0.000   -0.953   -0.953
##     p40_cnd___02|2   -0.012    0.055   -0.218    0.827   -0.012   -0.012
##     p40_cnd___02|3    1.065    0.068   15.708    0.000    1.065    1.065
##     p40_cnd___02|4    1.901    0.111   17.053    0.000    1.901    1.901
##     p40_cnd___04|1   -1.820    0.105  -17.379    0.000   -1.820   -1.820
##     p40_cnd___04|2   -1.378    0.079  -17.511    0.000   -1.378   -1.378
##     p40_cnd___04|3   -0.284    0.056   -5.104    0.000   -0.284   -0.284
##     p40_cnd___04|4    0.360    0.056    6.408    0.000    0.360    0.360
##     p40_cnd___05|1   -1.514    0.085  -17.792    0.000   -1.514   -1.514
##     p40_cnd___05|2   -0.832    0.062  -13.346    0.000   -0.832   -0.832
##     p40_cnd___05|3    0.294    0.056    5.278    0.000    0.294    0.294
##     p40_cnd___05|4    1.048    0.067   15.566    0.000    1.048    1.048
##     p40_cnd___08|1   -0.486    0.057   -8.481    0.000   -0.486   -0.486
##     p40_cnd___08|2    0.518    0.058    8.996    0.000    0.518    0.518
##     p40_cnd___08|3    1.330    0.077   17.340    0.000    1.330    1.330
##     p40_cnd___08|4    1.901    0.111   17.053    0.000    1.901    1.901
##     p40_cnd___09|1   -0.314    0.056   -5.626    0.000   -0.314   -0.314
##     p40_cnd___09|2    0.953    0.065   14.679    0.000    0.953    0.953
##     p40_cnd___09|3    1.795    0.103   17.461    0.000    1.795    1.795
##     p40_cnd___09|4    2.274    0.155   14.657    0.000    2.274    2.274
##     p40_cnd___06|1   -0.046    0.055   -0.830    0.407   -0.046   -0.046
##     p40_cnd___06|2    0.753    0.061   12.369    0.000    0.753    0.753
##     p40_cnd___06|3    1.232    0.073   16.871    0.000    1.232    1.232
##     p40_cnd___06|4    1.771    0.101   17.533    0.000    1.771    1.771
##     p40_cnd___07|1   -0.294    0.056   -5.278    0.000   -0.294   -0.294
##     p40_cnd___07|2    0.513    0.058    8.910    0.000    0.513    0.513
##     p40_cnd___07|3    1.108    0.069   16.053    0.000    1.108    1.108
##     p40_cnd___07|4    1.727    0.098   17.646    0.000    1.727    1.727
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .p42_resilinc_1    0.278                               0.278    0.278
##    .p42_resilinc_2    0.242                               0.242    0.242
##    .p42_resilinc_3    0.167                               0.167    0.167
##    .p3_siente_1       0.451                               0.451    0.451
##    .p3_siente_2       0.315                               0.315    0.315
##    .p3_siente_3       0.328                               0.328    0.328
##    .p3_siente_5       0.241                               0.241    0.241
##    .p3_siente_6       0.265                               0.265    0.265
##    .p4_afront_1       0.569                               0.569    0.569
##    .p4_afront_2       0.423                               0.423    0.423
##    .p4_afront_3       0.456                               0.456    0.456
##    .p5_animo_1        0.342                               0.342    0.342
##    .p5_animo_2        0.408                               0.408    0.408
##    .p5_animo_3        0.519                               0.519    0.519
##    .p5_animo_4        0.398                               0.398    0.398
##    .p39_cnd_trb_c_    0.725                               0.725    0.725
##    .p40_cnd_tr__01    0.427                               0.427    0.427
##    .p40_cnd_tr__02    0.385                               0.385    0.385
##    .p40_cnd_tr__04    0.530                               0.530    0.530
##    .p40_cnd_tr__05    0.504                               0.504    0.504
##    .p40_cnd_tr__08    0.729                               0.729    0.729
##    .p40_cnd_tr__09    0.715                               0.715    0.715
##    .p40_cnd_tr__06    0.171                               0.171    0.171
##    .p40_cnd_tr__07    0.208                               0.208    0.208
##     RESIL             1.000                               1.000    1.000
##    .SM                1.000                               0.822    0.822
##     PSICOSOC          1.000                               1.000    1.000
## 
## Scales y*:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##     p42_resilinc_1    1.000                               1.000    1.000
##     p42_resilinc_2    1.000                               1.000    1.000
##     p42_resilinc_3    1.000                               1.000    1.000
##     p3_siente_1       1.000                               1.000    1.000
##     p3_siente_2       1.000                               1.000    1.000
##     p3_siente_3       1.000                               1.000    1.000
##     p3_siente_5       1.000                               1.000    1.000
##     p3_siente_6       1.000                               1.000    1.000
##     p4_afront_1       1.000                               1.000    1.000
##     p4_afront_2       1.000                               1.000    1.000
##     p4_afront_3       1.000                               1.000    1.000
##     p5_animo_1        1.000                               1.000    1.000
##     p5_animo_2        1.000                               1.000    1.000
##     p5_animo_3        1.000                               1.000    1.000
##     p5_animo_4        1.000                               1.000    1.000
##     p39_cnd_trb_c_    1.000                               1.000    1.000
##     p40_cnd_tr__01    1.000                               1.000    1.000
##     p40_cnd_tr__02    1.000                               1.000    1.000
##     p40_cnd_tr__04    1.000                               1.000    1.000
##     p40_cnd_tr__05    1.000                               1.000    1.000
##     p40_cnd_tr__08    1.000                               1.000    1.000
##     p40_cnd_tr__09    1.000                               1.000    1.000
##     p40_cnd_tr__06    1.000                               1.000    1.000
##     p40_cnd_tr__07    1.000                               1.000    1.000
## 
## R-Square:
##                    Estimate
##     p42_resilinc_1    0.722
##     p42_resilinc_2    0.758
##     p42_resilinc_3    0.833
##     p3_siente_1       0.549
##     p3_siente_2       0.685
##     p3_siente_3       0.672
##     p3_siente_5       0.759
##     p3_siente_6       0.735
##     p4_afront_1       0.431
##     p4_afront_2       0.577
##     p4_afront_3       0.544
##     p5_animo_1        0.658
##     p5_animo_2        0.592
##     p5_animo_3        0.481
##     p5_animo_4        0.602
##     p39_cnd_trb_c_    0.275
##     p40_cnd_tr__01    0.573
##     p40_cnd_tr__02    0.615
##     p40_cnd_tr__04    0.470
##     p40_cnd_tr__05    0.496
##     p40_cnd_tr__08    0.271
##     p40_cnd_tr__09    0.285
##     p40_cnd_tr__06    0.829
##     p40_cnd_tr__07    0.792
##     SM                0.178
subset(lavaan::modindices(sem)[order(lavaan::modindices(sem)$mi, decreasing=TRUE), ], mi > 5 & abs(sepc.all)>0.2)
##                        lhs op                    rhs      mi    epc sepc.lv
## 551 p40_cond_trab_istas_06 ~~ p40_cond_trab_istas_07 812.186  0.825   0.825
## 524 p40_cond_trab_istas_01 ~~ p40_cond_trab_istas_02 669.850  0.694   0.694
## 381            p3_siente_5 ~~            p3_siente_6 535.341  0.456   0.456
## 227                     SM =~  p38_cond_trab_sal_psi 243.645  0.331   0.373
## 536 p40_cond_trab_istas_02 ~~ p40_cond_trab_istas_07 178.909  0.672   0.672
## 535 p40_cond_trab_istas_02 ~~ p40_cond_trab_istas_06 163.033  0.715   0.715
## 546 p40_cond_trab_istas_08 ~~ p40_cond_trab_istas_09 142.464  0.394   0.394
## 537 p40_cond_trab_istas_04 ~~ p40_cond_trab_istas_05 139.793  0.350   0.350
## 530 p40_cond_trab_istas_01 ~~ p40_cond_trab_istas_07 139.056  0.565   0.565
## 529 p40_cond_trab_istas_01 ~~ p40_cond_trab_istas_06 121.541  0.585   0.585
## 235                     SM =~ p40_cond_trab_istas_06  89.061 -0.225  -0.253
## 236                     SM =~ p40_cond_trab_istas_07  81.460 -0.208  -0.234
## 545 p40_cond_trab_istas_05 ~~ p40_cond_trab_istas_07  55.390  0.334   0.334
## 486             p5_animo_3 ~~             p5_animo_4  55.050  0.221   0.221
## 544 p40_cond_trab_istas_05 ~~ p40_cond_trab_istas_06  54.631  0.364   0.364
## 432            p4_afront_2 ~~            p4_afront_3  47.922  0.201   0.201
## 508  p38_cond_trab_sal_psi ~~ p40_cond_trab_istas_01  42.596  0.319   0.319
## 276      p42_resiliencia_2 ~~      p42_resiliencia_3  35.971  0.730   0.730
## 527 p40_cond_trab_istas_01 ~~ p40_cond_trab_istas_08  35.592  0.275   0.275
## 497             p5_animo_4 ~~  p38_cond_trab_sal_psi  34.414  0.247   0.247
## 540 p40_cond_trab_istas_04 ~~ p40_cond_trab_istas_06  34.011  0.257   0.257
## 533 p40_cond_trab_istas_02 ~~ p40_cond_trab_istas_08  33.617  0.273   0.273
## 541 p40_cond_trab_istas_04 ~~ p40_cond_trab_istas_07  33.175  0.226   0.226
## 514  p38_cond_trab_sal_psi ~~ p40_cond_trab_istas_06  31.422 -0.256  -0.256
## 461             p5_animo_1 ~~             p5_animo_2  30.919  0.156   0.156
## 352            p3_siente_2 ~~  p38_cond_trab_sal_psi  29.368  0.223   0.223
## 515  p38_cond_trab_sal_psi ~~ p40_cond_trab_istas_07  28.832 -0.240  -0.240
## 437            p4_afront_2 ~~  p38_cond_trab_sal_psi  28.647  0.210   0.210
## 404            p3_siente_6 ~~             p5_animo_3  26.788 -0.212  -0.212
## 384            p3_siente_5 ~~            p4_afront_3  26.205 -0.209  -0.209
## 509  p38_cond_trab_sal_psi ~~ p40_cond_trab_istas_02  25.643  0.251   0.251
## 343            p3_siente_2 ~~            p3_siente_5  25.499 -0.158  -0.158
## 342            p3_siente_2 ~~            p3_siente_3  25.182  0.131   0.131
## 451            p4_afront_3 ~~  p38_cond_trab_sal_psi  24.415  0.214   0.214
## 405            p3_siente_6 ~~             p5_animo_4  23.769 -0.168  -0.168
## 534 p40_cond_trab_istas_02 ~~ p40_cond_trab_istas_09  23.680  0.230   0.230
## 363            p3_siente_3 ~~            p3_siente_6  23.074 -0.164  -0.164
## 344            p3_siente_2 ~~            p3_siente_6  22.665 -0.155  -0.155
## 322            p3_siente_1 ~~            p3_siente_3  22.489  0.130   0.130
## 321            p3_siente_1 ~~            p3_siente_2  22.338  0.125   0.125
## 253      p42_resiliencia_1 ~~      p42_resiliencia_3  22.261 -0.551  -0.551
## 388            p3_siente_5 ~~             p5_animo_4  22.107 -0.167  -0.167
## 387            p3_siente_5 ~~             p5_animo_3  21.441 -0.184  -0.184
## 399            p3_siente_6 ~~            p4_afront_1  20.939 -0.193  -0.193
## 528 p40_cond_trab_istas_01 ~~ p40_cond_trab_istas_09  20.563  0.213   0.213
## 487             p5_animo_3 ~~  p38_cond_trab_sal_psi  20.444  0.201   0.201
## 415            p3_siente_6 ~~ p40_cond_trab_istas_07  19.214 -0.211  -0.211
## 382            p3_siente_5 ~~            p4_afront_1  18.824 -0.179  -0.179
## 397            p3_siente_5 ~~ p40_cond_trab_istas_06  18.498 -0.221  -0.221
## 313      p42_resiliencia_3 ~~ p40_cond_trab_istas_01  18.412 -0.221  -0.221
## 401            p3_siente_6 ~~            p4_afront_3  18.374 -0.171  -0.171
## 385            p3_siente_5 ~~             p5_animo_1  18.200 -0.149  -0.149
## 398            p3_siente_5 ~~ p40_cond_trab_istas_07  17.849 -0.207  -0.207
## 324            p3_siente_1 ~~            p3_siente_6  17.162 -0.157  -0.157
## 420            p4_afront_1 ~~             p5_animo_3  15.390  0.136   0.136
## 464             p5_animo_1 ~~  p38_cond_trab_sal_psi  15.242  0.178   0.178
## 422            p4_afront_1 ~~  p38_cond_trab_sal_psi  14.947  0.174   0.174
## 362            p3_siente_3 ~~            p3_siente_5  14.651 -0.123  -0.123
## 522 p39_cond_trab_cult_org ~~ p40_cond_trab_istas_06  14.523  0.170   0.170
## 414            p3_siente_6 ~~ p40_cond_trab_istas_06  14.456 -0.193  -0.193
## 517 p39_cond_trab_cult_org ~~ p40_cond_trab_istas_02  14.363 -0.181  -0.181
## 417            p4_afront_1 ~~            p4_afront_3  14.249  0.129   0.129
## 513  p38_cond_trab_sal_psi ~~ p40_cond_trab_istas_09  14.002  0.162   0.162
## 403            p3_siente_6 ~~             p5_animo_2  13.899 -0.140  -0.140
## 332            p3_siente_1 ~~  p38_cond_trab_sal_psi  13.761  0.168   0.168
## 272      p42_resiliencia_1 ~~ p40_cond_trab_istas_08  13.471 -0.181  -0.181
## 402            p3_siente_6 ~~             p5_animo_1  13.397 -0.121  -0.121
## 383            p3_siente_5 ~~            p4_afront_2  12.851 -0.128  -0.128
## 314      p42_resiliencia_3 ~~ p40_cond_trab_istas_02  12.575 -0.187  -0.187
## 273      p42_resiliencia_1 ~~ p40_cond_trab_istas_09  12.343 -0.196  -0.196
## 386            p3_siente_5 ~~             p5_animo_2  12.246 -0.122  -0.122
## 492             p5_animo_3 ~~ p40_cond_trab_istas_05  11.916 -0.148  -0.148
## 371            p3_siente_3 ~~  p38_cond_trab_sal_psi  11.519  0.147   0.147
## 416            p4_afront_1 ~~            p4_afront_2  11.120  0.108   0.108
## 445            p4_afront_2 ~~ p40_cond_trab_istas_06  11.039 -0.171  -0.171
## 400            p3_siente_6 ~~            p4_afront_2  10.655 -0.115  -0.115
## 502             p5_animo_4 ~~ p40_cond_trab_istas_05   9.739 -0.129  -0.129
## 323            p3_siente_1 ~~            p3_siente_5   9.616 -0.109  -0.109
## 270      p42_resiliencia_1 ~~ p40_cond_trab_istas_04   9.260  0.158   0.158
## 379            p3_siente_3 ~~ p40_cond_trab_istas_06   8.637 -0.145  -0.145
## 523 p39_cond_trab_cult_org ~~ p40_cond_trab_istas_07   8.291  0.124   0.124
## 473             p5_animo_1 ~~ p40_cond_trab_istas_07   7.779 -0.138  -0.138
## 488             p5_animo_3 ~~ p39_cond_trab_cult_org   7.512 -0.123  -0.123
## 291      p42_resiliencia_2 ~~ p40_cond_trab_istas_01   7.480 -0.143  -0.143
## 327            p3_siente_1 ~~            p4_afront_3   7.374 -0.115  -0.115
## 292      p42_resiliencia_2 ~~ p40_cond_trab_istas_02   6.403 -0.122  -0.122
## 511  p38_cond_trab_sal_psi ~~ p40_cond_trab_istas_05   6.134  0.114   0.114
## 548 p40_cond_trab_istas_08 ~~ p40_cond_trab_istas_07   6.082  0.093   0.093
## 472             p5_animo_1 ~~ p40_cond_trab_istas_06   5.698 -0.128  -0.128
## 317      p42_resiliencia_3 ~~ p40_cond_trab_istas_08   5.691 -0.117  -0.117
## 446            p4_afront_2 ~~ p40_cond_trab_istas_07   5.544 -0.113  -0.113
## 380            p3_siente_3 ~~ p40_cond_trab_istas_07   5.464 -0.111  -0.111
## 264      p42_resiliencia_1 ~~             p5_animo_3   5.422 -0.131  -0.131
##     sepc.all sepc.nox
## 551    4.089    4.089
## 524    1.594    1.594
## 381    1.785    1.785
## 227    0.373    0.373
## 536    2.247    2.247
## 535    2.577    2.577
## 546    0.552    0.552
## 537    0.660    0.660
## 530    1.785    1.785
## 529    1.996    1.996
## 235   -0.253   -0.253
## 236   -0.234   -0.234
## 545    0.993    0.993
## 486    0.490    0.490
## 544    1.165    1.165
## 432    0.461    0.461
## 508    0.623    0.623
## 276    3.598    3.598
## 527    0.474    0.474
## 497    0.522    0.522
## 540    0.809    0.809
## 533    0.497    0.497
## 541    0.660    0.660
## 514   -0.784   -0.784
## 461    0.415    0.415
## 352    0.529    0.529
## 515   -0.682   -0.682
## 437    0.429    0.429
## 404   -0.569   -0.569
## 384   -0.632   -0.632
## 509    0.518    0.518
## 343   -0.574   -0.574
## 342    0.409    0.409
## 451    0.422    0.422
## 405   -0.516   -0.516
## 534    0.428    0.428
## 363   -0.553   -0.553
## 344   -0.536   -0.536
## 322    0.339    0.339
## 321    0.332    0.332
## 253   -2.563   -2.563
## 388   -0.541   -0.541
## 387   -0.518   -0.518
## 399   -0.493   -0.493
## 528    0.376    0.376
## 487    0.372    0.372
## 415   -0.874   -0.874
## 382   -0.482   -0.482
## 397   -1.036   -1.036
## 313   -0.792   -0.792
## 401   -0.490   -0.490
## 385   -0.515   -0.515
## 398   -0.900   -0.900
## 324   -0.450   -0.450
## 420    0.251    0.251
## 464    0.403    0.403
## 422    0.306    0.306
## 362   -0.435   -0.435
## 522    0.466    0.466
## 414   -0.863   -0.863
## 517   -0.334   -0.334
## 417    0.254    0.254
## 513    0.257    0.257
## 403   -0.421   -0.421
## 332    0.332    0.332
## 272   -0.405   -0.405
## 402   -0.399   -0.399
## 383   -0.401   -0.401
## 314   -0.710   -0.710
## 273   -0.450   -0.450
## 386   -0.387   -0.387
## 492   -0.286   -0.286
## 371    0.339    0.339
## 416    0.220    0.220
## 445   -0.610   -0.610
## 400   -0.342   -0.342
## 502   -0.285   -0.285
## 323   -0.330   -0.330
## 270    0.412    0.412
## 379   -0.586   -0.586
## 523    0.314    0.314
## 473   -0.504   -0.504
## 488   -0.203   -0.203
## 291   -0.426   -0.426
## 327   -0.254   -0.254
## 292   -0.386   -0.386
## 511    0.210    0.210
## 548    0.232    0.232
## 472   -0.506   -0.506
## 317   -0.333   -0.333
## 446   -0.374   -0.374
## 380   -0.415   -0.415
## 264   -0.348   -0.348
#salud psicológica correlaciona mucho con SM
subset(lavaan::modindices(sem2)[order(lavaan::modindices(sem2)$mi, decreasing=TRUE), ], mi > 5 & abs(sepc.all)>0.2)
##                        lhs op                    rhs      mi    epc sepc.lv
## 518 p40_cond_trab_istas_06 ~~ p40_cond_trab_istas_07 730.554  0.846   0.846
## 491 p40_cond_trab_istas_01 ~~ p40_cond_trab_istas_02 589.106  0.692   0.692
## 366            p3_siente_5 ~~            p3_siente_6 521.345  0.455   0.455
## 503 p40_cond_trab_istas_02 ~~ p40_cond_trab_istas_07 196.181  0.713   0.713
## 502 p40_cond_trab_istas_02 ~~ p40_cond_trab_istas_06 178.706  0.757   0.757
## 497 p40_cond_trab_istas_01 ~~ p40_cond_trab_istas_07 157.750  0.610   0.610
## 513 p40_cond_trab_istas_08 ~~ p40_cond_trab_istas_09 150.291  0.407   0.407
## 496 p40_cond_trab_istas_01 ~~ p40_cond_trab_istas_06 138.025  0.631   0.631
## 504 p40_cond_trab_istas_04 ~~ p40_cond_trab_istas_05 130.172  0.347   0.347
## 512 p40_cond_trab_istas_05 ~~ p40_cond_trab_istas_07  63.610  0.364   0.364
## 511 p40_cond_trab_istas_05 ~~ p40_cond_trab_istas_06  62.805  0.395   0.395
## 464             p5_animo_3 ~~             p5_animo_4  57.330  0.226   0.226
## 414            p4_afront_2 ~~            p4_afront_3  50.140  0.206   0.206
## 494 p40_cond_trab_istas_01 ~~ p40_cond_trab_istas_08  40.115  0.294   0.294
## 507 p40_cond_trab_istas_04 ~~ p40_cond_trab_istas_06  39.497  0.281   0.281
## 508 p40_cond_trab_istas_04 ~~ p40_cond_trab_istas_07  38.602  0.249   0.249
## 500 p40_cond_trab_istas_02 ~~ p40_cond_trab_istas_08  37.105  0.289   0.289
## 266      p42_resiliencia_2 ~~      p42_resiliencia_3  32.783  0.715   0.715
## 441             p5_animo_1 ~~             p5_animo_2  30.019  0.154   0.154
## 388            p3_siente_6 ~~             p5_animo_3  26.796 -0.212  -0.212
## 369            p3_siente_5 ~~            p4_afront_3  26.033 -0.209  -0.209
## 330            p3_siente_2 ~~            p3_siente_5  25.619 -0.159  -0.159
## 329            p3_siente_2 ~~            p3_siente_3  25.602  0.132   0.132
## 349            p3_siente_3 ~~            p3_siente_6  23.884 -0.168  -0.168
## 389            p3_siente_6 ~~             p5_animo_4  23.617 -0.168  -0.168
## 501 p40_cond_trab_istas_02 ~~ p40_cond_trab_istas_09  23.410  0.230   0.230
## 331            p3_siente_2 ~~            p3_siente_6  22.955 -0.157  -0.157
## 309            p3_siente_1 ~~            p3_siente_2  22.892  0.127   0.127
## 310            p3_siente_1 ~~            p3_siente_3  22.377  0.131   0.131
## 373            p3_siente_5 ~~             p5_animo_4  21.796 -0.167  -0.167
## 372            p3_siente_5 ~~             p5_animo_3  21.319 -0.183  -0.183
## 383            p3_siente_6 ~~            p4_afront_1  21.171 -0.194  -0.194
## 495 p40_cond_trab_istas_01 ~~ p40_cond_trab_istas_09  21.038  0.217   0.217
## 244      p42_resiliencia_1 ~~      p42_resiliencia_3  20.978 -0.545  -0.545
## 367            p3_siente_5 ~~            p4_afront_1  18.949 -0.180  -0.180
## 370            p3_siente_5 ~~             p5_animo_1  18.657 -0.151  -0.151
## 385            p3_siente_6 ~~            p4_afront_3  18.339 -0.171  -0.171
## 301      p42_resiliencia_3 ~~ p40_cond_trab_istas_01  18.255 -0.221  -0.221
## 312            p3_siente_1 ~~            p3_siente_6  17.594 -0.159  -0.159
## 403            p4_afront_1 ~~             p5_animo_3  15.864  0.138   0.138
## 348            p3_siente_3 ~~            p3_siente_5  15.199 -0.126  -0.126
## 400            p4_afront_1 ~~            p4_afront_3  14.771  0.131   0.131
## 387            p3_siente_6 ~~             p5_animo_2  14.743 -0.144  -0.144
## 398            p3_siente_6 ~~ p40_cond_trab_istas_07  14.584 -0.184  -0.184
## 484 p39_cond_trab_cult_org ~~ p40_cond_trab_istas_02  14.565 -0.184  -0.184
## 469             p5_animo_3 ~~ p40_cond_trab_istas_05  14.537 -0.164  -0.164
## 381            p3_siente_5 ~~ p40_cond_trab_istas_06  14.225 -0.194  -0.194
## 386            p3_siente_6 ~~             p5_animo_1  13.952 -0.124  -0.124
## 262      p42_resiliencia_1 ~~ p40_cond_trab_istas_08  13.895 -0.184  -0.184
## 489 p39_cond_trab_cult_org ~~ p40_cond_trab_istas_06  13.608  0.167   0.167
## 382            p3_siente_5 ~~ p40_cond_trab_istas_07  13.358 -0.179  -0.179
## 371            p3_siente_5 ~~             p5_animo_2  13.014 -0.126  -0.126
## 263      p42_resiliencia_1 ~~ p40_cond_trab_istas_09  12.944 -0.201  -0.201
## 368            p3_siente_5 ~~            p4_afront_2  12.684 -0.127  -0.127
## 478             p5_animo_4 ~~ p40_cond_trab_istas_05  12.572 -0.147  -0.147
## 302      p42_resiliencia_3 ~~ p40_cond_trab_istas_02  12.320 -0.186  -0.186
## 399            p4_afront_1 ~~            p4_afront_2  11.629  0.110   0.110
## 397            p3_siente_6 ~~ p40_cond_trab_istas_06  10.771 -0.167  -0.167
## 384            p3_siente_6 ~~            p4_afront_2  10.609 -0.115  -0.115
## 465             p5_animo_3 ~~ p39_cond_trab_cult_org   9.907 -0.141  -0.141
## 311            p3_siente_1 ~~            p3_siente_5   9.868 -0.111  -0.111
## 260      p42_resiliencia_1 ~~ p40_cond_trab_istas_04   9.650  0.162   0.162
## 426            p4_afront_2 ~~ p40_cond_trab_istas_06   8.046 -0.146  -0.146
## 320            p3_siente_1 ~~ p39_cond_trab_cult_org   7.767 -0.123  -0.123
## 280      p42_resiliencia_2 ~~ p40_cond_trab_istas_01   7.364 -0.142  -0.142
## 490 p39_cond_trab_cult_org ~~ p40_cond_trab_istas_07   7.245  0.117   0.117
## 315            p3_siente_1 ~~            p4_afront_3   7.172 -0.113  -0.113
## 419            p4_afront_2 ~~ p39_cond_trab_cult_org   6.746 -0.113  -0.113
## 359            p3_siente_3 ~~ p40_cond_trab_istas_02   6.688 -0.103  -0.103
## 339            p3_siente_2 ~~ p39_cond_trab_cult_org   6.343 -0.104  -0.104
## 281      p42_resiliencia_2 ~~ p40_cond_trab_istas_02   6.204 -0.121  -0.121
## 305      p42_resiliencia_3 ~~ p40_cond_trab_istas_08   5.965 -0.120  -0.120
## 364            p3_siente_3 ~~ p40_cond_trab_istas_06   5.835 -0.119  -0.119
## 515 p40_cond_trab_istas_08 ~~ p40_cond_trab_istas_07   5.505  0.090   0.090
## 255      p42_resiliencia_1 ~~             p5_animo_3   5.469 -0.131  -0.131
## 452             p5_animo_1 ~~ p40_cond_trab_istas_07   5.088 -0.111  -0.111
##     sepc.all sepc.nox
## 518    4.484    4.484
## 491    1.708    1.708
## 366    1.798    1.798
## 503    2.520    2.520
## 502    2.949    2.949
## 497    2.048    2.048
## 513    0.564    0.564
## 496    2.337    2.337
## 504    0.672    0.672
## 512    1.124    1.124
## 511    1.346    1.346
## 464    0.497    0.497
## 414    0.469    0.469
## 494    0.528    0.528
## 507    0.935    0.935
## 508    0.750    0.750
## 500    0.545    0.545
## 266    3.553    3.553
## 441    0.412    0.412
## 388   -0.572   -0.572
## 369   -0.631   -0.631
## 330   -0.577   -0.577
## 329    0.413    0.413
## 349   -0.568   -0.568
## 389   -0.516   -0.516
## 501    0.439    0.439
## 331   -0.542   -0.542
## 309    0.336    0.336
## 310    0.340    0.340
## 373   -0.538   -0.538
## 372   -0.519   -0.519
## 383   -0.499   -0.499
## 495    0.393    0.393
## 244   -2.530   -2.530
## 367   -0.486   -0.486
## 370   -0.525   -0.525
## 385   -0.492   -0.492
## 301   -0.825   -0.825
## 312   -0.459   -0.459
## 403    0.254    0.254
## 348   -0.447   -0.447
## 400    0.257    0.257
## 387   -0.439   -0.439
## 398   -0.784   -0.784
## 484   -0.348   -0.348
## 469   -0.320   -0.320
## 381   -0.954   -0.954
## 386   -0.411   -0.411
## 262   -0.409   -0.409
## 489    0.473    0.473
## 382   -0.800   -0.800
## 371   -0.404   -0.404
## 263   -0.451   -0.451
## 368   -0.399   -0.399
## 478   -0.328   -0.328
## 302   -0.732   -0.732
## 399    0.225    0.225
## 397   -0.784   -0.784
## 384   -0.342   -0.342
## 465   -0.230   -0.230
## 311   -0.337   -0.337
## 260    0.421    0.421
## 426   -0.542   -0.542
## 320   -0.215   -0.215
## 280   -0.442   -0.442
## 490    0.302    0.302
## 315   -0.250   -0.250
## 419   -0.204   -0.204
## 359   -0.290   -0.290
## 339   -0.219   -0.219
## 281   -0.396   -0.396
## 305   -0.343   -0.343
## 364   -0.504   -0.504
## 515    0.230    0.230
## 255   -0.346   -0.346
## 452   -0.417   -0.417



Referencias

Andy Field. 2009. Discovering Statistics using SPSS Statistics.
Awang, Zainudin, Asyraf Afthanorhan, Mahadzirah Mohamad, and Iman Asri. 2016. “An Evaluation of Measurement Model for Medical Tourism Research: The Confirmatory Factor Analysis Approach.” International Journal of Tourism Policy 6 (January): 29. https://doi.org/10.1504/IJTP.2015.075141.
Barlett, M. 1937. Properties of sufficiency and statistical tests.” Proceedings of the Royal Society of London. Series A - Mathematical and Physical Sciences. https://doi.org/10.1098/rspa.1937.0109.
Cattell, Raymond B. 1966. The scree test for the number of factors.” Multivariate Behavioral Research. https://doi.org/10.1207/s15327906mbr0102_10.
Espinoza, Sergio Contreras, and Francisco Novoa-Muñoz. 2018. Advantages of ordinal alpha versus Cronbach’s alpha, illustrated using the WHO AUDIT testVantagens do alfa ordinal em relação ao alfa de Cronbach verificadas na pesquisa AUDIT-OMS TT - Ventajas del alfa ordinal respecto al alfa de Cronbach ilustradas con.” Revista Panamericana de Salud Publica = Pan American Journal of Public Health 42 (April): e65–65. https://doi.org/10.26633/RPSP.2018.65.
Fox, J. 2019. polycor: Polychoric and Polyserial Correlations.”
Fox, John. 2019. “Polycor: Polychoric and Polyserial Correlations.” https://CRAN.R-project.org/package=polycor.
Hair, Joseph, William Black, Barry Babin, and Rolph Anderson. 2010. Multivariate Data Analysis: A Global Perspective.” In Multivariate Data Analysis: A Global Perspective.
Henseler, Jorg, Christian M Ringle, and Marko Sarstedt. 2015. A new criterion for assessing discriminant validity in variance-based structural equation modeling.” Journal of the Academy of Marketing Science 43 (1): 115–35. https://doi.org/10.1007/s11747-014-0403-8.
Izquierdo, Isabel, Julio Olea, and Francisco Jos+e Abad. 2014. Exploratory factor analysis in validation studies: uses and recommendations. Psicothema 26 (3): 395–400. https://doi.org/10.7334/psicothema2013.349.
Kline, Rex. 2013. Exploratory and confirmatory factor analysis.” In Applied Quantitative Analysis in Education and the Social Sciences. https://doi.org/10.4324/9780203108550.
Koo, T, and M Li. 2016. A Guideline of Selecting and Reporting Intraclass Correlation Coefficients for Reliability Research. Journal of Chiropractic Medicine 15 2: 155–63.
Li, Cheng-Hsien. 2016. Confirmatory factor analysis with ordinal data: Comparing robust maximum likelihood and diagonally weighted least squares.” Behavior Research Methods 48 (3): 936–49. https://doi.org/10.3758/s13428-015-0619-7.
Liu, Ou Lydia, and Frank Rijmen. 2008. A modified procedure for parallel analysis of ordered categorical data.” Behavior Research Methods 40 (2): 556–62. https://doi.org/10.3758/BRM.40.2.556.
Lloret, Susana, Adoración Ferreres, Ana Hernández, and Inés Tomás. 2017. The exploratory factor analysis of items: Guided analysis based on empirical data and software. Anales de Psicología 33 (2): 417–32. https://doi.org/10.6018/analesps.33.2.270211.
Lloret-Segura, Susana, Adoración Ferreres-Traver, Ana Hernández-Baeza, and Inés Tomás-Marco. 2014. El Análisis Factorial Exploratorio de los Ítems: una guía práctica, revisada y actualizada .” scieloes.
Méndez Martínez, Carolina, and Martín Alonso Rondón Sepúlveda. 2012. Introducción al análisis factorial exploratorio.” Revista Colombiana de Psiquiatría 41 (1): 197–207. https://www.redalyc.org/articulo.oa?id=80624093014.
Osborne, Jason W, Anna B Costello, and J Thomas Kellow. 2008. Best Practices in Quantitative Methods.” Thousand Oaks, California: SAGE Publications, Inc. https://doi.org/10.4135/9781412995627.
Presaghi, Fabio, and Marta Desimoni. 2015. Title A Parallel Analysis With Polychoric Correlation Matrices. https://doi.org/10.13140/RG.2.1.4380.2640.
Revelle, Maintainer William. 2017. psych: Procedures for personality and psychological research (R package).” Evanston, Illinois: Northwestern University. https://cran.r-project.org/package=psych.
Sakaluk, John K, and Stephen D Short. 2017. A Methodological Review of Exploratory Factor Analysis in Sexuality Research: Used Practices, Best Practices, and Data Analysis Resources. Journal of Sex Research 54 (1): 1–9. https://doi.org/10.1080/00224499.2015.1137538.
Streiner, David L. 2003. Starting at the beginning: An introduction to coefficient alpha and internal consistency.” Journal of Personality Assessment. https://doi.org/10.1207/S15327752JPA8001_18.
Treiblmaier, Horst, and Peter Filzmoser. 2010. Exploratory factor analysis revisited: How robust methods support the detection of hidden multivariate data structures in IS research.” Information & Management 47 (4): 197–207. https://doi.org/https://doi.org/10.1016/j.im.2010.02.002.
Whittaker, Tiffany A. 2012. Using the Modification Index and Standardized Expected Parameter Change for Model Modification.” The Journal of Experimental Education 80 (1): 26–44. https://doi.org/10.1080/00220973.2010.531299.
Worthington, Roger L, and Tiffany A Whittaker. 2006. Scale Development Research: A Content Analysis and Recommendations for Best Practices. Worthington, Roger L.: Department of Educational, School,; Counseling Psychology, University of Missouri, Columbia, MO, US, 65211, WorthingtonR@missouri.edu: Sage Publications. https://doi.org/10.1177/0011000006288127.
Yong, An, and Sean Pearce. 2013. A Beginner’s Guide to Factor Analysis: Focusing on Exploratory Factor Analysis.” Tutorials in Quantitative Methods for Psychology 9 (October): 79–94. https://doi.org/10.20982/tqmp.09.2.p079.

Compilación

Información de la Sesión

save.image("__accion_salud_psicometrica_dsps_mayo.RData")
Sys.getenv("R_LIBS_USER")
## [1] "C:/Users/andre/Google Drive/AccionSaludUDP_win/renv/library/R-4.0/x86_64-w64-mingw32;C:/Users/andre/AppData/Local/Temp/RtmpkFzNyO/renv-system-library"
rstudioapi::getSourceEditorContext()
## Document Context: 
## - id:        '5DF2DB0A'
## - path:      'C:/Users/andre/Google Drive/AccionSaludUDP_win/Propiedades_Psicometricas_corr.Rmd'
## - contents:  <3565 rows>
## Document Selection:
## - [2507, 56] -- [2507, 56]: ''
sessionInfo()
## R version 4.0.5 (2021-03-31)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows 10 x64 (build 19042)
## 
## Matrix products: default
## 
## locale:
## [1] LC_COLLATE=Spanish_Chile.1252  LC_CTYPE=Spanish_Chile.1252   
## [3] LC_MONETARY=Spanish_Chile.1252 LC_NUMERIC=C                  
## [5] LC_TIME=Spanish_Chile.1252    
## 
## attached base packages:
##  [1] parallel  grid      splines   stats     graphics  grDevices datasets 
##  [8] utils     methods   base     
## 
## other attached packages:
##  [1] DiagrammeR_1.0.6.1         knitr_1.31                
##  [3] plyr_1.8.6                 gdtools_0.2.3             
##  [5] heatmaply_1.2.1            viridis_0.5.1             
##  [7] viridisLite_0.3.0          random.polychor.pa_1.1.4-4
##  [9] boot_1.3-27                semTools_0.5-4            
## [11] semPlot_1.1.2              lavaan_0.6-7              
## [13] parameters_0.11.0          jrt_1.0.1                 
## [15] directlabels_2021.1.13     REdaS_0.9.3               
## [17] forcats_0.5.1              purrr_0.3.4               
## [19] tibble_3.0.6               tidyverse_1.3.0           
## [21] factoextra_1.0.7           ggiraph_0.7.8             
## [23] nFactors_2.4.1             homals_1.0-8              
## [25] radiant_1.3.2              radiant.multivariate_1.3.5
## [27] radiant.model_1.3.14       radiant.basics_1.3.4      
## [29] radiant.design_1.3.5       radiant.data_1.3.12       
## [31] tidyr_1.1.2                lubridate_1.7.9.2         
## [33] magrittr_2.0.1             ggcorrplot_0.1.3          
## [35] MVN_5.8                    polycor_0.7-10            
## [37] mvtnorm_1.1-1              GPArotation_2014.11-1     
## [39] psych_2.0.12               RColorBrewer_1.1-2        
## [41] skimr_2.1.2                devtools_2.3.2            
## [43] usethis_2.0.0              sqldf_0.4-11              
## [45] RSQLite_2.2.3              gsubfn_0.7                
## [47] proto_1.0.0                altair_4.1.1              
## [49] rbokeh_0.5.1               rio_0.5.16                
## [51] SCtools_0.3.1              future_1.21.0             
## [53] doParallel_1.0.16          iterators_1.0.13          
## [55] foreach_1.5.1              ggforce_0.3.2             
## [57] dplyr_1.0.4                compareGroups_4.4.6       
## [59] Hmisc_4.4-2                Formula_1.2-4             
## [61] survival_3.2-10            ggsci_2.9                 
## [63] MASS_7.3-53.1              astsa_1.12                
## [65] vcd_1.4-8                  Epi_2.43                  
## [67] lmtest_0.9-38              tsModel_0.6               
## [69] foreign_0.8-81             sjPlot_2.8.7              
## [71] textreg_0.1.5              estimatr_0.30.2           
## [73] rjson_0.2.20               janitor_2.1.0             
## [75] zoo_1.8-8                  forecast_8.13             
## [77] lattice_0.20-41            DT_0.17                   
## [79] data.table_1.13.6          stringr_1.4.0             
## [81] readr_1.4.0                gganimate_1.0.7           
## [83] htmlwidgets_1.5.3          plotly_4.9.3              
## [85] ggplot2_3.3.3              pacman_0.5.1              
## [87] tm_0.7-8                   NLP_0.2-1                 
## 
## loaded via a namespace (and not attached):
##   [1] pbapply_1.4-3           haven_2.3.1             tcltk_4.0.5            
##   [4] vctrs_0.3.6             mgcv_1.8-34             blob_1.2.1             
##   [7] prodlim_2019.11.13      later_1.1.0.1           nloptr_1.2.2.2         
##  [10] DBI_1.1.1               jpeg_0.1-8.1            sjmisc_2.8.6           
##  [13] pls_2.7-3               kutils_1.70             tseries_0.10-48        
##  [16] laeken_0.5.1            regsem_1.6.2            sROC_0.1-2             
##  [19] markdown_1.1            DEoptimR_1.0-8          Rcpp_1.0.6             
##  [22] KernSmooth_2.23-18      promises_1.1.1          vegan_2.5-7            
##  [25] ggeffects_1.0.1         pkgload_1.1.0           fs_1.5.0               
##  [28] mnormt_2.0.2            ranger_0.12.1           digest_0.6.27          
##  [31] png_0.1-7               crul_1.0.0              pkgconfig_2.0.3        
##  [34] gower_0.2.2             estimability_1.3        minqa_1.2.4            
##  [37] reticulate_1.18         gistr_0.9.0             modeltools_0.2-23      
##  [40] nortest_1.0-4           xfun_0.20               tidyselect_1.1.0       
##  [43] performance_0.7.0       reshape2_1.4.4          kernlab_0.9-29         
##  [46] randomizr_0.20.0        pcaPP_1.9-73            pkgbuild_1.2.0         
##  [49] rlang_0.4.10            AlgDesign_1.2.0         manipulateWidget_0.10.1
##  [52] HardyWeinberg_1.7.1     hexbin_1.28.2           glue_1.4.2             
##  [55] pryr_0.1.4              registry_0.5-1          modelr_0.1.8           
##  [58] fpc_2.2-9               emmeans_1.5.4           sgeostat_1.0-27        
##  [61] lava_1.6.8.1            rockchalk_1.8.144       ggsignif_0.6.0         
##  [64] bayestestR_0.8.2        recipes_0.1.15          kableExtra_1.3.1       
##  [67] GGally_2.1.0            import_1.2.0            httpuv_1.5.5           
##  [70] class_7.3-18            corpcor_1.6.9           qgraph_1.6.9           
##  [73] webshot_0.5.2           jsonlite_1.7.2          tmvnsim_1.0-2          
##  [76] bit_4.0.4               shinyFiles_0.9.0        mime_0.9               
##  [79] systemfonts_1.0.0       fracdiff_1.5-1          gridExtra_2.3          
##  [82] zCompositions_1.3.4     stringi_1.5.3           insight_0.12.0         
##  [85] processx_3.4.5          sem_3.1-11              quadprog_1.5-8         
##  [88] bitops_1.0-6            cli_2.3.0               maps_3.3.0             
##  [91] rrcov_1.5-5             mvoutlier_2.0.9         energy_1.7-7           
##  [94] survminer_0.4.8         officer_0.3.16          rstudioapi_0.13        
##  [97] TSP_1.1-10              sfsmisc_1.1-8           nlme_3.1-152           
## [100] ks_1.11.7               listenv_0.8.0           miniUI_0.1.1.1         
## [103] survMisc_0.5.5          httpcode_0.3.0          prabclus_2.3-2         
## [106] NADA_1.6-1.1            dbplyr_2.1.0            sessioninfo_1.1.1      
## [109] TTR_0.24.2              readxl_1.3.1            lifecycle_0.2.0        
## [112] quantmod_0.4.18         timeDate_3043.102       munsell_0.5.0          
## [115] cellranger_1.1.0        robCompositions_2.3.0   moments_0.14           
## [118] ggalluvial_0.12.3       vegawidget_0.3.2        visNetwork_2.0.9       
## [121] codetools_0.2-18        coda_0.19-4             mi_1.0                 
## [124] dcurver_0.9.2           htmlTable_2.1.0         xtable_1.8-4           
## [127] diptest_0.75-7          OpenMx_2.18.1           scatterplot3d_0.3-41   
## [130] abind_1.4-5             farver_2.0.3            parallelly_1.23.0      
## [133] km.ci_0.5-2             sjstats_0.18.1          rgl_0.104.16           
## [136] patchwork_1.1.1         cluster_2.1.1           dendextend_1.14.0      
## [139] fda_5.1.9               Matrix_1.3-2            ellipsis_0.3.1         
## [142] prettyunits_1.1.1       reprex_1.0.0            ggridges_0.5.3         
## [145] mclust_5.4.7            flextable_0.6.3         igraph_1.2.6           
## [148] sjlabelled_1.1.7        pdp_0.7.0               remotes_2.2.0          
## [151] slam_0.1-48             etm_1.1.1               VIM_6.1.0              
## [154] testthat_3.0.1          htmltools_0.5.1.1       yaml_2.2.1             
## [157] XML_3.99-0.5            fds_1.8                 e1071_1.7-4            
## [160] ggpubr_0.4.0            hdrcde_3.4              withr_2.4.1            
## [163] xgboost_1.3.2.1         bit64_4.0.5             effectsize_0.4.3       
## [166] mirt_1.33.2             robustbase_0.93-7       progressr_0.7.0        
## [169] data.tree_1.0.0         memoise_2.0.0           evaluate_0.14          
## [172] pwr_1.3-0               permute_0.9-5           callr_3.5.1            
## [175] ps_1.5.0                curl_4.3                fdrtool_1.2.16         
## [178] highr_0.8               xts_0.12.1              checkmate_2.0.0        
## [181] renv_0.13.2             cachem_1.0.3            desc_1.2.0             
## [184] cmprsk_2.2-10           truncnorm_1.0-8         openxlsx_4.2.3         
## [187] rstatix_0.6.0           ggrepel_0.9.1           easyalluvial_0.3.0     
## [190] rprojroot_2.0.2         tools_4.0.5             sandwich_3.0-0         
## [193] rainbow_3.6             Rsolnp_1.16             RCurl_1.98-1.2         
## [196] mice_3.13.0             pbivnorm_0.6.0          ape_5.4-1              
## [199] car_3.0-10              xml2_1.3.2              httr_1.4.2             
## [202] assertthat_0.2.1        rmarkdown_2.6           globals_0.14.0         
## [205] R6_2.5.0                nnet_7.3-15             progress_1.2.2         
## [208] gtools_3.8.2            statmod_1.4.35          repr_1.1.3             
## [211] lisrelToR_0.1.4         urca_1.3-0              clustMixType_0.2-9     
## [214] snakecase_0.11.0        carData_3.0-4           colorspace_2.0-0       
## [217] generics_0.1.0          stats4_4.0.5            base64enc_0.1-3        
## [220] chron_2.3-56            pillar_1.4.7            tweenr_1.0.1           
## [223] sp_1.4-5                uuid_0.1-4              gtable_0.3.0           
## [226] rvest_0.3.6             zip_2.1.1               latticeExtra_0.6-29    
## [229] fastmap_1.1.0           seriation_1.2-9         crosstalk_1.1.1        
## [232] flexmix_2.3-17          NeuralNetTools_1.5.2    broom_0.7.4            
## [235] arm_1.11-2              scales_1.1.1            backports_1.2.1        
## [238] writexl_1.3.1           ipred_0.9-9             lme4_1.1-26            
## [241] Deriv_4.1.2             hms_1.0.0               shiny_1.6.0            
## [244] KMsurv_0.1-5            polyclip_1.10-0         numDeriv_2016.8-1.1    
## [247] glasso_1.11             lazyeval_0.2.2          cvTools_0.3.2          
## [250] crayon_1.4.0            shinyAce_0.4.1          matrixcalc_1.0-3       
## [253] reshape_0.8.8           rpart_4.1-15            compiler_4.0.5
unlink("*_cache", recursive = T, force = T, expand = TRUE)