Instrucciones: Grupo 4: (CCA)

Trabajaran con la base de datos ‘Economia’. Esta base de datos contiene dos grupos de preguntas medidas en 210 países. Estos dos grupos son:

Población (2:4) PIB (5:7)

Cargar base de datos

library(readr)
Economias <- read_csv("C:/Users/Nieves M/Documents/ESTA55503/Datos-Tareas/Economias.csv")

head(Economias)
## # A tibble: 6 × 7
##   Country        `Population (millions)` Surface_area Population_density
##   <chr>                            <dbl>        <dbl>              <dbl>
## 1 Afghanistan                    40.1          653.                 59.8
## 2 Albania                         2.81          28.8               104. 
## 3 Algeria                        44.2         2382.                 18.2
## 4 American Samoa                  0.0450         0.2               231. 
## 5 Andorra                         0.0790         0.47              165. 
## 6 Angola                         34.5         1247.                 26.8
## # ℹ 3 more variables: Gross_national_income <dbl>,
## #   Purchasing_power_parity <dbl>, Gross_domestic_product <dbl>

Eliminar datos faltantes

Economias <- na.omit(Economias)

Grupos

#Conjunto X
POB  <- scale(Economias[,(2:4)])
#Conjunto Y
PIB<- scale(Economias[,(5:7)])

Matriz de correlacion

library(CCA)
correlaciones <- matcor(POB,PIB)$XYcor
correlaciones
##                         Population (millions) Surface_area Population_density
## Population (millions)              1.00000000   0.92466063        -0.03012874
## Surface_area                       0.92466063   1.00000000        -0.04102806
## Population_density                -0.03012874  -0.04102806         1.00000000
## Gross_national_income              0.83422831   0.90818284        -0.03219303
## Purchasing_power_parity            0.91387956   0.95037080        -0.03251747
## Gross_domestic_product             0.03846137   0.03045916         0.20903568
##                         Gross_national_income Purchasing_power_parity
## Population (millions)              0.83422831              0.91387956
## Surface_area                       0.90818284              0.95037080
## Population_density                -0.03219303             -0.03251747
## Gross_national_income              1.00000000              0.98302932
## Purchasing_power_parity            0.98302932              1.00000000
## Gross_domestic_product             0.04946633              0.05219634
##                         Gross_domestic_product
## Population (millions)               0.03846137
## Surface_area                        0.03045916
## Population_density                  0.20903568
## Gross_national_income               0.04946633
## Purchasing_power_parity             0.05219634
## Gross_domestic_product              1.00000000

Se observa que las variables ‘Gross national income’ y ‘Purchasing power parity’ tienen alta correlación positiva con ‘Population’ y ‘Surface area’, mientras que ‘Gross domestic product’ muestra correlaciones debiles.

Reduccion de variables para evitar multicolinealidad

POB2<- na.omit(POB[,-2]) #Se elimina 'Surface area'
PIB2<- na.omit(PIB[,-2]) #Se elimina 'Purchase power parity'

Pruebas de normalidad

Conjunto X

library(MVN)

# Normalidad univariada para POB2
mvn(data = as.data.frame(POB2), univariateTest = "SW")$univariateNormality
##           Test              Variable Statistic   p value Normality
## 1 Shapiro-Wilk Population (millions)    0.2223  <0.001      NO    
## 2 Shapiro-Wilk  Population_density      0.1602  <0.001      NO
# Normal multivariada para POB2
mvn(data = as.data.frame(POB2), mvnTest = "hz")$multivariateNormality
##            Test       HZ p value MVN
## 1 Henze-Zirkler 100.0889       0  NO

Conjunto Y

# Normalidad univariada para Y
mvn(data = as.data.frame(PIB2), univariateTest = "SW")$univariateNormality
##           Test               Variable Statistic   p value Normality
## 1 Shapiro-Wilk Gross_national_income     0.2082  <0.001      NO    
## 2 Shapiro-Wilk Gross_domestic_product    0.8784  <0.001      NO
# Normal multivariada para Y
mvn(data = as.data.frame(PIB2), mvnTest = "hz")$multivariateNormality
##            Test       HZ p value MVN
## 1 Henze-Zirkler 36.04869       0  NO

