En este estudio se analiza la cantidad de personas afectadas por Covid-19 y los fallecimientos a causa de esta enfermedad en varios países: Francia, Alemania, Irán, Italia, España, Reino Unido y Estados Unidos. En una etapa inicial, se investigan las interconexiones entre estos países utilizando el método de correlación de Pearson. Luego, se procede a clasificarlos según la velocidad de propagación del Covid-19, utilizando el análisis de componentes principales. Nosotros buscamos analizar y comparar los resultados obtenidos en el artículo “Análisis de componentes principales para estudiar las relaciones entre las tasas de propagación de COVID-19 en países de alto riesgo” con los datos procesados por nosotros.
En esta parte se describe la colección de datos utilizada en la investigación, junto con la presentación inicial del análisis de componentes principales.
Vamos a obtener la data de la página de la Unión Europea. Empezamos con la lectura y su preprocesamiento. Luego, seguiremos con su análisis descriptivo, algunas gráficas de referencia y procederemos a aplicar el análisis de componentes principales (ACP). Para esto último empezaremos analizando sus matrices de correlaciones entre los países, seguiremos a calcular sus autovalores y autovectores y con ello veremos el número de componentes a retener.
Los datos utilizados en este estudio abarcan información sobre la cantidad de individuos afectados por Covid-19 y los fallecimientos causados por esta enfermedad en Francia, Alemania, Irán, Italia, España, Reino Unido y Estados Unidos, recopilados desde el 22 de febrero de 2020 hasta el 18 de abril de 2020.
data_covid <- read_excel("COVID-19-geographic-disbtribution-worldwide.xlsx")
tabla1 <- head(data_covid)
knitr::kable(tabla1, caption = "Datos") %>%
kable_styling(bootstrap_options = c("striped","hover",
"condensed"),
full_width = F) %>%
scroll_box(width = "800px", height = "450px")
dateRep | day | month | year | cases | deaths | countriesAndTerritories | geoId | countryterritoryCode | popData2019 | continentExp | Cumulative_number_for_14_days_of_COVID-19_cases_per_100000 |
---|---|---|---|---|---|---|---|---|---|---|---|
2020-12-14 | 14 | 12 | 2020 | 746 | 6 | Afghanistan | AF | AFG | 38041757 | Asia | 9.014 |
2020-12-13 | 13 | 12 | 2020 | 298 | 9 | Afghanistan | AF | AFG | 38041757 | Asia | 7.053 |
2020-12-12 | 12 | 12 | 2020 | 113 | 11 | Afghanistan | AF | AFG | 38041757 | Asia | 6.869 |
2020-12-11 | 11 | 12 | 2020 | 63 | 10 | Afghanistan | AF | AFG | 38041757 | Asia | 7.134 |
2020-12-10 | 10 | 12 | 2020 | 202 | 16 | Afghanistan | AF | AFG | 38041757 | Asia | 6.969 |
2020-12-09 | 9 | 12 | 2020 | 135 | 13 | Afghanistan | AF | AFG | 38041757 | Asia | 6.963 |
# Ordenar el dataframe por la columna dateRep
data_covid <- data_covid[order(data_covid$dateRep), ]
data_covid$dateRep <- as.Date(data_covid$dateRep)
tabla2 <- head(data_covid)
knitr::kable(tabla2, caption = "Datos") %>%
kable_styling(bootstrap_options = c("striped","hover",
"condensed"),
full_width = F) %>%
scroll_box(width = "800px", height = "430px")
dateRep | day | month | year | cases | deaths | countriesAndTerritories | geoId | countryterritoryCode | popData2019 | continentExp | Cumulative_number_for_14_days_of_COVID-19_cases_per_100000 |
---|---|---|---|---|---|---|---|---|---|---|---|
2019-12-31 | 31 | 12 | 2019 | 0 | 0 | Afghanistan | AF | AFG | 38041757 | Asia | NA |
2019-12-31 | 31 | 12 | 2019 | 0 | 0 | Algeria | DZ | DZA | 43053054 | Africa | NA |
2019-12-31 | 31 | 12 | 2019 | 0 | 0 | Armenia | AM | ARM | 2957728 | Europe | NA |
2019-12-31 | 31 | 12 | 2019 | 0 | 0 | Australia | AU | AUS | 25203200 | Oceania | NA |
2019-12-31 | 31 | 12 | 2019 | 0 | 0 | Austria | AT | AUT | 8858775 | Europe | NA |
2019-12-31 | 31 | 12 | 2019 | 0 | 0 | Azerbaijan | AZ | AZE | 10047719 | Europe | NA |
Primero, no es necesario todas las columnas que se tienen en la data; por lo tanto, vamos a seleccionar las que usaremos:
#selecionando solo las columnas que usaremos
data_covid <- data_covid[, c("dateRep", "countriesAndTerritories", "cases", "deaths")]
tabla4 <- head(data_covid)
knitr::kable(tabla4, caption = "Datos") %>%
kable_styling(bootstrap_options = c("striped","hover",
"condensed"),
full_width = F) %>%
scroll_box(width = "800px", height = "340px")
dateRep | countriesAndTerritories | cases | deaths |
---|---|---|---|
2019-12-31 | Afghanistan | 0 | 0 |
2019-12-31 | Algeria | 0 | 0 |
2019-12-31 | Armenia | 0 | 0 |
2019-12-31 | Australia | 0 | 0 |
2019-12-31 | Austria | 0 | 0 |
2019-12-31 | Azerbaijan | 0 | 0 |
Tenemos un rango de fecha establecido por el autor del artículo que va desde el 22 de febrero hasta el 18 de abril del 2020, seleccionaremos solo los datos que cumplan con ello.
fecha_inicio <- as.Date("2020-02-22")
fecha_fin <- as.Date("2020-04-18")
datos_covid <- subset(data_covid, dateRep >= fecha_inicio & dateRep <= fecha_fin)
tabla5 <- head(datos_covid)
knitr::kable(tabla5, caption = "Datos") %>%
kable_styling(bootstrap_options = c("striped","hover",
"condensed"),
full_width = F) %>%
scroll_box(width = "800px", height = "340px")
dateRep | countriesAndTerritories | cases | deaths |
---|---|---|---|
2020-02-22 | Afghanistan | 0 | 0 |
2020-02-22 | Algeria | 0 | 0 |
2020-02-22 | Armenia | 0 | 0 |
2020-02-22 | Australia | 4 | 0 |
2020-02-22 | Austria | 0 | 0 |
2020-02-22 | Azerbaijan | 0 | 0 |
Segundo, solo se va a seleccionar los países que se usaron para la investigación en el artículo, los cuales son:
Francia
Estados Unidos
Reino Unido
Irán
Alemania
Italia
España
paises <- c("France", "Germany", "Iran", "Italy", "Spain", "United_Kingdom", "United_States_of_America")
data1 <- subset(datos_covid, countriesAndTerritories %in% paises)
tabla6 <- head(data1)
knitr::kable(tabla6, caption = "Datos") %>%
kable_styling(bootstrap_options = c("striped","hover",
"condensed"),
full_width = F) %>%
scroll_box(width = "800px", height = "340px")
dateRep | countriesAndTerritories | cases | deaths |
---|---|---|---|
2020-02-22 | France | 0 | 0 |
2020-02-22 | Germany | 0 | 0 |
2020-02-22 | Iran | 13 | 2 |
2020-02-22 | Italy | 14 | 0 |
2020-02-22 | Spain | 0 | 0 |
2020-02-22 | United_Kingdom | 0 | 0 |
Tercero, en el artículo realizan el análisis de componentes principales (ACP) a los números de pacientes y difuntos, así como a sus cantidades acumuladas. Por ello, vamos a crear 2 nuevas columnas: “cumulative_patients” y “cumulative_deaths”.
data1 <- as.data.frame(data1)
data1 <- data1 %>% arrange(data1$countriesAndTerritories)
# Asegúrate de que el número total de filas sea un múltiplo de 57
n <- nrow(data1)
n_restantes <- n %% 57
data1 <- head(data1, n - n_restantes)
# Calcula las frecuencias acumuladas reiniciando cada 57 filas
data1$cumulative_patients <- unlist(tapply(data1$cases, rep(1:(nrow(data1) %/% 57), each = 57, length.out = nrow(data1)), cumsum))
data1$cumulative_deaths <- unlist(tapply(data1$deaths, rep(1:(nrow(data1) %/% 57), each = 57, length.out = nrow(data1)), cumsum))
# Mostrar el dataframe con la nueva columna
tabla7 <- head(data1)
knitr::kable(tabla7, caption = "Datos") %>%
kable_styling(bootstrap_options = c("striped","hover",
"condensed"),
full_width = F) %>%
scroll_box(width = "800px", height = "340px")
dateRep | countriesAndTerritories | cases | deaths | cumulative_patients | cumulative_deaths |
---|---|---|---|---|---|
2020-02-22 | France | 0 | 0 | 0 | 0 |
2020-02-23 | France | 0 | 0 | 0 | 0 |
2020-02-24 | France | 0 | 0 | 0 | 0 |
2020-02-25 | France | 0 | 0 | 0 | 0 |
2020-02-26 | France | 2 | 0 | 2 | 0 |
2020-02-27 | France | 3 | 1 | 5 | 1 |
Finalmente, para evitar confusiones al momento de realizar la comparación de los resultados, usaremos los mismos nombres que usa el autor en el artículo y se trabajarán con las matrices de las variables:
patients <- acast(data1, dateRep ~ countriesAndTerritories, value.var = "cases")
deaths <- acast(data1, dateRep ~ countriesAndTerritories, value.var = "deaths")
cumulative_patients <- acast(data1, dateRep ~ countriesAndTerritories, value.var = "cumulative_patients")
cumulative_deaths <- acast(data1, dateRep ~ countriesAndTerritories, value.var = "cumulative_deaths")
Patients <- as.matrix(patients)
deaths <- as.matrix(deaths)
cumulative_patients <- as.matrix(cumulative_patients)
cumulative_deaths <- as.matrix(cumulative_deaths)
Vamos a realizar un análisis descriptivo teniendo como observaciones a las fechas y a las variables como los países, ya que el artículo lo trabaja de esa manera y buscamos replicar este trabajo. Tendremos como datos a la cantidad de individuos afectados, la cantidad de fallecidos por día y los acumulados de ambos.
Nota: Estas van a estar en matrices.
tabla8 <- stat.desc(patients)
knitr::kable(tabla8, caption = "Datos") %>%
kable_styling(bootstrap_options = c("striped","hover",
"condensed"),
full_width = F) %>%
scroll_box(width = "800px", height = "540px")
France | Germany | Iran | Italy | Spain | United_Kingdom | United_States_of_America | |
---|---|---|---|---|---|---|---|
nbr.val | 57.0000 | 57.0000 | 57.0000 | 57.0000 | 57.0000 | 57.000 | 57.000 |
nbr.null | 4.0000 | 4.0000 | 1.0000 | 0.0000 | 3.0000 | 3.000 | 3.000 |
nbr.na | 0.0000 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | 0.000 | 0.000 |
min | 0.0000 | 0.0000 | 0.0000 | 14.0000 | 0.0000 | 0.000 | 0.000 |
max | 7578.0000 | 6294.0000 | 5275.0000 | 6557.0000 | 9181.0000 | 5450.000 | 35527.000 |
range | 7578.0000 | 6294.0000 | 5275.0000 | 6543.0000 | 9181.0000 | 5450.000 | 35527.000 |
sum | 109240.0000 | 137424.0000 | 79489.0000 | 172431.0000 | 193963.0000 | 111725.000 | 702148.000 |
median | 1559.0000 | 2342.0000 | 1234.0000 | 3497.0000 | 3694.0000 | 1055.000 | 5374.000 |
mean | 1916.4912 | 2410.9474 | 1394.5439 | 3025.1053 | 3402.8596 | 1960.088 | 12318.386 |
SE.mean | 248.4413 | 296.7839 | 139.9461 | 266.9801 | 387.0120 | 265.432 | 1770.768 |
CI.mean.0.95 | 497.6877 | 594.5295 | 280.3458 | 534.8254 | 775.2781 | 531.725 | 3547.275 |
var | 3518214.8615 | 5020598.0508 | 1116340.2525 | 4062867.7387 | 8537361.2657 | 4015899.867 | 178730358.384 |
std.dev | 1875.6905 | 2240.6691 | 1056.5700 | 2015.6557 | 2921.8763 | 2003.971 | 13369.007 |
coef.var | 0.9787 | 0.9294 | 0.7576 | 0.6663 | 0.8587 | 1.022 | 1.085 |
Vemos que va a ser necesario una estandarización a los datos, esta se va a realizar al aplicar el ACP.
tabla9 <- stat.desc(deaths)
knitr::kable(tabla9, caption = "Datos") %>%
kable_styling(bootstrap_options = c("striped","hover",
"condensed"),
full_width = F) %>%
scroll_box(width = "800px", height = "540px")
France | Germany | Iran | Italy | Spain | United_Kingdom | United_States_of_America | |
---|---|---|---|---|---|---|---|
nbr.val | 57.000 | 57.000 | 57.0000 | 57.0000 | 57.0000 | 57.000 | 57.000 |
nbr.null | 10.000 | 21.000 | 1.0000 | 2.0000 | 14.0000 | 16.000 | 9.000 |
nbr.na | 0.000 | 0.000 | 0.0000 | 0.0000 | 0.0000 | 0.000 | 0.000 |
min | 0.000 | 0.000 | 0.0000 | 0.0000 | 0.0000 | 0.000 | 0.000 |
max | 2004.000 | 315.000 | 292.0000 | 971.0000 | 950.0000 | 1122.000 | 4928.000 |
range | 2004.000 | 315.000 | 292.0000 | 971.0000 | 950.0000 | 1122.000 | 4928.000 |
sum | 18680.000 | 4110.000 | 4956.0000 | 22747.0000 | 20043.0000 | 16942.000 | 37054.000 |
median | 112.000 | 22.000 | 111.0000 | 473.0000 | 235.0000 | 36.000 | 80.000 |
mean | 327.719 | 72.105 | 86.9474 | 399.0702 | 351.6316 | 297.228 | 650.070 |
SE.mean | 59.751 | 12.673 | 8.1674 | 40.5473 | 45.9758 | 51.772 | 135.664 |
CI.mean.0.95 | 119.696 | 25.386 | 16.3612 | 81.2260 | 92.1005 | 103.711 | 271.767 |
var | 203500.527 | 9153.846 | 3802.2293 | 93712.8164 | 120484.9511 | 152777.965 | 1049065.102 |
std.dev | 451.110 | 95.676 | 61.6622 | 306.1255 | 347.1094 | 390.868 | 1024.239 |
coef.var | 1.377 | 1.327 | 0.7092 | 0.7671 | 0.9871 | 1.315 | 1.576 |
Vemos que va a ser necesario una estandarización a los datos, esta se va a realizar al aplicar el ACP.
tabla10 <- stat.desc(cumulative_patients)
knitr::kable(tabla10, caption = "Datos") %>%
kable_styling(bootstrap_options = c("striped","hover",
"condensed"),
full_width = F) %>%
scroll_box(width = "800px", height = "540px")
France | Germany | Iran | Italy | Spain | United_Kingdom | United_States_of_America | |
---|---|---|---|---|---|---|---|
nbr.val | 57.000 | 57.000 | 57.0000 | 57.0000 | 57.00 | 57.000 | 57.000 |
nbr.null | 4.000 | 4.000 | 0.0000 | 0.0000 | 3.00 | 1.000 | 0.000 |
nbr.na | 0.000 | 0.000 | 0.0000 | 0.0000 | 0.00 | 0.000 | 0.000 |
min | 0.000 | 0.000 | 13.0000 | 14.0000 | 0.00 | 0.000 | 19.000 |
max | 109240.000 | 137424.000 | 79489.0000 | 172431.0000 | 193963.00 | 111725.000 | 702148.000 |
range | 109240.000 | 137424.000 | 79476.0000 | 172417.0000 | 193963.00 | 111725.000 | 702129.000 |
sum | 1853004.000 | 2414132.000 | 1635631.0000 | 3647773.0000 | 3703184.00 | 1523346.000 | 8964661.000 |
median | 12600.000 | 18172.000 | 19639.0000 | 47018.0000 | 31748.00 | 6471.000 | 19608.000 |
mean | 32508.842 | 42353.193 | 28695.2807 | 63996.0175 | 64968.14 | 26725.368 | 157274.754 |
SE.mean | 5001.257 | 6435.683 | 3561.5250 | 8009.5275 | 9294.15 | 4651.221 | 29199.819 |
CI.mean.0.95 | 10018.722 | 12892.221 | 7134.5919 | 16045.0117 | 18618.42 | 9317.515 | 58494.265 |
var | 1425716816.171 | 2360826637.051 | 723014242.5984 | 3656694292.7318 | 4923727321.37 | 1233129665.201 | 48599875767.224 |
std.dev | 37758.665 | 48588.338 | 26888.9242 | 60470.6068 | 70169.28 | 35115.946 | 220453.795 |
coef.var | 1.161 | 1.147 | 0.9371 | 0.9449 | 1.08 | 1.314 | 1.402 |
Vemos que va a ser necesario una estandarización a los datos, esta se va a realizar al aplicar el ACP.
tabla11 <- stat.desc(cumulative_deaths)
knitr::kable(tabla11, caption = "Datos") %>%
kable_styling(bootstrap_options = c("striped","hover",
"condensed"),
full_width = F) %>%
scroll_box(width = "800px", height = "540px")
France | Germany | Iran | Italy | Spain | United_Kingdom | United_States_of_America | |
---|---|---|---|---|---|---|---|
nbr.val | 57.000 | 57.000 | 57.0000 | 57.000 | 57.00 | 57.000 | 57.000 |
nbr.null | 5.000 | 17.000 | 0.0000 | 1.000 | 12.00 | 14.000 | 8.000 |
nbr.na | 0.000 | 0.000 | 0.0000 | 0.000 | 0.00 | 0.000 | 0.000 |
min | 0.000 | 0.000 | 2.0000 | 0.000 | 0.00 | 0.000 | 0.000 |
max | 18680.000 | 4110.000 | 4956.0000 | 22747.000 | 20043.00 | 16942.000 | 37054.000 |
range | 18680.000 | 4110.000 | 4954.0000 | 22747.000 | 20043.00 | 16942.000 | 37054.000 |
sum | 220441.000 | 43092.000 | 103312.0000 | 425619.000 | 306123.00 | 177269.000 | 323756.000 |
median | 449.000 | 45.000 | 1431.0000 | 4032.000 | 1002.00 | 194.000 | 260.000 |
mean | 3867.386 | 756.000 | 1812.4912 | 7467.000 | 5370.58 | 3109.983 | 5679.930 |
SE.mean | 762.534 | 155.795 | 226.7832 | 1044.489 | 903.58 | 658.011 | 1278.306 |
CI.mean.0.95 | 1527.539 | 312.095 | 454.3012 | 2092.363 | 1810.09 | 1318.155 | 2560.754 |
var | 33143109.920 | 1383513.143 | 2931544.1472 | 62184538.393 | 46538034.71 | 24679806.875 | 93141742.531 |
std.dev | 5757.005 | 1176.228 | 1712.1753 | 7885.717 | 6821.88 | 4967.877 | 9650.997 |
coef.var | 1.489 | 1.556 | 0.9447 | 1.056 | 1.27 | 1.597 | 1.699 |
Vemos que va a ser necesario una estandarización a los datos, esta se va a realizar al aplicar el ACP.
Tomando en cuenta la fecha registrada como nuestro eje ‘X’:
data1 <- data1 %>%
mutate(fecha = rep(1:57, length.out = n()))
# Convierte la columna 'fecha' a tipo numérico si no lo está
data1$fecha <- as.numeric(data1$fecha)
# Asignar colores específicos a los países
colores_paises <- c("France" = "RosyBrown1", "Germany" = "dodgerblue2", "Iran" = "darkorange",
"Italy" = "chartreuse3", "Spain" = "gold", "United_Kingdom" = "red",
"United_States_of_America" = "black")
# Crea el gráfico ggplot
(Casos<- ggplot(data1, aes(x = fecha, y = cases, color = countriesAndTerritories)) +
geom_line() +
labs(title = "Casos por cada número de día", x = "Número de días", y = "Casos") +
scale_x_continuous(breaks = seq(0, 60, 5), limits = c(0, 60)) +
scale_y_continuous(breaks = seq(0, 35000, 5000), limits = c(0, 35000)) +
theme_minimal() +
theme(legend.position = "right") +
scale_color_manual(values = colores_paises) +
guides(color = guide_legend(title = "paises" , ))+
transition_reveal(fecha)+
enter_fade() +
exit_fade())
(Muertes<- ggplot(data1, aes(x = fecha, y = deaths, color = countriesAndTerritories)) +
geom_line() +
labs(title = "Defunciones por cada número de día", x = "Número de días", y = "Muertes") +
scale_x_continuous(breaks = seq(0, 60, 5), limits = c(0, 60)) +
scale_y_continuous(breaks = seq(0, 5000, 1000), limits = c(0, 5000)) +
theme_minimal() +
theme(legend.position = "right") +
scale_color_manual(values = colores_paises) +
guides(color = guide_legend(title = "paises" , ))+transition_reveal(fecha)+
enter_fade() +
exit_fade())
(AcuCasos<- ggplot(data1, aes(x = fecha, y =cumulative_patients, color = countriesAndTerritories)) +
geom_line() +
labs(title = "Casos Acumulados por cada número de día", x = "Número de días", y = "Casos Acumulado") +
scale_x_continuous(breaks = seq(0, 60, 5), limits = c(0, 60)) +
scale_y_continuous(breaks = seq(0, 600000, 100000), limits = c(0, 600000)) +
theme_minimal() +
theme(legend.position = "right") +
scale_color_manual(values = colores_paises) +
guides(color = guide_legend(title = "paises" , ))+ transition_reveal(fecha)+
enter_fade() +
exit_fade())
(AcuMuertes<- ggplot(data1, aes(x = fecha, y =cumulative_deaths, color = countriesAndTerritories)) +
geom_line() +
labs(title = "Defunciones Acumuladas por por cada número de día", x = "Número de días", y = "Casos Acumulado") +
scale_x_continuous(breaks = seq(0, 60, 5), limits = c(0, 60)) +
scale_y_continuous(breaks = seq(0, 30000, 10000), limits = c(0, 30000)) +
theme_minimal() +
theme(legend.position = "right") +
scale_color_manual(values = colores_paises) +
guides(color = guide_legend(title = "paises" , ))+ transition_reveal(fecha)+
enter_fade() +
exit_fade())
Vamos a utilizar el análisis de componentes principales para obtener los grupos de países pertenecientes a cada componente.
Para ello vamos a empezar con la matriz de variancia-covarianza de cada una de las variables de la data.
Se realiza la matriz variancia-covarianza para cada una de las variables de la data.
cov1 <- cov(patients)
knitr::kable(cov1, caption = "Matriz de variancia-covarianza patients") %>%
kable_styling(bootstrap_options = c("striped","hover",
"condensed"),
full_width = F) %>%
scroll_box(width = "800px", height = "330px")
France | Germany | Iran | Italy | Spain | United_Kingdom | United_States_of_America | |
---|---|---|---|---|---|---|---|
France | 3518215 | 3498088 | 1410382 | 2595804 | 4539268 | 2994989 | 19964680 |
Germany | 3498088 | 5020598 | 1763445 | 3768755 | 5920789 | 3606969 | 23566313 |
Iran | 1410382 | 1763445 | 1116340 | 1452257 | 2271596 | 1453110 | 9528754 |
Italy | 2595804 | 3768755 | 1452257 | 4062868 | 5188759 | 2441965 | 15434797 |
Spain | 4539268 | 5920789 | 2271596 | 5188759 | 8537361 | 4075407 | 25895007 |
United_Kingdom | 2994989 | 3606969 | 1453110 | 2441965 | 4075407 | 4015900 | 26455344 |
United_States_of_America | 19964680 | 23566313 | 9528754 | 15434797 | 25895007 | 26455344 | 178730358 |
cov1 <- cov(deaths)
knitr::kable(cov1, caption = "Matriz de variancia-covarianza deaths") %>%
kable_styling(bootstrap_options = c("striped","hover",
"condensed"),
full_width = F) %>%
scroll_box(width = "800px", height = "330px")
France | Germany | Iran | Italy | Spain | United_Kingdom | United_States_of_America | |
---|---|---|---|---|---|---|---|
France | 203501 | 36616 | 10025 | 80762 | 115734 | 152518 | 361524 |
Germany | 36616 | 9154 | 2517 | 17037 | 25095 | 35823 | 89802 |
Iran | 10025 | 2517 | 3802 | 14986 | 14115 | 10455 | 19867 |
Italy | 80762 | 17037 | 14986 | 93713 | 95633 | 68969 | 141739 |
Spain | 115734 | 25095 | 14115 | 95633 | 120485 | 103409 | 212468 |
United_Kingdom | 152518 | 35823 | 10455 | 68969 | 103409 | 152778 | 349599 |
United_States_of_America | 361524 | 89802 | 19867 | 141739 | 212468 | 349599 | 1049065 |
cov1 <- cov(cumulative_patients)
knitr::kable(cov1, caption = "Matriz de variancia-covarianza cumulative_patients") %>%
kable_styling(bootstrap_options = c("striped","hover",
"condensed"),
full_width = F) %>%
scroll_box(width = "800px", height = "330px")
France | Germany | Iran | Italy | Spain | United_Kingdom | United_States_of_America | |
---|---|---|---|---|---|---|---|
France | 1425716816 | 1831603066 | 1005416290 | 2235985805 | 2629788348 | 1312423100 | 8180320172 |
Germany | 1831603066 | 2360826637 | 1295741980 | 2895174472 | 3398909164 | 1675919719 | 10425916988 |
Iran | 1005416290 | 1295741980 | 723014243 | 1615884735 | 1875173474 | 913394333 | 5661301450 |
Italy | 2235985805 | 2895174472 | 1615884735 | 3656694293 | 4217467488 | 2008680925 | 12401357091 |
Spain | 2629788348 | 3398909164 | 1875173474 | 4217467488 | 4923727321 | 2381376334 | 14761921608 |
United_Kingdom | 1312423100 | 1675919719 | 913394333 | 2008680925 | 2381376334 | 1233129665 | 7733062244 |
United_States_of_America | 8180320172 | 10425916988 | 5661301450 | 12401357091 | 14761921608 | 7733062244 | 48599875767 |
cov1 <- cov(cumulative_deaths)
knitr::kable(cov1, caption = "Matriz de variancia-covarianza cumulative_deaths") %>%
kable_styling(bootstrap_options = c("striped","hover",
"condensed"),
full_width = F) %>%
scroll_box(width = "800px", height = "330px")
France | Germany | Iran | Italy | Spain | United_Kingdom | United_States_of_America | |
---|---|---|---|---|---|---|---|
France | 33143110 | 6751460 | 8998321 | 42522939 | 38348521 | 28492887 | 54650320 |
Germany | 6751460 | 1383513 | 1806657 | 8555571 | 7753495 | 5837426 | 11275883 |
Iran | 8998321 | 1806657 | 2931544 | 13436402 | 11297727 | 7542762 | 14143448 |
Italy | 42522939 | 8555571 | 13436402 | 62184538 | 53031546 | 35736571 | 67125410 |
Spain | 38348521 | 7753495 | 11297727 | 53031546 | 46538035 | 32508798 | 61454881 |
United_Kingdom | 28492887 | 5837426 | 7542762 | 35736571 | 32508798 | 24679807 | 47658381 |
United_States_of_America | 54650320 | 11275883 | 14143448 | 67125410 | 61454881 | 47658381 | 93141743 |
Ahora veamos a ver las matrices de sus coeficientes de correlación entre los países, teniendo en cuenta a:
Matriz de correlación entre los países teniendo como información al número de pacientes.
corrP<-cor(patients)
network_plot(corrP)
Como se pueden observar, en los 4 casos se presentan correlaciones positivas muy altas.
Ahora, para realizar el Análisis de Componentes Principales (ACP), vamos a escalar los datos por cada tipo de información obtenida (el número de pacientes, defunciones y sus acumulados de ambos).
Matriz de correlación entre los países teniendo como información al número de defunciones.
corrD<-cor(deaths)
network_plot(corrD)
Como se pueden observar, en los 4 casos se presentan correlaciones positivas muy altas.
Ahora, para realizar el Análisis de Componentes Principales (ACP), vamos a escalar los datos por cada tipo de información obtenida (el número de pacientes, defunciones y sus acumulados de ambos).
Matriz de correlación entre los países teniendo como información al número de pacientes acumulados.
corrCP<-cor(cumulative_patients)
network_plot(corrCP)
Como se pueden observar, en los 4 casos se presentan correlaciones positivas muy altas.
Ahora, para realizar el Análisis de Componentes Principales (ACP), vamos a escalar los datos por cada tipo de información obtenida (el número de pacientes, defunciones y sus acumulados de ambos).
Matriz de correlación entre los países teniendo como información al número de defunciones acumuladas.
corrCD<-cor(cumulative_deaths)
network_plot(corrCD)
Como se pueden observar, en los 4 casos se presentan correlaciones positivas muy altas.
Ahora, para realizar el Análisis de Componentes Principales (ACP), vamos a escalar los datos por cada tipo de información obtenida (el número de pacientes, defunciones y sus acumulados de ambos).
# Vamos a escalar los datos
acpP <- dudi.pca(patients,
scannf=FALSE,
scale=TRUE, #Matriz de correlación
nf=2)
El número de componentes a retener según el PCA para ‘patients’ son:
acpP$eig
## [1] 5.55475 0.69417 0.33936 0.22645 0.10668 0.06805 0.01054
inertia.dudi(acpP)
## Inertia information:
## Call: inertia.dudi(x = acpP)
##
## Decomposition of total inertia:
## inertia cum cum(%)
## Ax1 5.55475 5.555 79.35
## Ax2 0.69417 6.249 89.27
## Ax3 0.33936 6.588 94.12
## Ax4 0.22645 6.815 97.35
## Ax5 0.10668 6.921 98.88
## Ax6 0.06805 6.989 99.85
## Ax7 0.01054 7.000 100.00
Entonces, con el número de pacientes, tenemos que nos quedamos con las 2 primeras componentes.
# Gráfica de Valores propios
screeplot(acpP, main ="Screeplot - Valores Propios")
#Gráfica del Codo
plot(acpP$eig,type="b",pch=20,col="blue",
main = "Gráfico de sedimentación - Scree Plot")
#abline(h=1,lty=3,col="red")
acpP$co
## Comp1 Comp2
## France -0.9085 0.06822
## Germany -0.9493 -0.10966
## Iran -0.8368 -0.08059
## Italy -0.8430 -0.44416
## Spain -0.9169 -0.31140
## United_Kingdom -0.8953 0.41366
## United_States_of_America -0.8803 0.45347
s.corcircle(acpP$co,grid=FALSE)
acpD <- dudi.pca(deaths,
scannf=FALSE,
scale=TRUE, #Matriz de correlación
nf=2)
El número de componentes a retener según el PCA para ‘deaths’ son:
acpD$eig
## [1] 5.10719 1.20874 0.32152 0.16867 0.11943 0.04158 0.03287
inertia.dudi(acpD)
## Inertia information:
## Call: inertia.dudi(x = acpD)
##
## Decomposition of total inertia:
## inertia cum cum(%)
## Ax1 5.10719 5.107 72.96
## Ax2 1.20874 6.316 90.23
## Ax3 0.32152 6.637 94.82
## Ax4 0.16867 6.806 97.23
## Ax5 0.11943 6.926 98.94
## Ax6 0.04158 6.967 99.53
## Ax7 0.03287 7.000 100.00
Entonces, con el número de defunciones, tenemos que nos quedamos con las 2 primeras componentes.
# Gráfica de Valores propios
screeplot(acpD, main ="Screeplot - Valores Propios")
#Gráfica del Codo
plot(acpD$eig,type="b",pch=20,col="blue",
main = "Gráfico de sedimentación - Scree Plot")
#abline(h=1,lty=3,col="red")
acpD$co
## Comp1 Comp2
## France 0.8834 0.2559
## Germany 0.9347 0.2885
## Iran 0.6383 -0.6688
## Italy 0.8036 -0.5359
## Spain 0.9052 -0.2731
## United_Kingdom 0.9317 0.2735
## United_States_of_America 0.8440 0.4197
s.corcircle(acpD$co,grid=FALSE)
acpCP <- dudi.pca(cumulative_patients,
scannf=FALSE,
scale=TRUE, #Matriz de correlación
nf=2)
El número de componentes a retener según el PCA para ‘cumulative_patients’ son:
acpCP$eig
## [1] 6.8753302 0.1124906 0.0087594 0.0027125 0.0004430 0.0002179 0.0000464
inertia.dudi(acpCP)
## Inertia information:
## Call: inertia.dudi(x = acpCP)
##
## Decomposition of total inertia:
## inertia cum cum(%)
## Ax1 6.8753302 6.875 98.22
## Ax2 0.1124906 6.988 99.83
## Ax3 0.0087594 6.997 99.95
## Ax4 0.0027125 6.999 99.99
## Ax5 0.0004430 7.000 100.00
## Ax6 0.0002179 7.000 100.00
## Ax7 0.0000464 7.000 100.00
Entonces, con el número de defunciones, tenemos que nos quedamos con las 2 primeras componentes.
# Gráfica de Valores propios
screeplot(acpCP, main ="Screeplot - Valores Propios")
#Gráfica del Codo
plot(acpCP$eig,type="b",pch=20,col="blue",
main = "Gráfico de sedimentación - Scree Plot")
#abline(h=1,lty=3,col="red")
acpCP$co
## Comp1 Comp2
## France -0.9994 0.02138
## Germany -0.9987 -0.02074
## Iran -0.9935 -0.09114
## Italy -0.9844 -0.17074
## Spain -0.9944 -0.09470
## United_Kingdom -0.9875 0.15678
## United_States_of_America -0.9794 0.20149
s.corcircle(acpCP$co,grid=FALSE)
acpCD <- dudi.pca(cumulative_deaths,
scannf=FALSE,
scale=TRUE, #Matriz de correlación
nf=2)
El número de componentes a retener según el PCA para ‘cumulative_deaths’ son:
acpCD$eig
## [1] 6.7022700 0.2759705 0.0163780 0.0042537 0.0007322 0.0002842 0.0001114
inertia.dudi(acpCD)
## Inertia information:
## Call: inertia.dudi(x = acpCD)
##
## Decomposition of total inertia:
## inertia cum cum(%)
## Ax1 6.7022700 6.702 95.75
## Ax2 0.2759705 6.978 99.69
## Ax3 0.0163780 6.995 99.92
## Ax4 0.0042537 6.999 99.98
## Ax5 0.0007322 7.000 99.99
## Ax6 0.0002842 7.000 100.00
## Ax7 0.0001114 7.000 100.00
Entonces, con el número de defunciones, tenemos que nos quedamos con las 2 primeras componentes.
# Gráfica de Valores propios
screeplot(acpCD, main ="Screeplot - Valores Propios")
#Gráfica del Codo
plot(acpCD$eig,type="b",pch=20,col="blue",
main = "Gráfico de sedimentación - Scree Plot")
#abline(h=1,lty=3,col="red")
acpCD$co
## Comp1 Comp2
## France -0.9935 0.09933
## Germany -0.9895 0.14356
## Iran -0.9507 -0.30228
## Italy -0.9682 -0.24921
## Spain -0.9911 -0.10232
## United_Kingdom -0.9855 0.16706
## United_States_of_America -0.9702 0.23160
s.corcircle(acpCD$co,grid=FALSE)
Gráfica ACP con el número de pacientes admitidos al día
(D_AacpP<-fviz_pca_var(acpP, col.var="steelblue")+
ggtitle("Pacientes") +
theme_minimal())
Primer grupo: Italia, Irán, Alemania, España y Francia.
Segundo grupo: Estados Unidos América y Reino Unido.
Gráfica ACP con el número de defunciones al día
(D_AacpD<-fviz_pca_var(acpD, col.var="steelblue")+
ggtitle("Defunciones") +
theme_minimal())
Primer grupo: Estados Unidos América, Reino Unido, Alemania y Francia.
Segundo grupo: España, Italia e Irán.
Gráfica ACP con el número de pacientes admitidos acumulados al día
(D_AacpCP<-fviz_pca_var(acpCP, col.var="steelblue")+
ggtitle("Pacientes Acumulados") +
theme_minimal())
Primer grupo: Reino Unido y Estados Unidos de América.
Segundo grupo: Francia, España, Alemania, Irán e Italia.
Gráfica ACP con el número de defunciones al día acumulados
(D_AacpCD<-fviz_pca_var(acpCD, col.var="steelblue")+
ggtitle("Defunciones Acumulados") +
theme_minimal())
Primer grupo: Estados Unidos América, Reino Unido, Alemania y Francia.
Segundo grupo: España, Italia e Irán.
Luego de realizar este trabajo de replicación, hemos obtenido algunas diferencias singulares en los resultados. Esto es más evidente en el análisis descriptivo, ya que se observa variaciones entre las medidas estadísticas de nuestro trabajo con los del artículo. La razón es porque la base de datos tomada es de origen distinto, además que en las primeras etapas del COVID la recolección de datos no fue fácil, tanto por el contexto como por el crecimiento exponencial de casos, la data se actualizaba de forma diaria y era complicado clasificar a los pacientes con COVID o no. Estas complicaciones fueron en parte por las pruebas de descartes, las cuales no eran muy efectivas; sin embargo, a pesar de estas diferencias, el presente trabajo muestra resultados próximos a los del artículo, obteniendo la misma cantidad de grupos y sus mismos participantes en cada uno de ellos.