Encuesta

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

Análisis Factorial

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
fact <- comp$nfact

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.

betas <- factor_analysis$weights
betas
##                                    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.

datos_prueba <- soc_inter[c(1,56,201,394,536,777,1010),]
head(datos_prueba)
##     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.

boxplot(soc_inter)

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
index(high)
## [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]\).