Resuelve los siguientes ejercicios prácticos utilizando R. Los ejercicios propuestos tienen distintas ponderaciones, y la calificación final de dicha actividad será dada a conocer en el espacio correspondiente de la plataforma Moodle. La ponderación se muestra al inicio o al final del respectivo enunciado del ejercicio.
El link de Rpubs https://rpubs.com/ o shinnyapp.io https://www.shinyapps.io/ correspondiente al reporte debe ser ser compartido en el respectivo espacio del curso dentro de la plataforma Moodle (https://conocer.cide.edu/). Favor de verificar que se haya compilado correctamente y que se pueda visualizar de manera pública. La fecha límite de envío es el 08-octubre-2021 a las 23:55 hrs, tiempo del centro de México. Al momento de compilar el archivo Markdown, se deben de mostrar las instrucciones, las salidas y una breve explicación del resultado.
La base de datos descargada tiene descripción en los primeros renglones y notas al pie de la base, por lo que al importar la base de datos nos saltamos los primeros 4 renglones y le dimos un límite máximo de lectura de renglones para que se importara de manera correcta el archivo como se muestra a continuación:
Utilizando la información correspondiente a los sismos registrados por el Sistema Sismológico Nacional (SSN) en el periodo 01-01-1980 al 24-09-2021, disponible en
http://www2.ssn.unam.mx:8080/catalogo/
calcular:
Solución
En esta tabla se resume la cantidad de sismos que hubo en el periodo analizado por cada mes del año. Ocupamos la librería lubridate para poder extraer el mes de la variable fecha y tabulamos los resultados. Posteriormente, presentamos una tabla dinámica que permite filtrar, ya sea por mes o por cantidad de sismos. Lo que añade un valor adicional porque podemos observar que en el mes que hubo más sismos fue en el mes 9 que corresponde a Septiembre.
library(lubridate)
a<-as.data.frame(table(month(sismos$Fecha)))
colnames(a)<-c("Mes","Sismos")
datatable(a ,class = 'cell-border stripe', )Solución
En este ejercicio extraje el Esatdo y el municipio de la variable referencia de localización, lo que al realizar un análisis de cuántos Estados únicos había en la base noté que había uno demás, por lo que procedí a identificar el error de origen y realicé una limpieza e imputación de los Nombres de los Estados tomando como referencia al INEGI.
Una vez realizada la limpieza procedí a crear una tabla dinámica para ver los resultados de cuántos sismos ha habido por Estado.
sis2<-as.data.frame(str_split_fixed(sismos$Referencia.de.localizacion, "de ", n = 2))
sis2<-sis2[-1]
sis2<-as.data.frame(str_split_fixed(sis2$V2, ",", 2))
colnames(sis2)<-c("Municipio","Estado")
sis2[2]<- as.data.frame(gsub("(^ +| +$)", "",sis2[[2]]))
unique(sis2$Estado)## [1] "MICH" "CHIS" "OAX" "GRO" "TAB" "MEX" "COL" "NAY" "BC" "PUE"
## [11] "MOR" "QR" "BCS" "VER" "CDMX" "JAL" "SIN" "SON" "CAMP" "HGO"
## [21] "SLP" "TLAX" "GTO" "COAH" "TAMS" "NL" "QRO" "CHIH" "ZAC" "YUC"
## [31] "DGO" "AGS" "N"
## [1] "MICH" "CHIS" "OAX" "GRO" "TAB" "MEX" "COL" "NAY" "BC" "PUE"
## [11] "MOR" "QR" "BCS" "VER" "CDMX" "JAL" "SIN" "SON" "CAMP" "HGO"
## [21] "SLP" "TLAX" "GTO" "COAH" "TAMS" "NL" "QRO" "CHIH" "ZAC" "YUC"
## [31] "DGO" "AGS"
nom_est<-c("Aguascalientes","Baja California","Baja California Sur","Campeche","Ciudad de México","Chihuahua","Chiapas","Coahuila de Zaragoza","Colima","Durango","Guerrero","Guanajuato","Hidalgo","Jalisco","México","Michoacán de Ocampo","Morelos","Nayarit","Nuevo León","Oaxaca","Puebla","Quintana Roo","Querétaro","Sinaloa","San Luis Potosí","Sonora","Tabasco","Tamaulipas","Tlaxcala","Veracruz de Ignacio de la Llave","Yucatán","Zacatecas")
est<-c("MICH","CHIS","OAX" ,"GRO","TAB","MEX","COL","NAY","BC" ,"PUE","MOR","QR","BCS","VER","CDMX","JAL","SIN","SON","CAMP","HGO",
"SLP","TLAX","GTO","COAH","TAMS","NL","QRO","CHIH","ZAC","YUC","DGO","AGS")
est<-sort(est)
catalogo<-as.data.frame(cbind(est,nom_est))
as.data.frame(catalogo)## est nom_est
## 1 AGS Aguascalientes
## 2 BC Baja California
## 3 BCS Baja California Sur
## 4 CAMP Campeche
## 5 CDMX Ciudad de México
## 6 CHIH Chihuahua
## 7 CHIS Chiapas
## 8 COAH Coahuila de Zaragoza
## 9 COL Colima
## 10 DGO Durango
## 11 GRO Guerrero
## 12 GTO Guanajuato
## 13 HGO Hidalgo
## 14 JAL Jalisco
## 15 MEX México
## 16 MICH Michoacán de Ocampo
## 17 MOR Morelos
## 18 NAY Nayarit
## 19 NL Nuevo León
## 20 OAX Oaxaca
## 21 PUE Puebla
## 22 QR Quintana Roo
## 23 QRO Querétaro
## 24 SIN Sinaloa
## 25 SLP San Luis Potosí
## 26 SON Sonora
## 27 TAB Tabasco
## 28 TAMS Tamaulipas
## 29 TLAX Tlaxcala
## 30 VER Veracruz de Ignacio de la Llave
## 31 YUC Yucatán
## 32 ZAC Zacatecas
colnames(catalogo)<-c("Estado","Nombre_Estado")
sis3<-left_join(x= sis2,y= catalogo )
sismos2<-cbind(sismos,sis3)
c<-as.data.frame(table(sismos2$Nombre_Estado))
datatable(c, class = 'cell-border stripe') Solución
Para este ejercicio identifiqué la cantidad de sismos que ha ocurrido en determinada hora, posteriormente, utilicé esa información como insumo para la gráfica de circulo que se muestra a continuación.
En la gráfica se observa que los sismos ocurren con mayor frecuencia entre las 11 de la noche y las 5 de la mañana. Además, destaco que he utilizado otros argumentos para que sea más presentable.
library(ggplot2)
hora<-as.data.frame(str_split_fixed(sismos2$Hora,":",n=3))
hora$hm<- paste(hora$V1,hora$V2,sep = ":")
tmp1<-as.data.frame(hora[c(1,4)])
sismos4<-cbind(sismos2,tmp1)
sismos4$hm<- hm(sismos4$hm)
sismos4$h<-hour(sismos4$hm)
g<-as.data.frame(table(sismos4$h))
g$Freq<- as.numeric(g$Freq)
colnames(g)<-c("Hora","Sismos")
t<- ggplot(g,aes(x=Hora, y= Sismos,fill= Hora))
t+ geom_bar(stat = "identity") +
geom_text(aes(label = Sismos, x = Hora,y = Sismos),
position = position_stack(vjust= 1.15)) +
coord_polar(theta = "x") +
theme_minimal()+
ggtitle("Sismos por Hora") +
labs(caption="Fuente: Elaboración propia con información del Sistema Sismológico Nacional") \[Fuente:\ Elaboración\ propia\ con\ información\ del\ Sistema\ Sismológico\ Nacional.\]
Solución
Lo primero que hice fue identificar si existían Na o registros erroneos, de ahí observé que el único problema era los registros no calculables, por lo que convertí la variable Magnitud en numérica y en automático R cambió “no calculable” por NA, esto lo comprobé con el conteo de los registros.
Después, filtré la base para solo tener los sismos de magnitud mayor o igual a cinco y con esos resultados generé la tabla dinámica, en la que se observa que chiapas es el Estado que ha tenido la mayor cantidad de sismos con magnitud igual o superior a 5.
##
## FALSE TRUE
## 212938 13826
##
## FALSE TRUE
## 212938 13826
## [1] "numeric"
Solución
Para este ejercicio, filtré la base para solo tener los registros del Estado de Chiapas. El histograma se hace de manera sencilla con la función hist(), sin embargo, destaco que he utilizado otros argumentos para que sea más presentable.
Chiapas<- subset(sismos2, sismos2$Nombre_Estado=="Chiapas")
hist(Chiapas$Magnitud, main = "Histograma de Magnitud Chiapas",ylab = "Sismos",xlab="Magnitud", col="Red")+theme_minimal()## NULL
El método más común para la determinación de la aproximación estadísticamente óptima con un conjunto de parámetros dado un grupo de datos, es el método conocido como Mínimos Cuadrados (por sus siglas en inglés, LS), y fue propuesto hace aproximadamente dos siglos por Carl Friedrich Gauss. Así, en el caso más simple de la regresión lineal (y = b0 + b1X), se busca minimizar la suma de cuadrados en el vector de residuales e. Esta función objetivo de mínimos cuadrados puede ser escrita en su forma compacta de la siguiente manera:
\[ \begin{equation}\label{eq1} \begin{split} f(b)& = e^Te\\ & =(y − Xb)^T(y-Xb).................(1)\\ & = y^Ty − 2y^TXb + bX^TXb \end{split} \end{equation} \]
Calculando las derivadas parciales respecto a los parámetros b, e igualando dicha derivada a 0, se obtiene el vector de estimaciones puntuales de los parámetros β(ó b): \[b = (X^TX)^{−1}X^Ty.................. (2)\]
Utilizando los datos disponibles en Moodle llamados corazon, obtener el vector de estimaciones puntuales para los parámetros b cuando X = matriz de variables biking y smoking (498 x 2) y, y = heart.disease (498 x 1).
**_Solución_1**
Para este problema, considero que pueden existir dos soluciones, la primera es mediante la estimación de los parámetros agregando el intercepto a la regresión y la segunda es sin considerar el intercepto. En ese sentido, acontinuación presnto los resultados de la estimación con intercepto.
corazon<- read.csv("C:/Users/Gerardo Ramos/OneDrive - Comisión Federal de Competencia Económica/Documents/CIDE METPOL/Manejo de bases de datos R/examen 1/corazon.csv")
colnames(corazon)## [1] "biking" "smoking" "heart.disease"
##
## Call:
## lm(formula = heart.disease ~ biking + smoking, data = corazon)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.1789 -0.4463 0.0362 0.4422 1.9331
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 14.984658 0.080137 186.99 <2e-16 ***
## biking -0.200133 0.001366 -146.53 <2e-16 ***
## smoking 0.178334 0.003539 50.39 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.654 on 495 degrees of freedom
## Multiple R-squared: 0.9796, Adjusted R-squared: 0.9795
## F-statistic: 1.19e+04 on 2 and 495 DF, p-value: < 2.2e-16
##
## Call:
## lm(formula = heart.disease ~ 0 + biking + smoking, data = corazon)
##
## Residuals:
## Min 1Q Median 3Q Max
## -9.589 -1.940 2.238 5.698 15.488
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## biking -0.038274 0.008933 -4.284 2.2e-05 ***
## smoking 0.623037 0.022163 28.112 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 5.53 on 496 degrees of freedom
## Multiple R-squared: 0.7551, Adjusted R-squared: 0.7541
## F-statistic: 764.8 on 2 and 496 DF, p-value: < 2.2e-16
Solución 2
A continuación, se presentan los resultados sin considerar el intercepto, para esto, basta con poner en la función lm() el elemento ~ “0 +”.
##
## Call:
## lm(formula = heart.disease ~ 0 + biking + smoking, data = corazon)
##
## Residuals:
## Min 1Q Median 3Q Max
## -9.589 -1.940 2.238 5.698 15.488
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## biking -0.038274 0.008933 -4.284 2.2e-05 ***
## smoking 0.623037 0.022163 28.112 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 5.53 on 496 degrees of freedom
## Multiple R-squared: 0.7551, Adjusted R-squared: 0.7541
## F-statistic: 764.8 on 2 and 496 DF, p-value: < 2.2e-16
Mejoramiento del formato del reporte Markdown mediante algunas de las siguiente opciones: agregar índice, utilizar archivos .css o la paquetería pander. (15%)
Comentario
Entre las mejoras, destaco que incluí un archivo Externo CSS para modificar el formato, agregué un índice interactivo con diferentes secciones, edité el formato del tema, el tipo de letra de los chunks, incluí imagen, utilicé la extensión de LateX para tener una mejor presentación, ocupé la librería DT para mejorar las tablas, la librería ggplot para mejorar las gráficas e hice una limpieza de la base de datos para poder presentar de mejor manera los resultados.