A7U1

R.Contreras, S.Carrera, K.Amador y R.Pacheco (Equipo 6)

3/1/2022

Regresión lineal múltiple

library(pacman)
p_load("prettydoc", "DT", "xfun", "dplyr", "psych", "GGally", "ggplot2","readr", "gridExtra","lmtest","corrplot","car")

La regresión lineal múltiple permite generar un modelo lineal en el que el valor de la variable dependiente o respuesta (Y) se determina a partir de un conjunto de variables independientes llamadas predictores X1X2X3.

Los modelos de regresión múltiple pueden emplearse para predecir el valor de la variable dependiente o para evaluar la influencia que tienen los predictores sobre ella (esto último se debe que analizar con cautela para no malinterpretar causa-efecto).

Los modelos lineales múltiples siguen la siguiente ecuación:

\[ Y_{i}=(\beta_{0}+\beta_{1}X_{1i}+\beta_{2}X_{2i}+\cdots+\beta_{n}X_{ni})+e_{i} \]

  • $ _{0} $ : es la ordenada en el origen, el valor de la variable dependiente Y cuando todos los predictores son cero.

  • $ _{i} $ : es el efecto promedio que tiene el incremento en una unidad de la variable predictora Xi sobre la variable dependiente Y manteniéndose constantes el resto de variables. Se conocen como coeficientes parciales de regresión.

  • $ e_{i} $ : es el residuo o error, la diferencia entre el valor observado y el estimado por el modelo.

Condiciones para la regresión lineal múltiple

Los modelos de correlación lineal múltiple requieren de las mismas condiciones que los modelos lineales simples más otras adicionales.

Parsimonia

Este término hace referencia a que el mejor modelo es aquel capaz de explicar con mayor precisión la variabilidad observada en la variable respuesta empleando el menor número de predictores, por lo tanto, con menos asunciones.

Tamaño de la muestra

No se trata de una condición de por sí pero, si no se dispone de suficientes observaciones, predictores que no son realmente influyentes podrían parecerlo. En el libro Hanbook of biological statistics recomiendan que el número de observaciones sea como mínimo entre 10 y 20 veces el número de predictores del modelo.

La gran mayoría de condiciones se verifican utilizando los residuos, por lo tanto, se suele generar primero el modelo y posteriormente validar las condiciones. De hecho, el ajuste de un modelo debe verse como un proceso iterativo en el que se ajusta el modelo, se evalúan sus residuos y se mejora. Así hasta llegar a un modelo óptimo.

Caso de estudio. Efecto de la movilidad de personas en la contaminación atmosférica

Este caso de estudio es con el fin de hacer un análisis del efecto de la movilidad de personas en la contaminación atmosférica, debido a que la contaminación del aire es el principal riesgo ambiental para la salud pública en las Américas. En todo el mundo, cerca de 7 millones de muertes prematuras fueron atribuibles a la contaminación del aire ambiental en 2016. Alrededor del 88% de estas muertes ocurren en países de ingresos bajos y medios.

Más de 150 millones de personas en América Latina viven en ciudades que exceden las Guías de Calidad del Aire de la OMS. La exposición a altos niveles de contaminación del aire puede causar una variedad de resultados adversos para la salud: aumenta el riesgo de infecciones respiratorias, enfermedades cardiacas, derrames cerebrales y cáncer de pulmón, las cuales afectan en mayor proporción a población vulnerable, niños, adultos mayores y mujeres. La contaminación del aire en el hogar se asocia al uso de combustibles y prácticas de cocina ineficiente.

La importancia de respirar aire limpio sin contaminantes es crucial para todo ser viviente. Por lo cual es importante que este sea aire limpio, pero ¿Cómo detectar si el aire que respiramos no tiene contaminantes? ¿Cómo nos afecta a nosotros?. La calidad del aire está directamente relacionada con la movilidad de carros, autobuses y hasta la propia movilidad de la ciudad, donde las personas realizan sus actividades diarias, por lo tanto, entre más movilidad haya en la ciudad, aumentan los contaminantes en el aire.

