Volveremos a usar los datos de la encuesta del ejercicio anterior, donde convertimos las variables categóricas en numéricas para poder aplicar un análisis factorial. Solo que para realizar un mejor análisis completaremos los NAs por el método de predictive mean matching o media predictiva ya que este nos permite reducir algún sesgo que este presente en los datos
library(tidyverse)
library(psych)
library(ggfortify)
library(autoplotly)
library(mice)
load("datos.Rda")
#Veamos la cantidad de NAs en los datos
sum(colSums(is.na(datos)))## [1] 608
#Imputacion por PMM
impute <- mice(datos, method = 'pmm', seed = 123, m = 1, printFlag = F)
df <- complete(impute, 1)
sum(colSums(is.na(df))) #Ya no hay NAs## [1] 0
Nuestro objetivo es crear un índice de interacción social, para lo cual tomaremos los siguientes variables: Interés en actividades al aire libre, Interés en socializar, tipo de fumador, tipo de bebedor, nivel de adictividad al trabajo, si se prefiere tener más amigos a tener más dinero, si gastan mucho dinero en fiestas, si se enojan rápido, si consideran importante conectarse con gente correcta, nivel de felicidad, nivel de energía, tiempo que pasan en línea y si gastan mucho dinero en entretenimiento.
soc_inter <- df[,c(50,61,74,75,80,86,114,119,120,124,125,133,137)]
comp <- fa.parallel(soc_inter, fm = 'minres', fa = 'both')## Parallel analysis suggests that the number of factors = 4 and the number of components = 3
Tomaremos el número de factores recomendado para hacer el análisis. Se utilizó la rotación de tipo varimax ya que produce factores ortogonales ya que para nuestro índice buscamos que los factores no estén correlacionados.También veremos gráficamente que variables definen cada uno de los factores
factor_analysis <- fa(soc_inter, nfactors = fact, rotate = 'varimax')
values <- factor_analysis$loadings
autoplotly(factor_analysis$loadings[,1:4])## Scale for 'y' is already present. Adding another scale for 'y', which will
## replace the existing scale.
Por lo que podemos dar la siguiente interpretación (mostrando explícitamente las variables que definen cada factor)
| Actitud | Diversión | Relaciones Extrapersonales | Amistades |
|---|---|---|---|
| Energy Levels | Alcohol | Knowing right people | Friends vs Money |
| Happiness in life | Smoking | Fun with friends | |
| Entertainment Spending |
El factor de Actitud hace referencia a que entre más energía tengas y más feliz te sientas, tu actitud será mejor, el factor de Diversión hace referencia al comportamiento social durante reuniones o fiestas, si bebes, fumas y gastas demasiado en diversión, es muy probable que te la pases en fiestas y estés divirtiendote, el factor de Relaciones Extrapersonales hace referencia a como eliges con quien socializar, y el factor de Amistades se refiere a la calidad de la propia persona como amigo hacia los demás, si prefiere tener amigos a tener dinero, habla de una persona bien intencionada y si tiene un gran interés en socializar, habla de alguien que busca pasar buen tiempo con sus amigos.
Para la creación del indice tomaremos los pesos que nos da fa y veremos los valores mínimos y máximos que nos puede arrojar el índice.
## MR1 MR2 MR3 MR4
## countryside_outdoors 0.0001511468 -0.11400983 0.0279786519 0.202115381
## fun_with_friends 0.0417597704 0.15999253 0.0165921459 0.306591691
## smoking 0.0469022748 0.29296435 -0.0317722471 -0.114011173
## alcohol 0.0218203126 0.31164123 -0.0068294869 -0.003364511
## workaholism 0.0191269858 -0.10959372 -0.0061416497 0.020678889
## friends_versus_money -0.0473853491 -0.02217113 0.0522065333 0.384269601
## socializing 0.0700224047 0.04150086 -0.0104817665 0.068002538
## getting_angry -0.0294243567 0.03836611 0.0004841718 -0.072211192
## knowing_the_right_people 0.0155619179 -0.09451662 1.0169034403 -0.115229672
## happiness_in_life 0.1667652641 -0.01137779 -0.0471975954 0.030687404
## energy_levels 0.7136368701 -0.11366762 -0.1490166836 -0.085279486
## internet_usage -0.0395552102 0.10494117 0.0082958856 -0.029370400
## entertainment_spending 0.0422006560 0.28928448 -0.0179225787 0.101156258
#Los valores máximos y mínimos se calcularon usando optimize
#f <- function(x){sum(x*betas[13,])} donde variamos el indice de la variable, de 1 a 13
#optimize(f, interval = c(1, 5), maximum = F) donde cambiabamos el intervalo de valores que tomaban las variables y si queriamos el minimo o maximo
min_values <- matrix(c(rep(1,4),5,1,1,5,rep(1,5)), ncol = 13)
min_index <- rowSums(min_values %*% betas)
max_values <- matrix(c(5,5,4,3,1,5,5,1,5,5,5,4,5), ncol = 13)
max_index <- rowSums(max_values %*% betas)Lo siguiente es estandarizar con estos valores el índice para que este en \([0,1]\). Mostraremos a continuación como se calcularía el índice tomando algunos encuestados.
## countryside_outdoors fun_with_friends smoking alcohol workaholism
## 1 5 5 1 3 4
## 56 4 4 4 3 3
## 201 1 2 2 2 3
## 394 3 3 3 1 2
## 536 5 5 4 3 1
## 777 5 5 2 2 3
## friends_versus_money socializing getting_angry knowing_the_right_people
## 1 3 3 1 3
## 56 4 1 5 3
## 201 1 1 3 2
## 394 5 3 3 2
## 536 5 5 3 5
## 777 5 3 5 5
## happiness_in_life energy_levels internet_usage entertainment_spending
## 1 4 5 3 3
## 56 4 2 3 3
## 201 2 1 4 2
## 394 3 5 3 1
## 536 5 5 3 5
## 777 4 5 3 4
index <- function(data){
prueba <- as.matrix(data)
weighted_data <- prueba %*% betas
prelim <- rowSums(weighted_data)
index <- (prelim - min_index)/(max_index - min_index)
return(index)
}
index(datos_prueba)## 1 56 201 394 536 777 1010
## 0.6660041 0.5701964 0.2081182 0.4768182 0.9875023 0.8491563 0.5156914
La escala aquí nos dice que en 0 tenemos muy bajo nivel de interacción social, hablamos de personas retraídas o antisociales mientras que en 1 tenemos un alto nivel de interacción social, es decir aquí está gente demasiado sociable y adicto a las fiestas. Por ejemplo podemos ver que los individuos 201 y 536 probablemente tengan problemas, uno de baja interacción social y otro de demasiada interacción, posiblemente descuidando otros aspectos de su vida.
Para ver los niveles normales y adecuados del índice, veremos un boxplot de las variables. De ahí tomaremos los valores donde se encuentra la mayor parte de la gente encuestada.
low <- matrix(c(3,4,2,2,2,3,2,2,3,3,3,3,2), ncol = 13)
high <- matrix(c(5,5,3,2,4,5,4,4,4,4,4,3,4), ncol = 13)
index(low)## [1] 0.500368
## [1] 0.7874771
Por lo tanto un ideal y saludable índice de interacción social (tomándonos cierta libertad intentandole dar cierta confianza a los límites del intervalo) estaría dentro del rango \([0.45, 0.8]\).