library(tidyr)
library(dplyr)
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats 1.0.0 ✔ readr 2.1.5
## ✔ ggplot2 3.5.2 ✔ stringr 1.5.1
## ✔ lubridate 1.9.4 ✔ tibble 3.2.1
## ✔ purrr 1.0.4
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ 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
library(ggplot2)
library(fmsb)
library(stringr)
library(tm)
## Cargando paquete requerido: NLP
##
## Adjuntando el paquete: 'NLP'
##
## The following object is masked from 'package:ggplot2':
##
## annotate
library(RColorBrewer)
library(wordcloud)
library(tidytext)
library(scales)
##
## Adjuntando el paquete: 'scales'
##
## The following object is masked from 'package:purrr':
##
## discard
##
## The following object is masked from 'package:readr':
##
## col_factor
library(BSDA)
## Cargando paquete requerido: lattice
##
## Adjuntando el paquete: 'BSDA'
##
## The following object is masked from 'package:datasets':
##
## Orange
MOLEC=read.csv("C://Users//Bianca//OneDrive//Escritorio//MA1001B//MOLEC_reducido.csv")
head(MOLEC)
## year nivel_aprobado condicion_actividad libros_origen internet_motivo
## 1 2020 2 1 2 4
## 2 2020 3 7 0 4
## 3 2020 3 1 0 0
## 4 2020 7 1 2 4
## 5 2020 6 7 2 0
## 6 2020 3 1 0 4
## no_lectura_motivo libros_gasto_num libros_leidos_12m_num
## 1 0 0 1
## 2 0 0 0
## 3 3 0 0
## 4 0 0 2
## 5 0 0 2
## 6 0 0 0
# crear df con el nivel educativo de las personas y su razon para no leer
nivel_no_leer=MOLEC%>%
select(nivel_aprobado,no_lectura_motivo)%>%
filter(nivel_aprobado!=99,nivel_aprobado!="b",no_lectura_motivo!=6
,no_lectura_motivo!="b",no_lectura_motivo!=0)%>% # Omite "No se" y Pase
mutate(nivel_aprobado=case_when( # Generalizando niveles
nivel_aprobado==0 ~ "Ninguno",
nivel_aprobado %in% c(1,2,3) ~ "Básica",
nivel_aprobado==4 ~ "Media Superior",
nivel_aprobado %in% c(5,6,7) ~ "Superior",
nivel_aprobado %in% c(8,9) ~ "Posgrado"))%>%
mutate(no_lectura_motivo=case_when( # Nombrando motivos
no_lectura_motivo==1 ~ "Falta de interés,motivación o gusto",
no_lectura_motivo==2 ~ "Prefiere realizar otras actividades",
no_lectura_motivo==3 ~ "Falta de tiempo",
no_lectura_motivo==4 ~ "Falta de dinero",
no_lectura_motivo==5 ~ "Problemas de salud"))
head(nivel_no_leer)
## nivel_aprobado no_lectura_motivo
## 1 Básica Falta de tiempo
## 2 Básica Falta de tiempo
## 3 Básica Falta de tiempo
## 4 Básica Falta de tiempo
## 5 Básica Falta de tiempo
## 6 Básica Prefiere realizar otras actividades
# generar tabla de freciencias
tabla=table(nivel_no_leer$no_lectura_motivo,nivel_no_leer$nivel_aprobado)
# grafico de barras extendido
barplot(tabla,beside = TRUE,legend=TRUE,col=rainbow(ncol(tabla)),xlab="Nivel de estudios",ylab="Frecuencia",main = "Razones para la no lectura por nivel de estudios")
nivel de significancia del 0.04
# confianza
alpha=0.04
conf=1-alpha
# generar df con información de libros leidos en 12 meses por la condición de activdad de la persona (Trabaja o no trabaja)
libros_por_condicion_act=MOLEC%>%
select(condicion_actividad,libros_leidos_12m_num)%>%
filter(condicion_actividad!=6,condicion_actividad!=99)%>% #omite estudiante y pase
mutate(condicion_actividad=case_when(
condicion_actividad %in% c(1,2) ~ "Trabaja",
condicion_actividad %in% c(3,4,5,7,8,9,10) ~ "No trabaja")) # generaliza trabajo
head(libros_por_condicion_act)
## condicion_actividad libros_leidos_12m_num
## 1 Trabaja 1
## 2 No trabaja 0
## 3 Trabaja 0
## 4 Trabaja 2
## 5 No trabaja 2
## 6 Trabaja 0
# realizar prueba F con var.test()
var.test(libros_por_condicion_act$libros_leidos_12m_num ~ libros_por_condicion_act$condicion_actividad,conf.level=conf)
##
## F test to compare two variances
##
## data: libros_por_condicion_act$libros_leidos_12m_num by libros_por_condicion_act$condicion_actividad
## F = 0.74386, num df = 2084, denom df = 3722, p-value = 5.217e-14
## alternative hypothesis: true ratio of variances is not equal to 1
## 96 percent confidence interval:
## 0.6873253 0.8057480
## sample estimates:
## ratio of variances
## 0.743859
cat("\nSe confirma que las varianzas de los grupos NO TRABAJA y TRABAJA son diferentes ya que no se incluye el 1 en el intervalo; varianzas diferentes también porque p es muy bajo")
##
## Se confirma que las varianzas de los grupos NO TRABAJA y TRABAJA son diferentes ya que no se incluye el 1 en el intervalo; varianzas diferentes también porque p es muy bajo
# Ya que el 1 no se encuentra dentro del intervalo lo más probable es que las varianzas no sean iguales; hacer test de Welch (t inversa) para hallar si existe una diferencia entre las medias
t.test(libros_por_condicion_act$libros_leidos_12m_num ~ libros_por_condicion_act$condicion_actividad,conf.level=conf,var.equal=FALSE)
##
## Welch Two Sample t-test
##
## data: libros_por_condicion_act$libros_leidos_12m_num by libros_por_condicion_act$condicion_actividad
## t = -3.5297, df = 4860.6, p-value = 0.0004198
## alternative hypothesis: true difference in means between group No trabaja and group Trabaja is not equal to 0
## 96 percent confidence interval:
## -0.5796419 -0.1531554
## sample estimates:
## mean in group No trabaja mean in group Trabaja
## 1.143405 1.509804
cat("\nYa que p<alpha se evidencia la estadistica de diferencia de medias.\nEl intervalo de confianza de medias no incluye el 0 es decir hay diferencia significativa entre ambos grupos")
##
## Ya que p<alpha se evidencia la estadistica de diferencia de medias.
## El intervalo de confianza de medias no incluye el 0 es decir hay diferencia significativa entre ambos grupos
cat("\n\n Existe evidencia suficiente de para rechazar H0; trabajar si se asocia a leer más libros al año segun datos del MOLEC")
##
##
## Existe evidencia suficiente de para rechazar H0; trabajar si se asocia a leer más libros al año segun datos del MOLEC
alpha <- 0.04
df <- 4860.6 # grados de libertad
t_crit <- qt(1 - alpha/2, df) # Valor crítico bilateral de t
x <- seq(-5, 5, length=200)
y <- dt(x, df)
plot(x, y, type="l", lwd=2, xlab="t", ylab="Densidad", main="Diferencia de medias: \nPoblación que lee y trabaja VS lee y no trabaja")
polygon(c(x[x > t_crit], t_crit, max(x)), c(y[x > t_crit], 0, 0), col=rgb(1, 0, 0, 0.3)) # cola derecha
polygon(c(x[x < -t_crit], -t_crit, min(x)), c(y[x < -t_crit], 0, 0), col=rgb(1, 0, 0, 0.3)) # cola izquierda
abline(v=t_crit, col="red", lwd=2, lty=2)
abline(v=-t_crit, col="red", lwd=2, lty=2)
t_stat <- -3.5297 # tu estadístico t
abline(v=t_stat, col="blue", lwd=2)
legend("topright", legend=c("Zona de rechazo H0","Estadístico t"), col=c("red","blue"), lty=2:1, lwd=2)
#Usar prueba Z para diferencia de proporciones; muestra grande y grupos categoricos diferentes
# df de personas con estudios basicos o sin estudios
basicos_estudios=nivel_no_leer%>%
filter(nivel_aprobado!="Media Superior", nivel_aprobado!="Posgrado",
nivel_aprobado!="Superior")
# df de personas con posgrado o estudios superiores
superiores_estudios=nivel_no_leer%>%
filter(nivel_aprobado!="Media Superior", nivel_aprobado!="Ninguno",
nivel_aprobado!="Básica")
# n2: total de personas con estudios superiores o de posgrado; x2: total de personas con estudios superiores o de posgrado Y que no leer por falta de tiempo
n2=nrow(superiores_estudios)
x2=sum(superiores_estudios$no_lectura_motivo =="Falta de tiempo",na.rm = TRUE)
# n1: total de personas sin estudios o con estudios basicos; x1: total de personas sine studios o con estudios basicos Y que no leen por falta de tiempo
n1=nrow(basicos_estudios)
x1=sum(basicos_estudios$no_lectura_motivo =="Falta de tiempo",na.rm = TRUE)
# Calcular proporciones (digase que el grupo 2 son las personas con estudios superiores/posgrado y que el grupo 1 son las personas sin estudios o con estudios basicos)
p2=x2/n2 # proporción de personas del grupo 2 Y que no leen por falta de tiempo
p1=x1/n1 # proproción de personas del grupo 1 Y que no leen por falta de tiempo
p=(x1+x2)/(n1+n2) # proporción combinada
# calculo de estadistico z
Z=(p1-p2)/sqrt(p*(1-p)*(1/n1+1/n2))
# calcular P bilateral
p=2*pnorm(-abs(Z))
# calcular z critico
z_critico=abs(qnorm(alpha/2))
cat("\nestadistico z:",abs(Z),"\nValor p:",p,"\nZ critico:",z_critico)
##
## estadistico z: 2.338132
## Valor p: 0.0193804
## Z critico: 2.053749
cat("\nH0 es que las proporciones son iguales,\nHa es que las proporciones son diferentes.\n\n Según el analisis hay suficiente evidencia para rechazar H0 ya que p<alpha y además |z| es mayor que el valor critico de z ")
##
## H0 es que las proporciones son iguales,
## Ha es que las proporciones son diferentes.
##
## Según el analisis hay suficiente evidencia para rechazar H0 ya que p<alpha y además |z| es mayor que el valor critico de z
# Valores típicos
alpha <- 0.04
z_crit <- qnorm(1 - alpha/2) # Prueba bilateral
z_stat <- 2.3 # z calculado
# Secuencia para la curva
x <- seq(-4, 4, length=100)
y <- dnorm(x)
plot(x, y, type="l", lwd=2, xlab="z", ylab="Densidad", main="Diferencia de Proporciones: No lectura por falta de tiempo \n Personas sin o con estudios basicos VS posgrado/superior")
abline(v=z_crit, col="red", lwd=2, lty=2) # Valor crítico derecha
abline(v=-z_crit, col="red", lwd=2, lty=2) # Valor crítico izquierda
abline(v=z_stat, col="blue", lwd=2) # Estadístico prueba
polygon(c(x[x>z_crit], z_crit, max(x)), c(y[x>z_crit], 0, 0), col=rgb(1,0,0,0.2)) # Sombra cola derecha
polygon(c(x[x<(-z_crit)], -z_crit, min(x)), c(y[x<(-z_crit)], 0, 0), col=rgb(1,0,0,0.2)) # Sombra cola izquierda
legend("topright", legend=c("Valor crítico","Estadístico z"), col=c("red","blue"), lty=2:1, lwd=2)