Los principales contaminantes en el aire han sido creados principalmente por la actividad económica humana, la concentración de estas sustancias es altamente nociva para la salud del ser humano. Este estudio tuvo en cuenta los siguientes contaminantes:

  • Material particulado (PM10)
  • Ozono (O3)
  • Dióxido de azufre (SO2)

Datos

  • Fuente:

  • Los datos de contaminantes atmosfericos provienen de la estacion de calidad del aire de la ERNO del instituto de geologia de la unam ubicado en Hermosillo. Podemos visitar el origen de los datos aqui: http://www.erno.geologia.unam.mx

  • Los datos de movilidad de las personas, salen de los celulares android de las personas, a través de sus ubicaciones GPS: https://www.google.com/covid19/mobility/

library(readxl)
setwd("~/ESTADISTICA")
con <- read_excel("Concentracion.xlsx")
datos <- as.data.frame(con)
datatable(datos)

Analizar la relación entre variables

Se parte del establecimiento del modelo lineal multiple, el cual se encargara de estudiar la relacion que hay entre las variables; esto es clave a la hora de identificar la calidad de los predictores en el modelo, distinguir las variables que no puede ser incluidas porque presentan una relacion no lineal asi como la colinealidad entre los predictores, es decir, que el conjunto de puntos esten situados sobre la misma línea recta, un conjunto de puntos que posee esta propiedad es colineal.

round(cor(x = datos, method = "pearson"), 3)
##                            O3    SO2   PM10 Reactivacion_Comercial
## O3                      1.000 -0.220 -0.229                 -0.193
## SO2                    -0.220  1.000  0.612                  0.404
## PM10                   -0.229  0.612  1.000                  0.281
## Reactivacion_Comercial -0.193  0.404  0.281                  1.000
## Supermercado_Farmacia  -0.047  0.443  0.280                  0.875
## Parques_Centros        -0.182  0.019  0.065                  0.814
## Estaciones_Transito    -0.174  0.399  0.270                  0.944
## Lugares_Trabajo        -0.119  0.138  0.100                  0.581
## Residencia              0.130 -0.371 -0.238                 -0.842
##                        Supermercado_Farmacia Parques_Centros
## O3                                    -0.047          -0.182
## SO2                                    0.443           0.019
## PM10                                   0.280           0.065
## Reactivacion_Comercial                 0.875           0.814
## Supermercado_Farmacia                  1.000           0.655
## Parques_Centros                        0.655           1.000
## Estaciones_Transito                    0.872           0.770
## Lugares_Trabajo                        0.492           0.371
## Residencia                            -0.729          -0.617
##                        Estaciones_Transito Lugares_Trabajo Residencia
## O3                                  -0.174          -0.119      0.130
## SO2                                  0.399           0.138     -0.371
## PM10                                 0.270           0.100     -0.238
## Reactivacion_Comercial               0.944           0.581     -0.842
## Supermercado_Farmacia                0.872           0.492     -0.729
## Parques_Centros                      0.770           0.371     -0.617
## Estaciones_Transito                  1.000           0.474     -0.758
## Lugares_Trabajo                      0.474           1.000     -0.853
## Residencia                          -0.758          -0.853      1.000
  • Análisis con histogramas

Esto representa graficamente la distribución de los datos.

multi.hist( x = datos, dcol = c("blue","orange"), dlty = c("dotted", "solid"), main = "")

  • Ahora representando esto mismo, más la recta utilizando ggplot y ggally, el panel superior mostrará la correlación entre las variables continuas, el inferior los diagramas de dispersión entre las variables continuas.
ggpairs(datos, lower = list(continuous ="smooth"), diag = list (continuos = "barDiag"), axisLabels = "none")

Modelo general de correlación

