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, se calcula:
El total de sísmo detectados por mes.
#Cargi base
base <- read.csv("/Users/cristinaalvarez/Desktop/SSNMX_catalogo_19800101_20210924.csv")
#convierto a fecha y extraigo mes
fecha <- strptime(base$Fecha, format="%d/%m/%y")
base$mes <- month(fecha)
mensual <- as.data.frame(table(base$mes))
#cambio número de mes por abreviatura del nombre selecciono variables y ordeno tabla
mensual$mes[c(1,2,3,4,5,6,7,8,9,10,11,12)] <- c("ene","feb", "mar", "abr", "may", "jun", "jul", "ago", "sep", "oct", "nov", "dic")
mensual <- subset(mensual[, c(2,3)])
col_order <- c("mes", "Freq")
mensual <- mensual[, col_order]
mensual<-as.data.frame(mensual)
#compilo tabla y estiliso
mensual<-knitr::kable(mensual, row.names = F, full_width = FALSE, align = "rc", col.names = c("Mes", "Frecuencia de sismos"))
kable_classic(mensual, "hover", full_width = FALSE, position = "center", font_size = 14, column_spec(mensual, 2, width="10em"))
| Mes | Frecuencia de sismos |
|---|---|
| ene | 21195 |
| feb | 20644 |
| mar | 19155 |
| abr | 17959 |
| may | 17807 |
| jun | 18129 |
| jul | 17633 |
| ago | 17827 |
| sep | 21497 |
| oct | 18254 |
| nov | 18094 |
| dic | 18570 |
Note que puede hacer click o posicionarse sobre una fila de la tabla para resaltar un valor específico.
La tabla de frecuencia de sismos por mes muestra que el mes con mayor cantidad de sismos es septiempre, seguido por enero y febrero. No obstante, en este análisis no se percibe la magnitud de estos.
El total de sismos detectados por cada estado de la república.
#se agrega una columna de 1 calcular frecuencia sobre esta.
base$c <- 1
# se separa la información de la varaible localización para quedarnos con el estado
estado <- (map(strsplit(base$Referencia.de.localizacion,","), 2))
#Homologo nombre d elos estados
#quito espacios
estado <-str_replace_all(estado, fixed(" "), "")
base$estado<- as.character(estado)
#Los que sólo tienen N los catalogo como Null
base["estado"][base["estado"] == "N"] <- "NULL"
estado_freq <- as.data.frame(aggregate(c~estado, FUN = sum, data=base))
#Compilo tabla
estado_freq<-as.data.frame(estado_freq)
estado_freq<-knitr::kable(estado_freq, row.names = F, full_width = FALSE, align = "cc", col.names = c("Estado", "Frecuencia de sismos"))
kable_classic(estado_freq,"hover", full_width = FALSE, position = "center", font_size = 12, column_spec(estado_freq, 2, width="10em"))
| Estado | Frecuencia de sismos |
|---|---|
| AGS | 42 |
| BC | 8170 |
| BCS | 2846 |
| CAMP | 62 |
| CDMX | 285 |
| CHIH | 400 |
| CHIS | 42913 |
| COAH | 109 |
| COL | 5288 |
| DGO | 61 |
| GRO | 39249 |
| GTO | 82 |
| HGO | 548 |
| JAL | 6832 |
| MEX | 583 |
| MICH | 13979 |
| MOR | 233 |
| NAY | 263 |
| NL | 420 |
| NULL | 3 |
| OAX | 94592 |
| PUE | 1130 |
| QR | 86 |
| QRO | 15 |
| SIN | 920 |
| SLP | 189 |
| SON | 1309 |
| TAB | 530 |
| TAMS | 115 |
| TLAX | 120 |
| VER | 5159 |
| YUC | 3 |
| ZAC | 228 |
Note que puede hacer click o posicionarse sobre una fila de la tabla para resaltar un valor específico.
Para este análisis se catalogó como NULL aquellos sismos en donde no existía información clara del estado o los que desde el SSN se clasificaban como tal. POr esta razón se observan 33 columnas. Estos casos son mínimos, por lo que no tendría impacto el omitir esta información.
La tabla muestra que los estado con mayor frecuencia de sismos se concetra en los estados de Oaxaca, Chiapas y Guerrero. Esto quiere decir, que la parte sur del país es la de mayor actividad sísmica, apesar que también existan en otros estados de la república.
Esto coincide con las regiones sísmicas tal como se muestra en la siguiente imagen:
Gráfico circular de frecuencia de los sísmos de acuerdo a la hora del día (0-23) cuando aconteció.
#preparo data
hora <- strptime(base$Hora, format="%H:%M:%S")
base$hora <- hour(hora)
hora_freq <- as.data.frame(aggregate(c~hora, FUN = sum, data=base))
# labels
label_data <- hora_freq
number_of_bar <- nrow(label_data)
angle <- 90 - 360 * (label_data$hora-0.5) /number_of_bar
label_data$hjust<-ifelse( angle < -90, 1, 0)
label_data$angle<-ifelse(angle < -90, angle+180, angle)
# comilo gráfica
p <- ggplot(hora_freq, aes(x=as.factor(hora), y=c)) +
geom_bar(stat="identity", fill=alpha("#F08080", 80)) +
ggtitle("Sismos por hora del día (0-23 hrs)")+
#theme_minimal() +
labs(
x = "Hora de ocurrencia",
y= "Cantidad de sismos"
) +
theme( #axis.text = element_blank(),
#axis.title = element_blank(),
panel.grid.major = element_line(colour = "grey80"),
plot.background = element_rect(fill="white", colour = "white"),
panel.background = element_rect(fill= "white", colour = "grey"),
#plot.margin = unit(rep(0,4), "cm") # This remove unnecessary margin around plot
) +
coord_polar(start = 0)+
geom_text(data=hora_freq, aes(x=hora, y=c, label=hora, hjust=label_data$hjust), color="grey80", fontface="bold",alpha=0.6, size=0.1, angle=label_data$angle, inherit.aes = FALSE )
p
La gráfica muestra que entre las 7:00 hrs y 17:00 hrs la actividad sísmica es más baja. Por el contrario, entre las 18:00 hrs y las 5:00 hrs hay mayor frecuencia de sismos.
Considerando solamente aquellos sismos cuya magnitud fue mayor o igual a 5 ¿cuáles son los 5 estados con mayor cantidad de sísmos?
#primero quito las observaciones en donde no se tiene magnitud
grados<- as.data.frame(subset(base, base$Magnitud != "no calculable"))
grados$Magnitud <- as.numeric(grados$Magnitud)
#después sólo mequedo con los que la magnitu es mayor o igual a 5 grados
data_2 <- as.data.frame(subset(grados, grados$Magnitud >= 5))
#agrego una variables de unos para contar frecuencia sobre esa
data_2$c <- 1
data_2 <-as.data.frame( aggregate(c~estado, FUN = sum, data=data_2))
#ordeno de mayor a menos
data_2 <- data_2[order(-data_2$c),]
#me qquedo con los primeros 5
#compilo tabla
data_2<- as.data.frame(data_2[1:5,])
data_2<-knitr::kable(data_2, row.names = F, full_width = FALSE, align = "cc", col.names = c("Estados", "Total sismos ≥ 5"))
kable_classic(data_2,"hover", full_width = FALSE, position = "center", font_size = 12, column_spec(data_2, 2, width="10em"))
| Estados | Total sismos ≥ 5 |
|---|---|
| CHIS | 499 |
| OAX | 272 |
| GRO | 185 |
| BCS | 115 |
| JAL | 105 |
Note que puede hacer click o posicionarse sobre una fila de la tabla para resaltar un valor específico.
En esta tabla se puede observar que los estados con mayor frecuencia general de sismos también coincide con los de mayor frecuencia que son Oaxaca, Chiapas y Guerrero.
Realizar un histograma de la magnitud de los sísmos detectados en el estado de Chiapas.
#de la base en donde tango los sismos con magnitud, separo los de chiapas
data_3 <- as.data.frame(subset(grados, grados$estado == "CHIS"))
#compilo de histograma
ggplot(data_3, aes(x=Magnitud)) +
geom_histogram( binwidth=.5, fill="#F08080", color="black", alpha=0.9) +
ggtitle("Histograma magintud de sismos en Chiapas (1980-1921)") +
theme_ipsum() +
theme(
panel.grid.major = element_line(colour = "grey80") ,
plot.background = element_rect(fill="white", colour = "white"),
panel.background = element_rect(fill= "white", colour = "grey"),
plot.title = element_text(size=15)
)
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 = b_{0} + b_{1} = X)\), 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} \begin{split} \bf{f(b)} = e^{T}e \\ & = (y-Xb^{T})(y - Xb)\\ & = y^{T}y -2y^{T}Xb+bX^{T}Xb\\ \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 β (o b):
\[ b= (X^TX) ^{-1}X^T y\] Utilizando los datos de la base corazon (Link a la base de datos), se obtiene el vector de estimaciones puntuales para los parámetros b cuando X = matriz de variables biking y smoking (498 x 2) y, y = hear.disease (498 x 1).
#cargo base
corazon <- read.csv("/Users/cristinaalvarez/Desktop/corazon.csv")
#agrego una columna de 1 para calcular intercepto
corazon$intercept <- 1
#llevo datafrema a matrix
corazon <- data.matrix(corazon)
#opera matricialmente con forme fórmula
x <- corazon[, c(1,2,4)]
y <- as.matrix(corazon[,3])
x_t <- t(x)
a <- (x_t%*%x)
a_inv <-solve(a)
c <- a_inv%*%x_t
b<- c%*%y
#compilo como table los resultados de beta
b<-as.data.frame(b)
b<-knitr::kable(b, row.names = T, full_width = FALSE, align = "cc", col.names = c( "Coeficientes Beta"))
kable_classic(b,"hover", full_width = FALSE, position = "center", font_size = 12, column_spec(b, 2, width="10em"))
| Coeficientes Beta | |
|---|---|
| biking | -0.2001331 |
| smoking | 0.1783339 |
| intercept | 14.9846580 |
Note que puede hacer click o posicionarse sobre una fila de la tabla para resaltar un valor específico.
Prueba:
existen comandos dentro de R que realizan todo el análisis de regresión lineal. Estos, además de proporcionarnos las estimaciones de coeficientes \(\beta\) arrojan mayor información del modelo LS
info <- read.csv("/Users/cristinaalvarez/Desktop/corazon.csv")
regresion <- lm(heart.disease ~ biking + smoking, data = info)
summary(regresion)
##
## Call:
## lm(formula = heart.disease ~ biking + smoking, data = info)
##
## 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
Ejercicio libre de programación
.columns{display: flex;}
h1{color:#CF6245;
text-align:center;}
h2{color:#CF6245;}
h3{color:#CF6245;
ont-size: 5px;}
body {
background-color: #FEF5E7;
font-size: 12pt;
font-weight: bold;
background-image: url("fondo.png");
margin: 5em;
}
.principal {
background-color: #EFD5C9;
border: 1px dashed grey;
font-weight: bold;
font-size: 7pt;
}
.secondary {
background-color: #EFD5C9;
border: none;
font-weight: light;
font-size: 7pt;
color: #616161;
}
a:link {
color: #008080;
}