#install.packages("ggplot2")
#install.packages("tidyverse")
#install.packages("moments")
suppressMessages(suppressWarnings(library(tidyverse)))
suppressMessages(suppressWarnings(library(moments)))
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
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)
# 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)
#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.