modelo <- lm(SO2 ~ Reactivacion_Comercial,data = datos)
summary(modelo)
## 
## Call:
## lm(formula = SO2 ~ Reactivacion_Comercial, data = datos)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.78551 -0.13231  0.00414  0.15266  0.94720 
## 
## Coefficients:
##                         Estimate Std. Error t value Pr(>|t|)    
## (Intercept)            0.3983426  0.0257383  15.477   <2e-16 ***
## Reactivacion_Comercial 0.0067378  0.0007224   9.327   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2595 on 445 degrees of freedom
## Multiple R-squared:  0.1635, Adjusted R-squared:  0.1616 
## F-statistic: 86.98 on 1 and 445 DF,  p-value: < 2.2e-16
  • El modelo tomaría la siguiente forma:

\[ y = 0.3983426 - 0.0067378x \] Esta ecuación representa esta recta ajustada a la dispersión de los puntos con los cuales se forma el modelo.

  • Evaluando el modelo
y = 0.3983426 - (0.0067378*6)
y
## [1] 0.3579158

Conocer el residuo según este modelo

y - (0.109583)
## [1] 0.2483328

Evaluando gráficamente el modelo

plot(datos$Reactivacion_Comercial, datos$SO2)
abline(modelo)

Múltiples predictores

modelo2 <- lm(SO2 ~ Reactivacion_Comercial + Supermercado_Farmacia + Parques_Centros + Estaciones_Transito + Lugares_Trabajo + Residencia, data = datos )
summary(modelo2)
## 
## Call:
## lm(formula = SO2 ~ Reactivacion_Comercial + Supermercado_Farmacia + 
##     Parques_Centros + Estaciones_Transito + Lugares_Trabajo + 
##     Residencia, data = datos)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -0.7163 -0.1199 -0.0009  0.1168  0.7773 
## 
## Coefficients:
##                         Estimate Std. Error t value Pr(>|t|)    
## (Intercept)             0.090469   0.027457   3.295  0.00106 ** 
## Reactivacion_Comercial  0.015459   0.002329   6.638 9.36e-11 ***
## Supermercado_Farmacia   0.003807   0.001791   2.126  0.03405 *  
## Parques_Centros        -0.020616   0.001226 -16.811  < 2e-16 ***
## Estaciones_Transito    -0.001840   0.001605  -1.146  0.25226    
## Lugares_Trabajo        -0.011906   0.001136 -10.482  < 2e-16 ***
## Residencia             -0.036921   0.004868  -7.584 2.00e-13 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.1879 on 440 degrees of freedom
## Multiple R-squared:  0.5661, Adjusted R-squared:  0.5602 
## F-statistic: 95.68 on 6 and 440 DF,  p-value: < 2.2e-16

El modelo con todas las variables introducidas como predictores tiene un R2 alta (0.5661), es capaz de explicar el 56.61% de la variabilidad observada en el Dióxido de Azufre (SO2).

Seleccionando los mejores predictores

Utilizaremos el modelo Akaike para realizar este seleccionado, el criterio de información de Akaike (AIC) es una medida de la calidad relativa de un modelo estadístico, para un conjunto dado de datos. Como tal, el AIC proporciona un medio para la selección del modelo. AIC maneja un trade-off entre la bondad de ajuste del modelo y la complejidad del modelo. Se basa en la entropía de información: se ofrece una estimación relativa de la información perdida cuando se utiliza un modelo determinado para representar el proceso que genera los datos. AIC no proporciona una prueba de un modelo en el sentido de probar una hipótesis nula, es decir AIC no puede decir nada acerca de la calidad del modelo en un sentido absoluto. Si todos los modelos candidatos encajan mal, AIC no dará ningún aviso de ello.

