#install.packages("ggplot2")
#install.packages("tidyverse")
#install.packages("moments")
suppressMessages(suppressWarnings(library(tidyverse)))
suppressMessages(suppressWarnings(library(moments)))

1 Covarianza

A continuación, se presentan algunos ejemplos de datos bivariados cuantitativos que presentan diferentes relaciones.

# Simular algunos datos:
set.seed(123)
x <- 1:100 #x=1, ... , 100
y <- 2* x + rnorm(100, 0, 12) #Relación dependencia lineal con x (direct)

set.seed(123)
a <- 1:100 #x=1, ... , 100
b <- -1.5* x + rnorm(100, 0, 18) #Relación dependencia lineal con x (inver)

set.seed(123)
l <- 1:100 #x=1, ... , 100
m <- rnorm(100, 0, 12) #No hay relación


set.seed(123) 
j <- seq(0,10, length.out = 500)
k <- sin(j) + cos(4 * j) + rnorm(500, sd = 0.2) #Relación no lineal


lineal <- data.frame(x = x, y = y)
inver  <- data.frame(x = a, y = b)
disper <- data.frame(x = l, y = m)
otra   <- data.frame(x = j, y = k)
# Configurar la ventana de gráficos 
par(mfrow = c(2, 2), mar = c(5, 5, 2, 2))

#Los cuatro gráficos de dispersión 
plot(lineal$x, lineal$y, xlab = "X", ylab = "Y", col = "salmon", pch = 19)
plot(inver$x, inver$y, xlab = "X", ylab = "Y", col = "red", pch = 19)
plot(disper$x, disper$y, xlab = "X", ylab = "Y", col = "pink", pch = 19)
plot(otra$x, otra$y, xlab = "X", ylab = "Y", col = "purple", pch = 19)

Calcular la covarianza para el prime conjunto de datos

#Para los datos lineal

covlineal <- sum((x - mean(x))*(y-mean(y)))/((length(x)-1))
covlineal
## [1] 1708.695

Calcular la covarianza de cada conjunto de datos:

#Calcular la covarianza en cada conjunto de datos:

cov_lineal <- cov(lineal$x, lineal$y)
cov_inver <- cov(inver$x, inver$y)
cov_disper <- cov(disper$x, disper$y)
cov_otra <- cov(otra$x, otra$y)


cbind(cov_lineal, cov_inver, cov_disper, cov_otra)
##      cov_lineal cov_inver cov_disper    cov_otra
## [1,]   1708.695 -1224.457   25.36195 -0.04686041

2 Coeficiente de correlación

Empleando los datos previos el coeficiente de correlación para cada par de variables.

#Primero manualmente, para los datos inver

corinver <- cov_inver / ((sd(inver$x))*(sd(inver$y)))
corinver
## [1] -0.9322666
cor_lineal <- cor(lineal$x, lineal$y)
cor_inver <- cor(inver$x, inver$y)
cor_disper <- cor(disper$x, disper$y)
cor_otra <- cor(otra$x, otra$y)

cbind(cor_lineal, cor_inver, cor_disper, cor_otra)
##      cor_lineal  cor_inver cor_disper    cor_otra
## [1,]  0.9832462 -0.9322666 0.07980832 -0.01672897
#Para los ejercicios que están en la presentación

X <- c(2, 7, 8, 1, 4, 5, 10, 12, 16, 20, 22)
Y <- c(12, 4, 10, 11, 15, 2, 3, 5, 3, 2, 1)

cor(X, Y)
## [1] -0.7192171
plot(X,Y, xlab = "X", ylab = "Y", col = "brown", pch = 19)

3 Boxplot

# Boxplot - Primer ejemplo

data.1 <- data.frame(dat = c(1,4,3, 6, 8, 10, 12, 13, 15,20,28))


# función básica
boxplot(data.1$dat,
        main = "Boxplot",
        xlab = "Valores",
        col = "lightblue",
        border = "red",
        horizontal = TRUE) #si se quiere vertical eliminar este argumento

#Boxplot - Segundo ejemplo

data.2 <- data.frame(dat = c(1,4,2,2,3,3,6,7,13,15,25))

# función básica
boxplot(data.2$dat,
        main = "Boxplot",
        xlab = "Valores",
        col = "pink",
        border = "red",
        horizontal = TRUE) #si se quiere vertical eliminar este argumento

También se pueden realizar diagramas de caja para datos que están agrupados por categorías.

A <- c(1, 3, 5, 7, 9, 11, 20)
B <- c(2, 4, 6, 8, 10, 14, 15)

data <- stack(data.frame(A = A, B = B))


boxplot(values ~ ind, data = data,
        main = "Boxplot de Valores por Categoría",
        xlab = "Valor",
        ylab = "Categoría",
        col = c("lightblue", "lightgreen"),
        border = "darkblue",
        horizontal=T)

4 Ejemplo: Datos Gapminder