Tanto el POB2 como el PIB2, no cumplen con la normalidad univariada ni multivariada.

Transfromaciones

#Transformacion para POB2
library(bestNormalize)
BN1<-bestNormalize(POB2[,1])
BN2<-bestNormalize(POB2[,2])

#Transformacion para PIB2
BNP1<-bestNormalize(PIB2[,1])
BNP2<-bestNormalize(PIB2[,2])

POBT<-matrix(c(BN1$x.t,BN2$x.t), ncol=2)
PIBT<-matrix(c(BNP1$x.t,BNP2$x.t), ncol=2)

Verificar normalidad

Conjunto X

#Normalidad univariada
mvn(data = as.data.frame(POBT), univariateTest = "SW")$univariateNormality
##           Test  Variable Statistic   p value Normality
## 1 Shapiro-Wilk    V1        0.9491  <0.001      NO    
## 2 Shapiro-Wilk    V2        0.9800  0.0053      NO
#Normalidad multivariada
mvn(data = as.data.frame(POBT), mvnTest = "hz")$multivariateNormality
##            Test      HZ     p value MVN
## 1 Henze-Zirkler 1.40232 0.005057246  NO

Conjunto Y

#Normalidad univariada
mvn(data = as.data.frame(PIBT), univariateTest = "SW")$univariateNormality
##           Test  Variable Statistic   p value Normality
## 1 Shapiro-Wilk    V1        0.9998    1.0000    YES   
## 2 Shapiro-Wilk    V2        0.9886    0.1015    YES
#Normal multivariada
mvn(data = as.data.frame(PIBT), mvnTest = "hz")$multivariateNormality
##            Test       HZ      p value MVN
## 1 Henze-Zirkler 1.701218 0.0007595286  NO

Luego de las transformaciones, las variables de POBT alcanzaron normalidad univariada y multivaraiada. Por otro lado, las variables de PIBT solo alcanzaron normalidad univariada.En una investigación real, al los dos conjuntos no ser normales, no se pudieran realizar estas pruebas pero para propositos de esta tarea asumimos que los dos conjuntos sí la alcanzaron

Vectores canonicos

cca1 <- cc(POBT,PIBT)

cca1[3:4]
## $xcoef
##              [,1]       [,2]
## [1,] -1.000054572 0.09265412
## [2,] -0.000589675 1.00433739
## 
## $ycoef
##            [,1]      [,2]
## [1,] -1.0340566 -0.042816
## [2,]  0.2222661  1.010060
#Correlaciones canonicas
cor_can <- cca1$cor

Prueba de significancia

library(CCP)

p.values <- p.asym(cca1$cor, nrow(POBT), ncol(POBT), ncol(PIBT))
## Wilks' Lambda, using F-approximation (Rao's F):
##               stat    approx df1 df2    p.value
## 1 to 2:  0.2720325 91.729807   4 400 0.00000000
## 2 to 2:  0.9824385  3.592959   1 201 0.05945977

Obteniendo un p-valor menor de 0.001 en el primer par indica una relacion significativa entre los conjuntos ‘X’ y ‘Y’. Por otro lado, en el segundo par de obtuvo p-valor mayor de 0.05, por lo que no es significativo.

Correlaciones canónicas:

cca1$cor
## [1] 0.8503557 0.1325198
cca1$names$Xnames <- c("POB", "DENSITY") 
cca1$names$Ynames <- c("GNI", "GDP") 

Interpretaciones de las correlaciones canónicas:

(U1,V1): correlación fuerte (0.866). (U2,V2): correlación débil (0.135).

El análisis sugiere que el primer par de variables canónicas (U1,V1) tiene una correlación fuerte (0.866), y sí alcanza significancia estadística (con un p-value cercano a 0). Los otros pares muestran correlaciones débiles y no son significativos. Este proceso nos demuestra que nos deberíamos enfocar en el primer par de variables canónicas debido a que estas explican, significativamente el conjunto de variables de población y del PIB.

Grafica de (U1,V1)

plt.cc(cca1, var.label = TRUE, type = "b")

Existe una relación fuerte entre combinaciones lineales que involucran, número de la Población, gross national income y la densidad de la población, por lo que podría ser relevante para explicar patrones entre la población y su producto interno bruto en la economía de un país.