step(object = modelo2, direction="both", trace = 1)
## Start:  AIC=-1487.46
## SO2 ~ Reactivacion_Comercial + Supermercado_Farmacia + Parques_Centros + 
##     Estaciones_Transito + Lugares_Trabajo + Residencia
## 
##                          Df Sum of Sq    RSS     AIC
## - Estaciones_Transito     1    0.0464 15.589 -1488.1
## <none>                                15.543 -1487.5
## - Supermercado_Farmacia   1    0.1597 15.703 -1484.9
## - Reactivacion_Comercial  1    1.5567 17.099 -1446.8
## - Residencia              1    2.0320 17.575 -1434.5
## - Lugares_Trabajo         1    3.8814 19.424 -1389.8
## - Parques_Centros         1    9.9827 25.526 -1267.7
## 
## Step:  AIC=-1488.12
## SO2 ~ Reactivacion_Comercial + Supermercado_Farmacia + Parques_Centros + 
##     Lugares_Trabajo + Residencia
## 
##                          Df Sum of Sq    RSS     AIC
## <none>                                15.589 -1488.1
## + Estaciones_Transito     1    0.0464 15.543 -1487.5
## - Supermercado_Farmacia   1    0.1245 15.714 -1486.6
## - Reactivacion_Comercial  1    1.9777 17.567 -1436.7
## - Residencia              1    2.0131 17.602 -1435.8
## - Lugares_Trabajo         1    3.8591 19.448 -1391.3
## - Parques_Centros         1    9.9995 25.589 -1268.6
## 
## Call:
## lm(formula = SO2 ~ Reactivacion_Comercial + Supermercado_Farmacia + 
##     Parques_Centros + Lugares_Trabajo + Residencia, data = datos)
## 
## Coefficients:
##            (Intercept)  Reactivacion_Comercial   Supermercado_Farmacia  
##               0.091438                0.013836                0.003223  
##        Parques_Centros         Lugares_Trabajo              Residencia  
##              -0.020632               -0.011663               -0.036727

Según la llamada final de este proceso (AIC) tenemos que el mejor modelo es al anteriormente utilizado:

modelo3 <- (lm(formula = SO2 ~ Reactivacion_Comercial + Supermercado_Farmacia + Parques_Centros + Lugares_Trabajo + Residencia, data = datos))
summary(modelo3)
## 
## Call:
## lm(formula = SO2 ~ Reactivacion_Comercial + Supermercado_Farmacia + 
##     Parques_Centros + Lugares_Trabajo + Residencia, data = datos)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.75212 -0.12115  0.00057  0.11759  0.75632 
## 
## Coefficients:
##                         Estimate Std. Error t value Pr(>|t|)    
## (Intercept)             0.091438   0.027454   3.331 0.000939 ***
## Reactivacion_Comercial  0.013836   0.001850   7.480 4.06e-13 ***
## Supermercado_Farmacia   0.003223   0.001717   1.877 0.061187 .  
## Parques_Centros        -0.020632   0.001227 -16.819  < 2e-16 ***
## Lugares_Trabajo        -0.011663   0.001116 -10.448  < 2e-16 ***
## Residencia             -0.036727   0.004867  -7.546 2.59e-13 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.188 on 441 degrees of freedom
## Multiple R-squared:  0.5648, Adjusted R-squared:  0.5599 
## F-statistic: 114.5 on 5 and 441 DF,  p-value: < 2.2e-16

Es recomendable mostrar el intervalo de confianza para cada uno de los coeficientes parciales de regresión:

confint(lm(formula = SO2 ~ Reactivacion_Comercial + Supermercado_Farmacia + Parques_Centros + Lugares_Trabajo + Residencia, data = datos))
##                                2.5 %       97.5 %
## (Intercept)             0.0374815632  0.145394155
## Reactivacion_Comercial  0.0102008433  0.017472070
## Supermercado_Farmacia  -0.0001518597  0.006598654
## Parques_Centros        -0.0230430192 -0.018221112
## Lugares_Trabajo        -0.0138566915 -0.009469078
## Residencia             -0.0462915208 -0.027161549

