#sesión 2 ----

#install.packages("readxl")
library(readxl) #para leer archivos de excel
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
encabezado <- (read_xlsx("/Users/danielsojuel/Documents/datasets/datos.xlsx", col_names = TRUE))
colnames(encabezado)
##  [1] "id"      "seccion" "rc_i1"   "rc_i2"   "rc_i3"   "rc_i4"   "rc_i5"  
##  [8] "rc_i6"   "rc_i7"   "rc_i8"   "rc_i9"   "rc_i10"  "vf_i1"   "vf_i2"  
## [15] "vf_i3"   "vf_i4"   "vf_i5"   "vf_i6"   "vf_i7"   "vf_i8"   "vf_i9"  
## [22] "vf_i10"  "om_i1"   "om_i2"   "om_i3"   "om_i4"   "om_i5"   "om_i6"  
## [29] "om_i7"   "om_i8"   "om_i9"   "om_i10"  "om_i11"  "om_i12"  "om_i13" 
## [36] "om_i14"  "om_i15"  "mim_i1"  "mim_i2"  "ie_i1"   "ie_i2"
datos <- data.frame(matrix(NA, nrow = 500, ncol= length(encabezado)))
colnames(datos) <- colnames(encabezado)

#llenar id ----

datos$id <- c(1:500)

#llenar sección ----

seccion <- c("a","b") #valores
datos$seccion <- sample(seccion, size = 500, replace = TRUE, prob = c(0.5,0.5))

#llenar variables ----

# Loop through each variable and fill it with random 0's and 1's based on a random probability

set.seed(200)
for (i in 3:length(encabezado)) {
  # Generate a random probability between 0 and 1 for the current variable
  prob <- runif(1)
  # Generate random 0's and 1's based on the probability for the current variable
  datos[,i] <- rbinom(500, 1, prob)
}

# Create table with frequencies and percentages ----
tabla1 <- datos %>%
  count(rc_i1) %>%
  mutate(porcentaje = n/sum(n) * 100) %>%
  mutate(porcentaje = paste(round(porcentaje, 2), "%"))

# para análisis de ítems ----
#install.packages("sjPlot")
library(sjPlot)
## #refugeeswelcome
tab_itemscale(datos[,3:length(datos)])
Component 1
Row Missings Mean SD Skew Item Difficulty Item Discrimination α if deleted
rc_i1 0.00 % 0.52 0.5 -0.09 0.52 -0.08 -0.01
rc_i2 0.00 % 0.69 0.46 -0.81 0.69 -0.01 -0.04
rc_i3 0.00 % 0.04 0.2 4.58 0.04 -0.01 -0.04
rc_i4 0.00 % 0.62 0.49 -0.5 0.62 -0.01 -0.04
rc_i5 0.00 % 0.81 0.39 -1.6 0.81 -0.04 -0.03
rc_i6 0.00 % 0.67 0.47 -0.73 0.67 -0.04 -0.03
rc_i7 0.00 % 0.09 0.29 2.87 0.09 -0.04 -0.03
rc_i8 0.00 % 0.33 0.47 0.73 0.33 0.04 -0.06
rc_i9 0.00 % 0.44 0.5 0.23 0.44 -0.01 -0.04
rc_i10 0.00 % 0.46 0.5 0.15 0.46 0.01 -0.05
vf_i1 0.00 % 0.44 0.5 0.24 0.44 -0.08 -0.01
vf_i2 0.00 % 0.52 0.5 -0.09 0.52 0.01 -0.05
vf_i3 0.00 % 0.44 0.5 0.23 0.44 0.05 -0.07
vf_i4 0.00 % 0.65 0.48 -0.64 0.65 -0.08 -0.01
vf_i5 0.00 % 0.53 0.5 -0.12 0.53 -0.07 -0.01
vf_i6 0.00 % 0.28 0.45 0.96 0.28 0.07 -0.07
vf_i7 0.00 % 0.85 0.35 -2.01 0.85 0.02 -0.05
vf_i8 0.00 % 0.31 0.46 0.8 0.31 0.00 -0.04
vf_i9 0.00 % 0.03 0.17 5.74 0.03 0.09 -0.05
vf_i10 0.00 % 0.3 0.46 0.9 0.30 -0.01 -0.04
om_i1 0.00 % 0.16 0.36 1.9 0.16 -0.03 -0.03
om_i2 0.00 % 0.2 0.4 1.49 0.20 0.06 -0.06
om_i3 0.00 % 0.7 0.46 -0.87 0.70 -0.08 -0.01
om_i4 0.00 % 0.99 0.08 -12.83 0.99 0.00 -0.04
om_i5 0.00 % 0.14 0.35 2.08 0.14 -0.08 -0.02
om_i6 0.00 % 0.6 0.49 -0.42 0.60 0.02 -0.05
om_i7 0.00 % 0.93 0.26 -3.32 0.93 -0.04 -0.03
om_i8 0.00 % 0.12 0.32 2.38 0.12 -0.05 -0.03
om_i9 0.00 % 0.77 0.42 -1.29 0.77 0.09 -0.07
om_i10 0.00 % 0.02 0.13 7.74 0.02 0.08 -0.05
om_i11 0.00 % 0.48 0.5 0.07 0.48 0.03 -0.06
om_i12 0.00 % 0.97 0.18 -5.33 0.97 -0.03 -0.04
om_i13 0.00 % 0.58 0.49 -0.31 0.58 -0.05 -0.02
om_i14 0.00 % 0.77 0.42 -1.3 0.77 0.06 -0.06
om_i15 0.00 % 0.8 0.4 -1.49 0.80 -0.00 -0.04
mim_i1 0.00 % 0.09 0.28 2.92 0.09 0.02 -0.05
mim_i2 0.00 % 0.64 0.48 -0.58 0.64 0.02 -0.05
ie_i1 0.00 % 0.54 0.5 -0.16 0.54 0.04 -0.06
ie_i2 0.00 % 0.94 0.24 -3.64 0.94 -0.05 -0.03
Mean inter-item-correlation=-0.000 · Cronbach’s α=-0.042
#generar tablas por ítem ----

