No todas las librerías están disponibles en el entorno de ejecución,
por lo que es necesario instalar algunas de ellas. Para esto se utiliza
el comando install.package()
install.packages("readxl") # Para leer archivos de Excel
install.packages("Hmisc") # Para obtener algunas funciones de correlación
* Sólo es un paso que se realizará una vez. Si ya se tienen instaladas las librerías, no es necesario volver a instalarlas.
Para trabajar con R es necesario establecer un directorio de trabajo.
Esto es el lugar donde se guardarán los archivos que se creen y donde se
pueden leer los archivos que se tengan en el computador. Para esto se
utiliza el comando setwd().
setwd("C:/User/Usuario/Desktop/R") # No correr sin establecer la
# dirección correcta en cada ordenador.
# Nótese que la dirección debe estar entre comillas
# y con las diagonales con un sentido en concreto.
Pasos previos: se recomienda cargar las librerías que se van a
utilizar en el análisis. Para acceder a las funciones de una librería es
necesario cargarla previamente en el entorno de trabajo. Para ello se
utiliza el comando library().
library(readxl) # Para leer archivos de Excel
Base_1 <- read_excel("C:/Carpeta/Subcarpeta/Archivo_Tabla1.xlsx")
Base_1$Género = as.factor(Base_1$Género)
Base_1$`Clase social` = as.factor(Base_1$`Clase social`)
En la prueba se reportan el estadístico t, los grados de libertad (df) y el valor de probabilidad asociado al valor del estadístico (p-value); además del tipo de hipótesis planteada para esta prueba (bilateral) y el intervalo de confianza al calculado al 95% para la diferencia de medias. Así mismo se indican cuanto es el valor de los promedios para cada grupo.
t.test(Base_1$`Años en la escuela` ~ Base_1$Género)
##
## Welch Two Sample t-test
##
## data: Base_1$`Años en la escuela` by Base_1$Género
## t = -0.58977, df = 5.5015, p-value = 0.5787
## alternative hypothesis: true difference in means between group Femenino and group Masculino is not equal to 0
## 95 percent confidence interval:
## -4.193444 2.593444
## sample estimates:
## mean in group Femenino mean in group Masculino
## 5.0 5.8
plot(Base_1$`Años en la escuela` ~ Base_1$Género)
# Antes de llamar a las librerías, asegúrate de instalarlas
library(ggplot2)
library(dplyr)
Base_1 %>%
mutate(Género = factor(Género,
# levels = c(1,2), # Indica cuáles son los niveles de manera explícita
labels = c("Femenino", "Masculino"))) %>% # Nombra las categoríaso niveles de la variable
ggplot(aes(x = Género, # La función ggplot se emplea para crar gráficos
y = `Años en la escuela`)) + # El argumento aes() se utiliza para especificar las variables que se van a graficar, en este caso el eje x corresponde a la variable Género y el eje y a la variable Años en la escuela.
geom_errorbar(stat = "summary", # La función geom_errorbar se utiliza para agregar barras de error al gráfico, indicando la variabilidad de los datos. El argumento stat = "summary" indica que se va a calcular un resumen estadístico
fun.data = mean_se, # La función mean_se se utiliza para calcular el error estándar de la media, que se muestra como barras de error en el gráfico.
width = 0.3, # Width se refiere al ancho de las barras de error en el gráfico
size = 1) + # Size se refiere al grosor de las barras de error en el gráfico
geom_point(stat = "summary", # La función geom_point se utiliza para agregar puntos al gráfico, representando los promedios de cada grupo.
fun = mean, size = 3,
colour = 14) +
scale_y_continuous(limits = c(0, 10)) +
stat_summary(fun = mean,
geom = "line",
aes(group = 1),
size = 1) +
theme_bw() +
labs(x = "Género",
y = "Años en la escuela",
title = "Años en la escuela por género") +
theme(plot.title = element_text(hjust = 0.5,
face = "bold",
color = 4,
size = 16))
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once per session.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
oneway.test(Base_1$`Años en la escuela` ~ Base_1$Género)
##
## One-way analysis of means (not assuming equal variances)
##
## data: Base_1$`Años en la escuela` and Base_1$Género
## F = 0.34783, num df = 1.0000, denom df = 5.5015, p-value = 0.5787
plot(Base_1$`Años en la escuela` ~ Base_1$Género)
Base_1 %>%
mutate(Género=factor(Género,levels=c(1,2),labels=c("Femenino","Masculino"))) %>%
ggplot(aes(x=Género, y=`Años en la escuela`)) +
geom_errorbar(stat="summary", fun.data=mean_se, width=0.3, size=1) +
geom_point(stat="summary", fun=mean, size=3, colour=14) +
scale_y_continuous(limits = c(0, 10)) +
stat_summary(fun=mean,geom="line",aes(group=1),size=1) +
theme_bw() +
labs(x="Género",y="Años en la escuela",title="Años en la escuela por género") +
theme(plot.title=element_text(hjust=0.5,face="bold",color=4,size=16))
Base_1 %>%
mutate(
`Clase social` = factor(`Clase social`,
levels=c(1,2,3,4),
labels=c("Muy Baja","Baja","Media","Alta"))) %>%
ggplot(aes(x = `Clase social`,
y = `Años en la escuela`)) +
geom_errorbar(stat = "summary",
fun.data = mean_se,
width=0.3,
size=1) +
geom_point(stat = "summary",
fun = mean,
size = 3, colour = 14) +
scale_y_continuous(limits = c(0, 10)) +
stat_summary(fun = mean,
geom="line",
aes(group = 1),size = 1) +
theme_bw() +
labs(x = "Clase social",
y = "Años en la escuela",
title = "Años en la escuela por clase social") +
theme(plot.title = element_text(hjust = 0.5,
face = "bold",
color = 4,
size = 16))
Pasos previos: se recomienda cargar las librerías que se van a #
utilizar en el análisis. Para acceder a las funciones de una librería es
necesario cargarla en el entorno de trabajo. Para ello se utiliza el
comando library(). * NO ES NECESARIO REPETIRLO SI
ÉSTO YA SE REALIZÓ ANTERIORMENTE
library(readxl) # Para leer archivos de Excel
Base_2 <- read_excel("C:/Carpeta/Subcarpeta/Archivo_Tabla2.xlsx")
Base_2$Género = as.factor(Base_2$Género)
Base_2$`Clase social` = as.factor(Base_2$`Clase social`)
t.test(Base_2$`Años en la escuela` ~ Base_2$Género)
##
## Welch Two Sample t-test
##
## data: Base_2$`Años en la escuela` by Base_2$Género
## t = 1.2994, df = 17.707, p-value = 0.2105
## alternative hypothesis: true difference in means between group Femenino and group Masculino is not equal to 0
## 95 percent confidence interval:
## -0.6806735 2.8806735
## sample estimates:
## mean in group Femenino mean in group Masculino
## 6.4 5.3
plot(Base_2$`Años en la escuela` ~ Base_2$Género)
library(ggplot2)
library(dplyr)
Base_2 %>%
mutate(Género=factor(Género,levels=c(1,2),labels=c("Femenino","Masculino"))) %>%
ggplot(aes(x=Género, y=`Años en la escuela`)) +
geom_errorbar(stat="summary", fun.data=mean_se, width=0.3, size=1) +
geom_point(stat="summary", fun=mean, size=3, colour=14) +
scale_y_continuous(limits = c(0, 10)) +
stat_summary(fun=mean,geom="line",aes(group=1),size=1) +
theme_bw() +
labs(x="Género",y="Años en la escuela",title="Años en la escuela por género") +
theme(plot.title=element_text(hjust=0.5,face="bold",color=4,size=16))
oneway.test(Base_2$`Años en la escuela` ~ Base_2$`Clase social`)
##
## One-way analysis of means (not assuming equal variances)
##
## data: Base_2$`Años en la escuela` and Base_2$`Clase social`
## F = 1.8621, num df = 3.0000, denom df = 8.1028, p-value = 0.2134
plot(Base_2$`Años en la escuela` ~ Base_2$`Clase social`)
Base_2 %>%
mutate(`Clase social`=factor(`Clase social`,levels=c(1,2,3,4),
labels=c("Muy Baja","Baja","Media","Alta"))) %>%
ggplot(aes(x=`Clase social`,y=`Años en la escuela`)) +
geom_errorbar(stat="summary", fun.data=mean_se, width=0.3, size=1) +
geom_point(stat="summary",fun=mean,size=3,colour=14) +
scale_y_continuous(limits=c(0, 10)) +
stat_summary(fun=mean,geom="line",aes(group=1),size=1) +
theme_bw() +
labs(x="Clase social",y="Años en la escuela",
title="Años en la escuela de acuerdo con la clase social") +
theme(plot.title=element_text(hjust=0.5, face="bold", color=4,size=16))
table(Base_2$Género, Base_2$`Clase social`)
##
## Muy Baja Baja Media Alta
## Femenino 2 2 3 3
## Masculino 1 4 3 2
prop.table(table(Base_2$Género, Base_2$`Clase social`)) # Porcentaje del total
##
## Muy Baja Baja Media Alta
## Femenino 0.10 0.10 0.15 0.15
## Masculino 0.05 0.20 0.15 0.10
prop.table(table(Base_2$Género, Base_2$`Clase social`),
margin = 1) # Porcentaje por filas
##
## Muy Baja Baja Media Alta
## Femenino 0.2 0.2 0.3 0.3
## Masculino 0.1 0.4 0.3 0.2
prop.table(table(Base_2$Género, Base_2$`Clase social`),
margin = 2) # Porcentaje por columnas
##
## Muy Baja Baja Media Alta
## Femenino 0.6666667 0.3333333 0.5000000 0.6000000
## Masculino 0.3333333 0.6666667 0.5000000 0.4000000
chisq.test(Base_2$Género, Base_2$`Clase social`)
## Warning in chisq.test(Base_2$Género, Base_2$`Clase social`): Chi-squared
## approximation may be incorrect
##
## Pearson's Chi-squared test
##
## data: Base_2$Género and Base_2$`Clase social`
## X-squared = 1.2, df = 3, p-value = 0.753
El algoritmo lanza una advertencia sobre un cálculo incorrecto. Ello se debe a que no es la técnica adecuada para aplicar en esta tabla; pero por fines didácticos se ignorará dicha advertencia.
barplot(table(Base_2$Género, Base_2$`Clase social`)) # Por conteo
barplot(prop.table(table(Base_2$Género, Base_2$`Clase social`),
margin = 2)) # Por proporción
Base_2 %>%
mutate(Género=factor(Género,levels=c(1,2),labels=c("Femenino","Masculino")),
`Clase social`=factor(`Clase social`,levels=c(1,2,3,4),labels=c("Muy Baja","Baja","Media","Alta"))) %>%
ggplot(aes(x=`Clase social`, fill=Género)) +
geom_bar(position="fill") +
scale_y_continuous(labels=scales::percent) +
theme_bw() +
labs(x="Clase social",y="Porcentaje",title="Distribución de género por clase social") +
theme(plot.title=element_text(hjust=0.5, face="bold",size=16))
Base_3 <- read_excel("C:/Carpeta/Subcarpeta/Archivo_Tabla3.xlsx")
Base_3$Género = as.factor(Base_3$Género)
Base_3$`Clase Social` = as.factor(Base_3$`Clase Social`)
oneway.test(Base_3$`Años en la escuela` ~ Base_3$Género)
##
## One-way analysis of means (not assuming equal variances)
##
## data: Base_3$`Años en la escuela` and Base_3$Género
## F = 2.8497, num df = 2.000, denom df = 11.979, p-value = 0.0972
plot(Base_3$`Años en la escuela` ~ Base_3$Género)
library(ggplot2)
library(dplyr)
Base_3 %>%
mutate(Género=factor(Género,
levels = c(1,2,3),
labels = c("Femenino",
"Masculino",
"Neutro"))) %>%
ggplot(aes(x = Género, y = `Años en la escuela`)) +
geom_errorbar(stat = "summary", fun.data = mean_se,
width = 0.3, size = 1) +
geom_point(stat = "summary", fun = mean, size = 3, colour = 14) +
scale_y_continuous(limits = c(0, 10)) +
stat_summary(fun = mean,
geom = "line",
aes(group = 1),size = 1) +
theme_bw() +
labs(x = "Género",
y = "Años en la escuela",
title = "Años en la escuela por género") +
theme(plot.title = element_text(hjust = 0.5,
face = "bold",
size=16))
oneway.test(Base_3$`Años en la escuela` ~ Base_3$`Clase Social`)
##
## One-way analysis of means (not assuming equal variances)
##
## data: Base_3$`Años en la escuela` and Base_3$`Clase Social`
## F = 0.11329, num df = 3.0000, denom df = 8.7356, p-value = 0.9501
plot(Base_3$`Años en la escuela` ~ Base_3$`Clase Social`)
Base_3 %>%
mutate(`Clase Social` = factor(`Clase Social`,
levels=c(1,2,3,4),
labels=c("Muy Baja","Baja",
"Media","Alta"))) %>%
ggplot(aes(x = `Clase Social`, y = `Años en la escuela`)) +
geom_errorbar(stat = "summary", fun.data = mean_se,
width = 0.3, size = 1) +
geom_point(stat = "summary",
fun = mean,
size = 3,
colour = 14) +
scale_y_continuous(limits = c(0, 10)) +
stat_summary(fun=mean,geom = "line",
aes(group = 1), size = 1) +
theme_bw() +
labs(x = "Clase Social",
y = "Años en la escuela",
title = "Años en la escuela por clase social") +
theme(plot.title=element_text(hjust = 0.5,
face = "bold", size = 16))
table(Base_3$Género,
Base_3$`Clase Social`)
##
## Muy Baja Baja Media Alta
## Femenino 2 2 1 2
## Masculino 1 1 2 3
## Neutro 1 2 3 1
prop.table(table(Base_3$Género,
Base_3$`Clase Social`),
margin = 2)
##
## Muy Baja Baja Media Alta
## Femenino 0.5000000 0.4000000 0.1666667 0.3333333
## Masculino 0.2500000 0.2000000 0.3333333 0.5000000
## Neutro 0.2500000 0.4000000 0.5000000 0.1666667
chisq.test(Base_3$Género,
Base_3$`Clase Social`)
## Warning in chisq.test(Base_3$Género, Base_3$`Clase Social`): Chi-squared
## approximation may be incorrect
##
## Pearson's Chi-squared test
##
## data: Base_3$Género and Base_3$`Clase Social`
## X-squared = 2.9, df = 6, p-value = 0.8213
barplot(prop.table(table(Base_3$Género,
Base_3$`Clase Social`),
margin = 2))
Base_3 %>%
mutate(Género = factor(Género,
levels = c(1,2,3),
labels = c("Femenino",
"Masculino",
"Neutro")),
`Clase Social` = factor(`Clase Social`,
levels = c(1,2,3,4),
labels = c("Muy Baja",
"Baja",
"Media","Alta"))) %>%
ggplot(aes(x = `Clase Social`,
fill=Género)) +
scale_fill_manual(values = c("Femenino" = 2,
"Masculino" = 3,
"Neutro" = 4)) +
geom_bar(position = "fill") +
scale_y_continuous(labels = scales::percent) +
theme_bw() +
labs(x = "Clase Social",
y = "Porcentaje",
title = "Distribución de género por clase social") +
theme(plot.title = element_text(hjust = 0.5,
face = "bold", size = 16))
Previo: Carga de librerías
library(readxl) # Para leer archivos de Excel
library(Hmisc) # Para obtener algunas funciones de correlación
Base_4 <- read_excel("C:/Carpeta/Subcarpeta/Archivo_Tabla4.xlsx")
La primera opción para obtener los coeficientes de correlación de
Pearson (o los especificados) se utiliza la función
cor()
cor(Base_4[,2:9]) # Se seleccionan las columnas de variables cuantitativas para calcular la matriz de correlación.
## IDS IPG IM PIBpc ID
## IDS 1.000000000 0.001590034 0.1017738 -0.01062051 -0.19761566
## IPG 0.001590034 1.000000000 0.3030425 -0.32219905 -0.26916668
## IM 0.101773778 0.303042522 1.0000000 -0.41330777 -0.60165384
## PIBpc -0.010620506 -0.322199051 -0.4133078 1.00000000 0.16946048
## ID -0.197615655 -0.269166682 -0.6016538 0.16946048 1.00000000
## TFpc 0.190329754 0.006273896 0.3237949 0.17571896 -0.03710451
## DPpc 0.031286184 -0.218243928 -0.2030766 0.08978427 0.05659398
## Pobreza -0.074774116 0.389580430 0.8506781 -0.50855135 -0.57740127
## TFpc DPpc Pobreza
## IDS 0.190329754 0.03128618 -0.07477412
## IPG 0.006273896 -0.21824393 0.38958043
## IM 0.323794898 -0.20307659 0.85067809
## PIBpc 0.175718958 0.08978427 -0.50855135
## ID -0.037104514 0.05659398 -0.57740127
## TFpc 1.000000000 0.00205794 0.08381783
## DPpc 0.002057940 1.00000000 -0.27300269
## Pobreza 0.083817827 -0.27300269 1.00000000
La segunda alternativa es utilizar la función rcor() de
la librería Hmisc para obtener los coeficientes y los valores
de probabilidad de las correlaciones.
rcorr(as.matrix(Base_4[,2:9])) # se utiliza, de manera previa la función "as.matrix()" para convertir el subconjunto de datos en una matriz, que es el formato requerido por la función "rcorr()". La función "rcorr()" calcula la matriz de correlación y los valores p asociados a cada correlación.
## IDS IPG IM PIBpc ID TFpc DPpc Pobreza
## IDS 1.00 0.00 0.10 -0.01 -0.20 0.19 0.03 -0.07
## IPG 0.00 1.00 0.30 -0.32 -0.27 0.01 -0.22 0.39
## IM 0.10 0.30 1.00 -0.41 -0.60 0.32 -0.20 0.85
## PIBpc -0.01 -0.32 -0.41 1.00 0.17 0.18 0.09 -0.51
## ID -0.20 -0.27 -0.60 0.17 1.00 -0.04 0.06 -0.58
## TFpc 0.19 0.01 0.32 0.18 -0.04 1.00 0.00 0.08
## DPpc 0.03 -0.22 -0.20 0.09 0.06 0.00 1.00 -0.27
## Pobreza -0.07 0.39 0.85 -0.51 -0.58 0.08 -0.27 1.00
##
## n= 32
##
##
## P
## IDS IPG IM PIBpc ID TFpc DPpc Pobreza
## IDS 0.9931 0.5794 0.9540 0.2783 0.2968 0.8650 0.6842
## IPG 0.9931 0.0918 0.0721 0.1363 0.9728 0.2301 0.0275
## IM 0.5794 0.0918 0.0187 0.0003 0.0706 0.2650 0.0000
## PIBpc 0.9540 0.0721 0.0187 0.3538 0.3361 0.6251 0.0030
## ID 0.2783 0.1363 0.0003 0.3538 0.8402 0.7583 0.0005
## TFpc 0.2968 0.9728 0.0706 0.3361 0.8402 0.9911 0.6483
## DPpc 0.8650 0.2301 0.2650 0.6251 0.7583 0.9911 0.1306
## Pobreza 0.6842 0.0275 0.0000 0.0030 0.0005 0.6483 0.1306
plot(Base_4[,2:9])
library(dplyr)
library(ggplot2)
library(car) # Para obtener funciones gráficas
Base_4 %>%
select(-c(`Estados 2018`)) %>%
scatterplotMatrix(pch = 16,
cex = 0.7,
cex.main = 1,
main = "Matriz de dispersión de variables cuantitativas",
diagonal = FALSE)
summary(lm(Base_4$Pobreza~ Base_4$IPG + Base_4$IM + Base_4$PIBpc + Base_4$ID))
##
## Call:
## lm(formula = Base_4$Pobreza ~ Base_4$IPG + Base_4$IM + Base_4$PIBpc +
## Base_4$ID)
##
## Residuals:
## Min 1Q Median 3Q Max
## -14.0980 -4.9909 -0.9581 4.3714 14.5530
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.208e+01 9.149e+00 4.599 8.95e-05 ***
## Base_4$IPG 1.664e+01 1.737e+01 0.959 0.346
## Base_4$IM 1.055e+01 1.949e+00 5.415 1.00e-05 ***
## Base_4$PIBpc -3.006e-05 1.778e-05 -1.691 0.102
## Base_4$ID -2.157e-01 2.260e-01 -0.954 0.348
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 7.97 on 27 degrees of freedom
## Multiple R-squared: 0.7714, Adjusted R-squared: 0.7376
## F-statistic: 22.78 on 4 and 27 DF, p-value: 2.535e-08
___*Debido a la versión de RStudio, la línea de regresión puede no mostrarse en el gráfico.___ Este problema no se presentará en entornos locales anteriores a cierta versión.
plot(Base_4$IM, Base_4$Pobreza)
abline(lm(IM ~ Pobreza,
data = Base_4))
Base_4 %>%
ggplot(aes(x = Pobreza,
y = IM)) +
geom_point(color = 4,
size = 3) +
geom_smooth(method = "lm",
se = FALSE) +
theme_bw() +
labs(y = "Índice de Marginación",
x = "Pobreza",
title = "Relación entre Índice de Marginación y Pobreza") +
theme(plot.title=element_text(hjust = 0.5,
face = "bold",
size = 16))
## `geom_smooth()` using formula = 'y ~ x'
## `geom_smooth()` using formula = 'y ~ x'
par(mfrow = c(2, 2))
plot(lm(Base_4$Pobreza~ Base_4$IPG + Base_4$IM + Base_4$PIBpc + Base_4$ID))
(Fox and Weisberg 2019) (Wickham et al. 2023) (Wickham and Bryan 2025) (Harrell Jr 2026) (Wickham 2016)
Profr. Titular de la Materia↩︎