Cada una de las pendientes de un modelo de regresión lineal múltiple (coeficientes parciales de regresión de los predictores) se define del siguiente modo: Si el resto de variables se mantienen constantes, por cada unidad que aumenta el predictor en cuestión, la variable (Y) varía en promedio tantas unidades como indica la pendiente.

Validación de condiciones para la regresión múltiple lineal.

Relación lineal entre los predictores numéricos y la variable respuesta:

Esta condición se puede validar bien mediante diagramas de dispersión entre la variable dependiente y cada uno de los predictores (como se ha hecho en el análisis preliminar) o con diagramas de dispersión entre cada uno de los predictores y los residuos del modelo. Si la relación es lineal, los residuos deben de distribuirse aleatoriamente en torno a 0 con una variabilidad constante a lo largo del eje X. Esta última opción suele ser más indicada ya que permite identificar posibles datos atípicos.

plot1 <- ggplot(data = datos, aes(O3, modelo$residuals)) +
    geom_point() + geom_smooth(color = "firebrick") + geom_hline(yintercept = 0) +
    theme_bw()
plot2 <- ggplot(data = datos, aes(PM10, modelo$residuals)) +
    geom_point() + geom_smooth(color = "firebrick") + geom_hline(yintercept = 0) +
    theme_bw()
plot3 <- ggplot(data = datos, aes(Reactivacion_Comercial, modelo$residuals)) +
    geom_point() + geom_smooth(color = "firebrick") + geom_hline(yintercept = 0) +
    theme_bw()
plot4 <- ggplot(data = datos, aes(Supermercado_Farmacia, modelo$residuals)) +
    geom_point() + geom_smooth(color = "firebrick") + geom_hline(yintercept = 0) +
    theme_bw()
plot5 <- ggplot(data = datos, aes(Parques_Centros, modelo$residuals)) +
    geom_point() + geom_smooth(color = "firebrick") + geom_hline(yintercept = 0) +
    theme_bw()
plot6 <- ggplot(data = datos, aes(Lugares_Trabajo, modelo$residuals)) +
    geom_point() + geom_smooth(color = "firebrick") + geom_hline(yintercept = 0) +
    theme_bw()
plot7 <- ggplot(data = datos, aes(Residencia, modelo$residuals)) +
    geom_point() + geom_smooth(color = "firebrick") + geom_hline(yintercept = 0) +
    theme_bw()
grid.arrange(plot1, plot2, plot3, plot4, plot5, plot6, plot7)
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

Se cumple la linealidad para todos los predictores.

Distribución normal de los residuos:

qqnorm(modelo3$residuals)
qqline(modelo3$residuals)

  • Prueba de shapiro wilk para determinar normalidad
shapiro.test(modelo3$residuals)
## 
##  Shapiro-Wilk normality test
## 
## data:  modelo3$residuals
## W = 0.99415, p-value = 0.084

Tanto el análisis gráfico como es test de hipótesis confirman la normalidad.

Variabilidad constante de los residuos (homocedasticidad): Al representar los residuos frente a los valores ajustados por el modelo, los primeros se tienen que distribuir de forma aleatoria en torno a cero, manteniendo aproximadamente la misma variabilidad a lo largo del eje X. Si se observa algún patrón específico, por ejemplo forma cónica o mayor dispersión en los extremos, significa que la variabilidad es dependiente del valor ajustado y por lo tanto no hay homocedasticidad.

ggplot(data = datos, aes(modelo3$fitted.values, modelo3$residuals)) +
geom_point() +
geom_smooth(color = "firebrick", se = FALSE) +
geom_hline(yintercept = 0) +
theme_bw()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

Modelo de regresión lineal múltiple

bptest(modelo3)
## 
##  studentized Breusch-Pagan test
## 
## data:  modelo3
## BP = 9.1954, df = 5, p-value = 0.1015