# Loop through each variable in the dataset
for(var in colnames(datos)){
  
  # Create a frequency table for the current variable
  freq_table <- datos %>%
    group_by(!!sym(var)) %>%
    summarize(freq = n()) %>%
    mutate(pct = freq / sum(freq))
  # Assign the frequency and percentage table to a new object with the variable name
  assign(paste0(var, "_tabla"), freq_table)
}

Interpretación de índices de discriminación y dificultad

La función tab_itemscale() en R se utiliza típicamente para analizar las propiedades psicométricas de un conjunto de ítems utilizados para medir un determinado constructo o rasgo. En particular, proporciona información sobre la discriminación y dificultad de cada ítem del conjunto.

La discriminación se refiere al grado en que un ítem puede diferenciar entre individuos que tienen altos niveles del rasgo que se está midiendo y aquellos que tienen bajos niveles del rasgo. Los ítems con alta discriminación pueden distinguir bien entre estos grupos, mientras que los ítems con baja discriminación no son tan efectivos en hacerlo. La discriminación se mide típicamente utilizando una estadística llamada correlación ítem-total, que indica la correlación entre la puntuación en un ítem en particular y la puntuación total en todos los ítems del conjunto. En general, los ítems con correlaciones ítem-total por encima de 0,3 se consideran tener una discriminación adecuada.

La dificultad, por otro lado, se refiere a lo fácil o difícil que es para los individuos responder correctamente un ítem. Los ítems que son demasiado fáciles o demasiado difíciles no son tan informativos como los ítems que son moderadamente desafiantes. La dificultad se mide típicamente utilizando la media del ítem o la proporción de individuos que respondieron correctamente al ítem. En general, los ítems con puntuaciones medias o tasas de respuesta correcta alrededor de 0,5 se consideran tener una dificultad adecuada.

La función tab_itemscale() en R produce una tabla que muestra la media del ítem. También calcula un índice de discriminación (índice D) y un índice de dificultad (índice P) para cada ítem. El índice D proporciona una medida de la discriminación, con valores más altos que indican una mayor discriminación, mientras que el índice P proporciona una medida de la dificultad, con valores cercanos a 0,5 que indican una dificultad moderada.

La interpretación de los resultados de tab_itemscale() implica examinar los valores del índice D y el índice P para cada ítem. Los ítems con valores altos de índice D y valores moderados de índice P se consideran los más efectivos para diferenciar entre individuos con altos y bajos niveles del rasgo que se está midiendo, mientras que también son moderadamente desafiantes para que los individuos respondan correctamente. Los ítems con valores bajos de índice D y valores extremos de índice P (ya sea muy altos o muy bajos) pueden necesitar ser revisados o eliminados del conjunto de ítems, ya que pueden no ser informativos o útiles para medir el rasgo de interés.

La dificultad del ítem debe oscilar entre 0,2 y 0,8. El valor ideal es p+(1-p)/2 (que en su mayoría está entre 0,5 y 0,8) para la discriminación de ítems, los valores aceptables son 0,2 o más; cuanto más cerca de 1 mejor en caso de que el valor alfa de Cronbach total esté por debajo del límite aceptable de 0,7 (principalmente si un índice tiene pocos elementos), la correlación media entre elementos es una medida alternativa para indicar la aceptabilidad; rango satisfactorio se encuentra entre 0,2 y 0,4

Otras definiciones

Discriminación de ítems: capacidad de un ítem para diferenciar entre personas que respondieron un examen con diferentes niveles de competencia.

Dificultad del ítem: la probabilidad de una respuesta correcta, expresada como el nivel de competencia en el que se estima que el 50 % de la muestra de participantes responderá un ítem correctamente.