#install.packages("gapminder")
#install.packages("GGally")
library(gapminder)
library(ggplot2)
library(GGally) 
## Registered S3 method overwritten by 'GGally':
##   method from   
##   +.gg   ggplot2
data("gapminder") #cargamos los datos
head(gapminder)
## # A tibble: 6 × 6
##   country     continent  year lifeExp      pop gdpPercap
##   <fct>       <fct>     <int>   <dbl>    <int>     <dbl>
## 1 Afghanistan Asia       1952    28.8  8425333      779.
## 2 Afghanistan Asia       1957    30.3  9240934      821.
## 3 Afghanistan Asia       1962    32.0 10267083      853.
## 4 Afghanistan Asia       1967    34.0 11537966      836.
## 5 Afghanistan Asia       1972    36.1 13079460      740.
## 6 Afghanistan Asia       1977    38.4 14880372      786.
summary(gapminder)
##         country        continent        year         lifeExp     
##  Afghanistan:  12   Africa  :624   Min.   :1952   Min.   :23.60  
##  Albania    :  12   Americas:300   1st Qu.:1966   1st Qu.:48.20  
##  Algeria    :  12   Asia    :396   Median :1980   Median :60.71  
##  Angola     :  12   Europe  :360   Mean   :1980   Mean   :59.47  
##  Argentina  :  12   Oceania : 24   3rd Qu.:1993   3rd Qu.:70.85  
##  Australia  :  12                  Max.   :2007   Max.   :82.60  
##  (Other)    :1632                                                
##       pop              gdpPercap       
##  Min.   :6.001e+04   Min.   :   241.2  
##  1st Qu.:2.794e+06   1st Qu.:  1202.1  
##  Median :7.024e+06   Median :  3531.8  
##  Mean   :2.960e+07   Mean   :  7215.3  
##  3rd Qu.:1.959e+07   3rd Qu.:  9325.5  
##  Max.   :1.319e+09   Max.   :113523.1  
## 
gap <- gapminder[gapminder$year==2007,] #Filtramos por el año 2007
summary(gap)
##         country       continent       year         lifeExp     
##  Afghanistan:  1   Africa  :52   Min.   :2007   Min.   :39.61  
##  Albania    :  1   Americas:25   1st Qu.:2007   1st Qu.:57.16  
##  Algeria    :  1   Asia    :33   Median :2007   Median :71.94  
##  Angola     :  1   Europe  :30   Mean   :2007   Mean   :67.01  
##  Argentina  :  1   Oceania : 2   3rd Qu.:2007   3rd Qu.:76.41  
##  Australia  :  1                 Max.   :2007   Max.   :82.60  
##  (Other)    :136                                               
##       pop              gdpPercap      
##  Min.   :1.996e+05   Min.   :  277.6  
##  1st Qu.:4.508e+06   1st Qu.: 1624.8  
##  Median :1.052e+07   Median : 6124.4  
##  Mean   :4.402e+07   Mean   :11680.1  
##  3rd Qu.:3.121e+07   3rd Qu.:18008.8  
##  Max.   :1.319e+09   Max.   :49357.2  
## 
hist(gap$gdpPercap, xlab = "GDP per cápita (USD)", ylab = "Frecuencia absoluta", col = "pink",
     main = "Histograma del GDP per cápita para 2007")

#Si quiere poner la frecuencia relativa agregue probability=T, en este caso,
#las frecuencias relativas son muy pequeñas y por eso no las puse
boxplot(gap$gdpPercap,
        main = "Boxplot - GDP per cápita para 2007",
        xlab = "GDP per cápita",
        col = "pink",
        border = "red",
        horizontal = TRUE) #si se quiere vertical eliminar este argumento

skewness(gap$gdpPercap)
## [1] 1.211228

Este es un claro ejemplo en el cual se tiene asimetría positiva, dado que, la mayoría de los países cuentan con un GDP per cápita bajo y son pocos los países, cuyo GDP per cápita es alto y por ello, son considerados datos atípicos. Adicionalmente, tanto en el boxplot, como en el histograma podemos identificar que se tiene este tipo de asimetría y el coeficiente de asimetría estandarizado de Fisher también comprueba esto ya que da 1.2112>0.

ggpairs(gap, columns = c("lifeExp", "pop", "gdpPercap"),
        lower = list(continuous = "points"),
        upper = list(continuous = "cor"),
        diag = list(continuous = "densityDiag"))

Al graficar el diagrama de dispersión entre cada par de variable se puede ver la única posible relación está entre el GDP per cápita y la esperanza de vida (en años), además, el coeficiente de correlación lineal de Person así lo indica.

hist(gap$lifeExp, xlab = "Esperanza de vida (años)", ylab = "Frecuencia absoluta", col = "coral",
     main = "Histograma de la esperanza de vida para 2007", xlim=c(30,90))

boxplot(gap$lifeExp,
        main = "Boxplot - Esperanza de vida (2007)",
        xlab = "Esperanza de vida (años)",
        col = "coral",
        border = "blue",
        horizontal = TRUE) #si se quiere vertical eliminar este argumento

skewness(gap$lifeExp)
## [1] -0.6814798

Para la variable relacionada con la esperanza de vida en año para cada país, se observa tanto en el boxplot como en el histograma que hay asimetría negativa, pues, la cola de la izquierda es más “larga” que la cola derecha; el coeficiente de asimetría estandarizado de Fisher comprueba esto -0.6814<0. Esto indica que la esperanza de vida en la mayoría de países es alta y son pocos países en donde es baja.