Uno de los supuestos clave de la regresión lineal es que los residuos se distribuyen con la misma varianza en cada nivel de la variable predictora. Esta suposición se conoce como homocedasticidad. Cuando se viola este supuesto, decimos que la heterocedasticidad está presente en los residuos. Cuando esto ocurre, los resultados de la regresión se vuelven poco fiables. Una forma de detectar visualmente si hay heterocedasticidad es crear un gráfico de los residuos frente a los valores ajustados del modelo de regresión. Si los residuos se dispersan más a valores más altos en la gráfica, esto es un signo revelador de que existe heterocedast

La prueba de Breusch-Pagan

Matriz de correlación entre predictores para el modelo

corrplot(cor(dplyr::select(datos, Residencia, Reactivacion_Comercial,Supermercado_Farmacia,Lugares_Trabajo)),
         method = "number", tl.col = "black")

  • Análisis de inflación de varianza
vif(modelo3)
## Reactivacion_Comercial  Supermercado_Farmacia        Parques_Centros 
##              12.488933               4.479966               3.270771 
##        Lugares_Trabajo             Residencia 
##               4.825273              10.974351

Hay predictores que muestren una correlación lineal muy alta ni inflación de varianza, a excepción de los de reactivación comercial y residencia, que son más altos que las otras variables.

Autocorrelación

dwt(modelo, alternative = "two.sided")
##  lag Autocorrelation D-W Statistic p-value
##    1       0.9226244      0.140924       0
##  Alternative hypothesis: rho != 0

No existe una condición establecida para el número mínimo de observaciones, pero para prevenir que una variable resulte muy influyente cuando realmente no lo es, se recomienda que la cantidad de observaciones sea entre 10 y 20 veces el número de predictores.

Identificación de los posibles valores atípicos o influyentes

datos$studentized_residual <- rstudent(modelo3)
ggplot(data = datos, aes(x = predict(modelo3), y = abs(studentized_residual))) +
geom_hline(yintercept = 3, color = "grey", linetype = "dashed") +
# se identifican en rojo observaciones con residuos estandarizados absolutos > 3
geom_point(aes(color = ifelse(abs(studentized_residual) > 3, 'red', 'black'))) +
scale_color_identity() +
labs(title = "Distribución de los residuos studentized",
     x = "predicción modelo") + 
theme_bw() + theme(plot.title = element_text(hjust = 0.5))

¿Existen observaciones bastantes disonantes en el modelo?

which(abs(datos$studentized_residual) > 3)
## [1]  27  33 315

Cuantificación de las influencias de los predictores

