Se encontraron problemas de validez interna dentro de la base de datos.
Se codificaron varios ítems en negativo post hoc debido a que correlacionaban negativamente con el factor de mayor orden inmediato que pretendían representar.
# Importar archivo desde original
setwd("~/RProyects/IPIPNeo")
suppressWarnings(library(readxl))
RawDS <- read_excel("RawNuevo.xlsx", sheet = 1)
# Archivo RawNuevo.xlsx es la base de datos cruda sin las sumas que Tarigan-Fadilla agregaron dentro de las columnas.
# Importar números de ÍTemS y etiquetas
suppressWarnings(library(labelled)) #supressed para que deje de molestar q la versión está mala
itemLabelsAndDesc <- read_excel("RawNuevo.xlsx", sheet = 2)
espLabels <- itemLabelsAndDesc$Español #cambiar a "Inglés" si gustan, estoy usando la traducción de Frez-Puente et al.
var_label(RawDS) <- espLabels
reverseItems <- c(19,21,30,39,54,81,82,84,92,107,118)## IMPORTANTE - Se encontró que los siguientes ítems cargan negativamente al factor superior que intentaban representar, es muy posible que se hayan codificado erroneamente desde la base de datos cruda. Los ítems 54, 84, 82 se agregaron tras sugerencia del warning de la función de alpha() del paquete de psych. A futuro sería mejor importar una base de datos SIN REVERSO para luego reversearlos en RStudio para tenerlo documentado.
RawDS[, as.character(reverseItems)] <-
6 - RawDS[, as.character(reverseItems)]
# Es mucho mejor seleccionar los nombres de las columnas para no tener confusiones entre diferentes transformaciones ni órdenes diferentes.
getItems <- function(x) {
RawDS[, match(as.character(x), names(RawDS)), drop = FALSE]
}
# Chatgepete hazme una lísta de todos los ítems por faceta y todas las facetas por factor Zzz.
N1 <- c(1,31,61,91)
N2 <- c(6,36,66,96)
N3 <- c(11,41,71,101)
N4 <- c(16,46,76,106)
N5 <- c(21,51,81,111)
N6 <- c(26,56,86,116)
# Extraversion
E1 <- c(2,32,62,92)
E2 <- c(7,37,67,97)
E3 <- c(12,42,72,102)
E4 <- c(17,47,77,107)
E5 <- c(22,52,82,112)
E6 <- c(27,57,87,117)
# Openness
O1 <- c(3,33,63,93)
O2 <- c(8,38,68,98)
O3 <- c(13,43,73,103)
O4 <- c(18,48,78,108)
O5 <- c(23,53,83,113)
O6 <- c(28,58,88,118)
# Agreeableness
A1 <- c(4,34,64,94)
A2 <- c(9,39,69,99)
A3 <- c(14,44,74,104)
A4 <- c(19,49,79,109)
A5 <- c(24,54,84,114)
A6 <- c(29,59,89,119)
# Conscientiousness
C1 <- c(5,35,65,95)
C2 <- c(10,40,70,100)
C3 <- c(15,45,75,105)
C4 <- c(20,50,80,110)
C5 <- c(25,55,85,115)
C6 <- c(30,60,90,120)
# Crear sumas de facetas usando nombres de ítems
sumaFacetas <- data.frame(
N1 = rowSums(getItems(N1)),
N2 = rowSums(getItems(N2)),
N3 = rowSums(getItems(N3)),
N4 = rowSums(getItems(N4)),
N5 = rowSums(getItems(N5)),
N6 = rowSums(getItems(N6)),
E1 = rowSums(getItems(E1)),
E2 = rowSums(getItems(E2)),
E3 = rowSums(getItems(E3)),
E4 = rowSums(getItems(E4)),
E5 = rowSums(getItems(E5)),
E6 = rowSums(getItems(E6)),
O1 = rowSums(getItems(O1)),
O2 = rowSums(getItems(O2)),
O3 = rowSums(getItems(O3)),
O4 = rowSums(getItems(O4)),
O5 = rowSums(getItems(O5)),
O6 = rowSums(getItems(O6)),
A1 = rowSums(getItems(A1)),
A2 = rowSums(getItems(A2)),
A3 = rowSums(getItems(A3)),
A4 = rowSums(getItems(A4)),
A5 = rowSums(getItems(A5)),
A6 = rowSums(getItems(A6)),
C1 = rowSums(getItems(C1)),
C2 = rowSums(getItems(C2)),
C3 = rowSums(getItems(C3)),
C4 = rowSums(getItems(C4)),
C5 = rowSums(getItems(C5)),
C6 = rowSums(getItems(C6))
)
# Sumas de factores
sumaFactores <- data.frame(
N = rowSums(sumaFacetas[1:6]),
E = rowSums(sumaFacetas[7:12]),
O = rowSums(sumaFacetas[13:18]),
A = rowSums(sumaFacetas[19:24]),
C = rowSums(sumaFacetas[25:30])
)
# plots de pairs panels para cada faceta.
# En teoría por default si se pone a `ci = TRUE` como setting se hace una normalización Z de Fisher como en el paper original de MaplesGuanCarterMiller.
psych::pairs.panels(sumaFactores, ci = TRUE, alpha = .0001, smoother = TRUE, stars = TRUE)
psych::pairs.panels(sumaFacetas[1:6], ci = TRUE, alpha = .0001, smoother = TRUE, stars = TRUE)
psych::pairs.panels(sumaFacetas[7:12], ci = TRUE, alpha = .0001, smoother = TRUE, stars = TRUE)
psych::pairs.panels(sumaFacetas[13:18], ci = TRUE, alpha = .0001, smoother = TRUE, stars = TRUE)
psych::pairs.panels(sumaFacetas[19:24], ci = TRUE, alpha = .0001, smoother = TRUE, stars = TRUE)
psych::pairs.panels(sumaFacetas[25:30], ci = TRUE, alpha = .0001, smoother = TRUE, stars = TRUE)
library(labelled)
# Correlación entre todos los ítems
corItems <- cor(RawDS, use = "pairwise.complete.obs")
# Etiquetas de ítems
itemDesc <- unlist(var_label(RawDS))
# Extraer triángulo superior
idx <- which(upper.tri(corItems), arr.ind = TRUE)
# Tabla completa de correlaciones
tablaCor <- data.frame(
Item1 = itemDesc[idx[,1]],
Item2 = itemDesc[idx[,2]],
Correlacion = corItems[idx]
)
# Crear dos dataframes independientes
correlacionesPositivas <- head(
tablaCor[order(-tablaCor$Correlacion), ],
20
)
correlacionesNegativas <- head(
tablaCor[order(tablaCor$Correlacion), ],
20
)
# Mostrar ambos dataframes
correlacionesPositivas
correlacionesNegativas
El coeficiente de correlación se puede interpretar como una medida
proxy de similitud semántica entre ítems. Ítem
17. Siempre estoy ocupado que tiene una correlación
positiva con 47. Siempre estoy activo son ambos ítems de la
faceta de E4 - Nivel de actividad, por lo que se espera que
estén correlacionados positivamente. Se encuentran otras correlaciones
positivas que son semánticamente contrarias (ej.
6 . Me enojo fácilmente corr +.63 con
96. No me molestan fácilmente), esto se debe a que uno de
los ítems usado en la correlación es un ítem reverso del la faceta que
representan.
Se muestra un código de correlaciones inter-ítem pero dentro de cada factor. Únicamente usé la información que imprimió para detectar cuáles son los ítems que contra-cargaban al factor superior que pretendían representar.
cat("\n=Coeficientes alpha de Cronbach para por factor=\n")
##
## =Coeficientes alpha de Cronbach para por factor=
c(
N = psych::alpha(getItems(c(N1,N2,N3,N4,N5,N6)))$total$raw_alpha,
E = psych::alpha(getItems(c(E1,E2,E3,E4,E5,E6)))$total$raw_alpha,
O = psych::alpha(getItems(c(O1,O2,O3,O4,O5,O6)))$total$raw_alpha,
A = psych::alpha(getItems(c(A1,A2,A3,A4,A5,A6)))$total$raw_alpha,
C = psych::alpha(getItems(c(C1,C2,C3,C4,C5,C6)))$total$raw_alpha
)
## N E O A C
## 0.9067028 0.8452370 0.7280562 0.7668047 0.9029529
# Es útil el concatenar para que todo se imprima como una única línea de código.
El instrumento posee una confiabilidad interna aceptable a excelente
para cada factor. Dada la pobre correlación inter-ítem en algúnos
sub-factores de openness( en
psych::pairs.panels(sumaFacetas[13:18], ci = TRUE, alpha = .0001, smoother = TRUE, stars = TRUE)
no tengo la confianza para hacer un buen análisis psicométrico usando
esa base de datos y leeré el análisis que publicaron Tarigan & Fadilah (2024) en su
paper. Aún así usaré esta base de datos para comparar muestras.