Utilizando la información correspondiente a los resultados del Censo de Población y Vivienda 2020 del INEGI para el estado de Jalisco, obtener los incisos siguientes.
Primero tengo que trasladar el archivo de excel a R para poder trabajar con esa base de datos.
Conozco tres formas para hacerlo:
Usar la opcion de “importar base de datos de Excel” desde la pestaña de Archivo. Buscar la base de datos en mis archivos y usar los parámetros para decidir como importarla (si deseo que conserve los encabezados, si deseo que me abra una Hoja del Excel en específico, etc.).
Usar la función read_excel de la paquetería “readxl”. Busco la dirección de mi archivo y corro el comando.
Usar la función de read_excel pero desde el comando que me da el propio R cuando quiero importar el archivo desde la pestaña de Archivo. Esta última opción es la que decidí ejecutar.
library(readxl)
Jalisco <- read_excel("Jalisco.xlsx")
#Decidí usar la paquetería de "DT" para darle una mejor presentación a la base de datos de Jalisco.
library(DT)
datatable(Jalisco)
Dado que me están pidiendo una proporción tengo que obtener primero el total de la población dentro de la cual voy a tener el subconjunto.
En este caso, usé la columna de “POBTOT” para obtener la cantidad total de población que hay y la columna de “PCON_DISC” que es la cantidad total de población con alguna discapacidad.
Me aseguré de que dividir la información de acuerdo al municipio.
Después elaboré una nueva tabla, con las variables: municipio, población total y población con discapacidad.
Dividí la columna que tiene los valores de la población con discapacidad entre la columna que tiene los valores de la población total.
El resultado lo multipliqué por 100 y con eso obtuve la proporción de personas que tienen discapacidad en cada municipio.
Para obtener los 10 valores más altos decidí usar la paquetería “dplyr” y la función “top_n”. Depués usé la función arrange para ordenarlos de mayor a menor valor.
TablaDisc<-aggregate(cbind(as.numeric(POBTOT),as.numeric(PCON_DISC))~NOM_MUN,data=Jalisco, FUN=sum)
PropDisc<-(TablaDisc$V2/TablaDisc$V1)*100
PROPDISC<-data.frame(TablaDisc, PropDisc=PropDisc)
library(dplyr)##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
TOPDISC<-top_n(PROPDISC, 10, PropDisc)%>% arrange(desc(PropDisc))
library(DT)
colnames(TOPDISC)<-c("Municipio", "Población Total", "Población con Discapacidad", "Proporción")
datatable(TOPDISC)
Es la misma idea que en la pregunta pasada. Cambié la variable de “PCON_DISC” por la de “POB65_MAS”.
Para obtener los 30 valores más altos volví a usar la paquetería “dplyr” y la función “top_n” para obtenerlos. Y, por último, la función arrange para ordenarlos de mayor a menor valor.
TablaAdMay<-aggregate(cbind(as.numeric(POBTOT),as.numeric(POB65_MAS))~NOM_MUN,data=Jalisco, FUN=sum)
PropAdMay<-(TablaAdMay$V2/TablaAdMay$V1)*100
PROPADMAY<-data.frame(TablaAdMay, PropAdMay=PropAdMay)
library(dplyr)
TOPADMAY<-top_n(PROPADMAY, 30, PropAdMay)%>%arrange(desc(PropAdMay))
library(DT)
colnames(TOPADMAY)<-c("Municipio", "Población Total", "Población con 65 años o más", "Proporción")
datatable(TOPADMAY)
En este inciso me están pidiendo la población total y no una proporción. Por eso, en este caso solo usé la columna de “PEA”, que me da los números de la población económicamente activa, la catalogué de acuerdo al municipio y sumé sus valores. Usé “top_n” de la paquetería “dyplr” para escoger los 30 valores más altos y luego “arrange” para ordenarlos de manera descendiente.
PobEcAc<-aggregate(PEA~NOM_MUN,data=Jalisco,sum)
library(dplyr)
TOPPobEcAc<-top_n(PobEcAc, 30, PEA)%>% arrange(desc(PEA))
library(DT)
colnames(TOPPobEcAc)<-c("Municipio", "Población Económicamente Activa")
datatable(TOPPobEcAc)
Para este inciso tomé en cuenta que la educación básica en México comprende: preescolar, primaria y secundaria. Programas de estudios que se considera se estudian de los 3 a los 15 años.
Dados esos datos, decidí tomar la columna de “P15YM_SE” que me da los valores de personas de 15 años y más sin escolaridad. Para obtener la proporción tomé también la columna de “POBTOT”. Cree una nueva tabla con esas dos variables que estaban a su vez categorizadas por el municipio.
Ya con la nueva tabla, dividí la columna de “P15YM_SE” entre la de “POBTOT”, el resultado lo multipliqué por 100 y con eso obtuve la proporción. Utilicé la paquetería “dyplr” para usar la función “top_n” junto con “arrange”, y con eso obtener los 10 municipios con mayor proporción de población sin educación básica en orden descendiente.
TablaSinEd<-aggregate(cbind(as.numeric(POBTOT),as.numeric(P15YM_SE))~NOM_MUN,data=Jalisco, FUN=sum)
PropSinEd<-(TablaSinEd$V2/TablaSinEd$V1)*100
PROPSINED<-data.frame(TablaSinEd, PropSinEd=PropSinEd)
library(dplyr)
TOPSINED<-top_n(PROPSINED, 10, PropSinEd)%>% arrange(desc(PropSinEd))
library(DT)
colnames(TOPSINED)<-c("Municipio", "Población Total", "Población de 15 años y más sin educación", "Proporción")
datatable(TOPSINED)
En este inciso me están pidiendo la población total indígena y no una proporción. En este caso solo uso la columna de “PHOG_IND”, que me da los números del “total de personas que forman hogares censales donde la persona de referencia del hogar o su cónyuge hablan alguna lengua indígena”.
Si bien, podría no ser la mejor variable para contabilizar a la población indígena (porque podrían identificarse como indígenas aunque no hablasen la lengua) es la más usada en los censos para establecer la cantidad de población indígena en varios países, incluído México.
Así que esa variable la catalogué de acuerdo al municipio y sumé sus valores. Usé “top_n” de la paquetería “dyplr” para escoger los 10 valores más altos y luego “arrange” para ordenarlos de manera descendiente.
Con esta variable me encontré con un problema de NA’s en la columna (supongo que porque hubo municipios sin personas que hablasen, o sus cónyuges, una lengua indígena). Para resolver ese problema cree una función que me cambiase los “NAs” por “0”. Después, por medio de la función “apply” usé mi función para cambiar los valores.
PobInd<-aggregate(as.numeric(PHOG_IND)~NOM_MUN, data=Jalisco, sum)## Warning in eval(predvars, data, env): NAs introduced by coercion
PobIndDF<-data.frame(PobInd)
cambio <-function(x)
{
if(is.na(x)==T)
{
x<-0
}
else
{
x<-x
}
}
cambio## function(x)
## {
## if(is.na(x)==T)
## {
## x<-0
## }
## else
## {
## x<-x
## }
## }
IndSinNA<-apply(PobIndDF,c(1,2),cambio)
PobIndDFSinNA<-data.frame(IndSinNA)
library(dplyr)
TOPInd<-top_n(PobIndDFSinNA, 10, as.numeric.PHOG_IND.)%>% arrange(desc(as.numeric.PHOG_IND.))
library(DT)
colnames(TOPInd)<-c("Municipio", "Población Indígena")
datatable(TOPInd)
Aquí la proporción que me piden no es relación a la población total sino con la variable de viviendas particulares habitadas.
Para obtener la respuesta utilicé las columnas de “TVIVPARHAB”, que me da los datos del total de “viviendas particulares habitadas de cualquier clase: casa única en el terreno, departamento en edificio, vivienda o cuarto en vecindad, vivienda o cuarto de azotea, local no construido para habitación, vivienda móvil, refugios o clase no especificada. Excluye a las viviendas particulares sin información de ocupantes.”, y la de “VPH_INTER”, que me da los datos de “viviendas particulares habitadas que tienen servicio de Internet. Comprende las viviendas particulares para las que se captaron las características de la vivienda, clasificadas como: casa única en el terreno, departamento en edificio, vivienda o cuarto en vecindad y vivienda o cuarto en azotea y a las que no especificaron clase de vivienda”.
Ambas las catalogué tomando en cuenta el municipio al que pertenecen. De mi nueva tabla dividí los valores de “viviendas con internet” entre el total de “viviendas particulares”, el resultado lo multipliqué por 100 y eso me dio la proporción. Por último obtuve los 10 valores máximos y los ordené de mayor a menor valor.
TablaConInt<-aggregate(cbind(as.numeric(TVIVPARHAB),as.numeric(VPH_INTER))~NOM_MUN,data=Jalisco, FUN=sum)
PropConInt<-(TablaConInt$V2/TablaConInt$V1)*100
PROPCONINT<-data.frame(TablaConInt,PropConInt=PropConInt)
library(dplyr)
TOPCONINT<-top_n(PROPCONINT,10,PropConInt)%>%arrange(desc(PropConInt))
library(DT)
colnames(TOPCONINT)<-c("Municipio", "Total de viviendas particulares habitadas", "Viviendas particulares habitadas que disponen de Internet", "Proporción")
datatable(TOPCONINT)Demostrar que la siguiente cadena de texto es un palíndromo: A mamá Roma le aviva el amor a papá y a papá Roma le aviva el amor a mamá. (20%)
Primero, definí qué es un palíndromo. De acuerdo a la RAE: es “una palabra o frase que se lee igual de izquierda a derecha que de derecha a izquierda”. Su símil con números se llama “número capicúa”.
Tomando eso en cuenta, decidí asignarle a cada letra del texto un número para después crear un vector (Palin1). Después, usé la función “rev” para revertir el orden de mi vector con los valores numéricos que asemejan el texto (PalinRev). Finalmente, corrí una prueba.
Dado que Palin1 es igual a PalinRev, se corroboró que la frase es un palíndromo.
Hice unos ejemplos más abajo para comprobar que mi prueba era válida.
a<-1
m<-2
r<-3
o<-4
l<-5
e<-6
v<-7
i<-8
p<-9
y<-10
Palin1<-c(1,2,1,2,1,3,4,2,1,5,6,1,7,8,7,1,6,5,1,2,4,3,1,9,1,9,1,10,1,9,1,9,1,3,4,2,1,5,6,1,7,8,7,1,6,5,1,2,4,3,1,2,1,2,1)
as.vector(Palin1)## [1] 1 2 1 2 1 3 4 2 1 5 6 1 7 8 7 1 6 5 1 2 4 3 1 9 1
## [26] 9 1 10 1 9 1 9 1 3 4 2 1 5 6 1 7 8 7 1 6 5 1 2 4 3
## [51] 1 2 1 2 1
PalinRev<-rev(Palin1)
PalinRev## [1] 1 2 1 2 1 3 4 2 1 5 6 1 7 8 7 1 6 5 1 2 4 3 1 9 1
## [26] 9 1 10 1 9 1 9 1 3 4 2 1 5 6 1 7 8 7 1 6 5 1 2 4 3
## [51] 1 2 1 2 1
Palin1==PalinRev## [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [16] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [31] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [46] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
Prueba<-c(9,8,7,6,5,4,3,2,1)
as.vector(Prueba)## [1] 9 8 7 6 5 4 3 2 1
Prueba2<-rev(Prueba)
Prueba2## [1] 1 2 3 4 5 6 7 8 9
Prueba==Prueba2## [1] FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
Probar si la matriz (X) es definida positiva y, si sí, obtener su inversa. Y una vez obtenida su inversa, comprobar que X*X−1 = I. (20%)
Una matriz es definida positiva si H1 es mayor a 0 y H2 es mayor a 0.
Primero, creo la matriz “X”.
Ahora, puedo crear una función con condiciones para ver si cumple las condiciones pasadas.
Dado que no es definida positiva ya no sigo con el ejercicio. Sin embargo si lo hubiese sido hubiese usado la función de “solve” para sacar la inversa. Y, después las hubiese multiplicado y me hubiese dado la matriz identidad.
x<-c(3,4,-1,2,-1,3,2,2,1)
x## [1] 3 4 -1 2 -1 3 2 2 1
X<-matrix(x,ncol=3,byrow=TRUE)
X## [,1] [,2] [,3]
## [1,] 3 4 -1
## [2,] 2 -1 3
## [3,] 2 2 1
Cond1<-X[1,1]>0
Cond1## [1] TRUE
Cond2<-det(X)>0
Cond2## [1] FALSE
{
if(Cond1==TRUE & Cond2==TRUE)
{
print(paste0("La matriz es definida positiva"))
}
else
{
print(paste0("La matriz no es definida positiva"))
}
}## [1] "La matriz no es definida positiva"