summary(influence.measures(modelo3))
## Potentially influential observations of
##   lm(formula = SO2 ~ Reactivacion_Comercial + Supermercado_Farmacia +      Parques_Centros + Lugares_Trabajo + Residencia, data = datos) :
## 
##     dfb.1_ dfb.Rc_C dfb.Sp_F dfb.Pr_C dfb.Lg_T dfb.Rsdn dffit   cov.r   cook.d
## 4   -0.01   0.00     0.01    -0.01     0.00     0.00    -0.01    1.05_*  0.00 
## 6    0.05  -0.01    -0.01     0.04     0.01     0.00     0.05    1.05_*  0.00 
## 7    0.04   0.00    -0.02     0.02     0.01     0.00     0.04    1.04_*  0.00 
## 10  -0.06   0.01     0.02    -0.05    -0.01     0.00    -0.06    1.05_*  0.00 
## 11   0.02   0.00    -0.01     0.01     0.00     0.00     0.02    1.06_*  0.00 
## 21  -0.06   0.00     0.01    -0.04    -0.02    -0.01    -0.06    1.04_*  0.00 
## 23  -0.33  -0.22     0.22    -0.03    -0.13    -0.11    -0.38_*  0.93_*  0.02 
## 26  -0.36  -0.08     0.16    -0.12    -0.06     0.00    -0.37_*  0.94_*  0.02 
## 27  -0.32  -0.28     0.28     0.15    -0.06    -0.02    -0.47_*  0.82_*  0.04 
## 28  -0.28   0.03    -0.05    -0.20    -0.13    -0.07    -0.36_*  0.97    0.02 
## 29  -0.27   0.10    -0.09    -0.23    -0.05     0.01    -0.35_*  0.97    0.02 
## 31  -0.10   0.29    -0.33    -0.34     0.27     0.15    -0.60_*  0.99    0.06 
## 32  -0.08   0.06    -0.16    -0.09    -0.03    -0.04    -0.26    0.95_*  0.01 
## 33   0.01  -0.31     0.17     0.26    -0.07    -0.16    -0.36_*  0.89_*  0.02 
## 58   0.10   0.20     0.00     0.04     0.19     0.29    -0.39_*  1.00    0.02 
## 74  -0.01   0.12     0.06    -0.02     0.24     0.25    -0.29    1.03    0.01 
## 128  0.00   0.00     0.00     0.00     0.00     0.00     0.00    1.05_*  0.00 
## 159  0.02   0.00    -0.01     0.06     0.03     0.07     0.18    0.94_*  0.01 
## 296  0.00   0.19    -0.01    -0.24     0.27     0.20     0.42_*  0.93_*  0.03 
## 313  0.04   0.00    -0.10     0.03     0.00    -0.04    -0.14    1.07_*  0.00 
## 314 -0.31  -0.40     0.75     0.05    -0.23    -0.13     0.83_*  1.02    0.11 
## 315  0.05  -0.84    -0.12     0.38    -1.19_*  -1.29_*   1.48_*  0.88_*  0.35 
## 316 -0.01   0.03    -0.02    -0.06     0.03     0.01     0.13    0.95_*  0.00 
## 321  0.08   0.09    -0.17    -0.01     0.04     0.02    -0.18    1.12_*  0.01 
## 322  0.03  -0.32    -0.08     0.16    -0.49    -0.52     0.62_*  1.06_*  0.06 
## 328 -0.02   0.11    -0.03    -0.10     0.03     0.08     0.17    0.96_*  0.00 
## 329 -0.02   0.15    -0.03    -0.11     0.14     0.18     0.24    0.94_*  0.01 
## 341  0.02  -0.28     0.26     0.28     0.05    -0.03    -0.37_*  1.01    0.02 
## 412  0.00  -0.07     0.08     0.04    -0.08    -0.07     0.13    1.08_*  0.00 
## 413  0.02  -0.35     0.25     0.27    -0.29    -0.27     0.47_*  1.05_*  0.04 
## 414  0.01  -0.09     0.04     0.05    -0.10    -0.12     0.13    1.10_*  0.00 
## 415  0.01  -0.02     0.00     0.00    -0.02    -0.03     0.04    1.06_*  0.00 
##     hat    
## 4    0.03  
## 6    0.04  
## 7    0.03  
## 10   0.03  
## 11   0.04_*
## 21   0.03  
## 23   0.02  
## 26   0.02  
## 27   0.01  
## 28   0.02  
## 29   0.02  
## 31   0.05_*
## 32   0.01  
## 33   0.01  
## 58   0.04  
## 74   0.04_*
## 128  0.03  
## 159  0.01  
## 296  0.02  
## 313  0.06_*
## 314  0.09_*
## 315  0.10_*
## 316  0.00  
## 321  0.10_*
## 322  0.09_*
## 328  0.01  
## 329  0.01  
## 341  0.04  
## 412  0.06_*
## 413  0.07_*
## 414  0.08_*
## 415  0.05_*

Descarga este código

xfun::embed_file("A7U1.Rmd")

Download A7U1.Rmd

xfun::embed_file("Concentracion.xlsx")

Download Concentracion.xlsx