rm(list = ls())
# Instalar y cargar paquetes necesarios
if (!require("psych")) install.packages("psych", dependencies = TRUE)
## Cargando paquete requerido: psych
## Warning: package 'psych' was built under R version 4.4.2
if (!require("GPArotation")) install.packages("GPArotation", dependencies = TRUE)
## Cargando paquete requerido: GPArotation
##
## Adjuntando el paquete: 'GPArotation'
## The following objects are masked from 'package:psych':
##
## equamax, varimin
if (!require("tidyverse")) install.packages("tidyverse", dependencies = TRUE)
## Cargando paquete requerido: tidyverse
## Warning: package 'ggplot2' was built under R version 4.4.2
## Warning: package 'readr' was built under R version 4.4.2
## Warning: package 'dplyr' was built under R version 4.4.2
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.1 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.1
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ ggplot2::%+%() masks psych::%+%()
## ✖ ggplot2::alpha() masks psych::alpha()
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
if (!require("readxl")) install.packages("readxl", dependencies = TRUE)
## Cargando paquete requerido: readxl
## Warning: package 'readxl' was built under R version 4.4.2
# Librerías
library(psych)
library(GPArotation)
library(tidyverse)
library(readxl)
# Cargar datos desde la ruta especificada
file_path <- "C:\\Users\\Leonardo\\Downloads\\reporte La energía o combustible que utiliza para cocinar.xlsx"
data <- read_excel(file_path, sheet = "Output")
## New names:
## • `Total` -> `Total...5`
## • `Total` -> `Total...8`
## • `Total` -> `Total...11`
## • `Total` -> `Total...14`
# Verificar nombres exactos de las columnas
print("Nombres de columnas:")
## [1] "Nombres de columnas:"
print(names(data))
## [1] "Código" "Provincia" "No usa electricidad"
## [4] "Sí usa electricidad" "Total...5" "No usa gas (balón GLP)"
## [7] "Sí usa gas (balón GLP)" "Total...8" "No usa carbón"
## [10] "Sí usa carbón" "Total...11" "No usa leña"
## [13] "Sí usa leña" "Total...14"
# Identificar columnas relevantes
col_electricidad <- "Sí usa electricidad"
col_gas <- "Sí usa gas (balón GLP)"
col_carbon <- "Sí usa carbón"
col_lena <- "Sí usa leña"
col_total_electricidad <- "Total...5"
col_total_gas <- "Total...8"
col_total_carbon <- "Total...11"
col_total_lena <- "Total...14"
# Calcular los porcentajes de uso positivo
data <- data %>%
mutate(
pct_electricidad = !!sym(col_electricidad) / !!sym(col_total_electricidad) * 100,
pct_gas = !!sym(col_gas) / !!sym(col_total_gas) * 100,
pct_carbon = !!sym(col_carbon) / !!sym(col_total_carbon) * 100,
pct_lena = !!sym(col_lena) / !!sym(col_total_lena) * 100
)
# Seleccionar solo los porcentajes para el análisis factorial
variables <- data %>%
select(pct_electricidad, pct_gas, pct_carbon, pct_lena) %>%
na.omit()
# Verificar la factorización con análisis de adecuación KMO y Bartlett
kmo_result <- KMO(variables)
bartlett_result <- cortest.bartlett(cor(variables), n = nrow(variables))
print("Resultados de KMO y Bartlett:")
## [1] "Resultados de KMO y Bartlett:"
print(kmo_result)
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = variables)
## Overall MSA = 0.63
## MSA for each item =
## pct_electricidad pct_gas pct_carbon pct_lena
## 0.91 0.59 0.72 0.59
print(bartlett_result)
## $chisq
## [1] 338.9104
##
## $p.value
## [1] 3.704739e-70
##
## $df
## [1] 6
# Realizar el análisis factorial
fa_oblimin <- fa(variables, nfactors = 1, rotate = "oblimin")
fa_varimax <- fa(variables, nfactors = 1, rotate = "varimax")
# Comparar las cargas factoriales
print("Cargas factoriales (Oblimin):")
## [1] "Cargas factoriales (Oblimin):"
print(fa_oblimin$loadings)
##
## Loadings:
## MR1
## pct_electricidad 0.491
## pct_gas 0.912
## pct_carbon 0.280
## pct_lena -0.956
##
## MR1
## SS loadings 2.065
## Proportion Var 0.516
print("Cargas factoriales (Varimax):")
## [1] "Cargas factoriales (Varimax):"
print(fa_varimax$loadings)
##
## Loadings:
## MR1
## pct_electricidad 0.491
## pct_gas 0.912
## pct_carbon 0.280
## pct_lena -0.956
##
## MR1
## SS loadings 2.065
## Proportion Var 0.516
# Calcular la varianza explicada
varianza_explicada <- fa_oblimin$Vaccounted[1, 1]
print(paste("Varianza explicada:", varianza_explicada))
## [1] "Varianza explicada: 2.0645611640047"
# Evaluar las afirmaciones
if (varianza_explicada >= 0.5) {
print("Es viable resumir las variables en un factor.")
} else {
print("No es viable resumir las variables en un factor.")
}
## [1] "Es viable resumir las variables en un factor."
if (any(abs(fa_oblimin$loadings - fa_varimax$loadings) > 0.05)) {
print("Las cargas del factor varían entre Oblimin y Varimax.")
} else {
print("Las cargas del factor no varían significativamente entre Oblimin y Varimax.")
}
## [1] "Las cargas del factor no varían significativamente entre Oblimin y Varimax."
if (varianza_explicada < 0.5) {
print("La varianza explicada es menor a 0.5.")
} else {
print("La varianza explicada es mayor o igual a 0.5.")
}
## [1] "La varianza explicada es mayor o igual a 0.5."
# Determinar si todas las afirmaciones son falsas
if (varianza_explicada >= 0.5 &&
all(abs(fa_oblimin$loadings - fa_varimax$loadings) <= 0.05)) {
print("Todas las afirmaciones anteriores son falsas.")
} else {
print("Al menos una de las afirmaciones es verdadera.")
}
## [1] "Todas las afirmaciones anteriores son falsas."