1 Objetivo

Calcular covarianza y correlación así como visualizar la dispersión entre dos variables para su adecuada y correcta interpretración.

2 Descripción

Se cargan o se construyen datos y se determinan covarizna, correlación y diagrama de dispersión

Antes se cargan las librerías a utilizar

2.1 Cargar librerías

Se requiere install.packages() para cada librería a utilizar

library(ggplot2)
library(readr)
library(dplyr)
library(knitr)
library(PerformanceAnalytics) # Para coorelaciones gráficas

2.2 Cargar funciones preparadas

source("https://raw.githubusercontent.com/rpizarrog/Trabajos-en-R-AD2021/main/funciones/f.diagramas.graficos.r", encoding = "UTF-8")

3 Marco teórico

Se necesitan datos para calcular la covariaza, la correlación y mostrar el diagrama de dispersión.

3.1 Datos

Se tienen unos datos de interés de una tienda que tiene vendedores y hacen ventas; los vendedores hacen llamadas a prospectos y clientes y en razón de ello tal vez realizan cierta cantidad de ventas de cada uno de ellos.

Las variables de interés son llamadas que hacen los vendedores y la cantidad de ventas.

vendedores <- paste("V",1:15, sep="")
llamadas <- c(96, 40, 104, 128, 164, 76, 72, 80 , 36, 84, 180, 132, 120, 44, 84) 
ventas <- c(41, 41, 51, 60, 61, 29, 39, 50, 28, 43, 70, 56, 45, 31, 30)
datos <- data.frame(vendedores, llamadas, ventas)
datos
##    vendedores llamadas ventas
## 1          V1       96     41
## 2          V2       40     41
## 3          V3      104     51
## 4          V4      128     60
## 5          V5      164     61
## 6          V6       76     29
## 7          V7       72     39
## 8          V8       80     50
## 9          V9       36     28
## 10        V10       84     43
## 11        V11      180     70
## 12        V12      132     56
## 13        V13      120     45
## 14        V14       44     31
## 15        V15       84     30

3.2 Covarianza

La covarianza se establece como una medida descriptiva de la asociación entre dos variables \(x\) e \(y\). [@anderson2008].

\[ S_{xy} = \frac{\sum(x_i - \bar{x}) \cdot (y_i - \bar{y})}{n - 1} \]

Se necesitan dos variable de interés:

  • Se requiere la media de la variable \(x\)

  • Se requiere la media de la variable \(y\)

  • Se necesita el número de observaciones del conjunto de datos.

3.2.1 Calcular la convianza

3.2.1.1 Construyendo una tabla

tabla <- data.frame(x = llamadas, y = ventas, x.med = mean(llamadas), y.med=mean(ventas))
tabla <- cbind(tabla, xi.menos.x.med = tabla$x-mean(tabla$x))
tabla <- cbind(tabla, yi.menos.y.med = tabla$y-mean(tabla$y))
tabla <- cbind(tabla, prod = tabla$xi.menos.x.med * tabla$yi.menos.y.med)
tabla <- rbind(tabla, apply(tabla, 2, sum))
tabla[nrow(tabla), c(1:6)] <- '*'
kable(tabla)
x y x.med y.med xi.menos.x.med yi.menos.y.med prod
96 41 96 45 0 -4 0
40 41 96 45 -56 -4 224
104 51 96 45 8 6 48
128 60 96 45 32 15 480
164 61 96 45 68 16 1088
76 29 96 45 -20 -16 320
72 39 96 45 -24 -6 144
80 50 96 45 -16 5 -80
36 28 96 45 -60 -17 1020
84 43 96 45 -12 -2 24
180 70 96 45 84 25 2100
132 56 96 45 36 11 396
120 45 96 45 24 0 0
44 31 96 45 -52 -14 728
84 30 96 45 -12 -15 180
* * * * * * 6672

\[ S_{xy} = \frac{\sum(x_i - \bar{x}) \cdot (y_i - \bar{y})}{n - 1} \therefore \\ covarianza = S_{xy} = \frac{6672}{n-1} = \frac{6672}{14} = 476.5714 \]

n <- nrow(datos)
numerador <- sum((datos$llamadas - mean(datos$llamadas))  * (datos$ventas - mean(datos$ventas)))
# numerador ; sum(tabla$prod)
denominador <- n - 1
covarianza <- numerador / denominador
covarianza
## [1] 476.5714

3.3 Diagrama de dispersión

El diagrama de dispersión es una gráfica que identifica la relación entre dos variables con respectos a sus medias.

Se observa el diagrama de dispersión de llamadas y ventas

f_diag.dispersion(datos = datos[,c(2,3)])

3.4 Correlación

La covarianza muestral dividida entre el producto de las desviaciones estándar de cada variable de interés identifica la correlación entre dos variables

\[ r = \frac{S_{xy}}{S_x \cdot S_y} \]

El coeficiente de correlación del producto–momento de Pearson para datos muestrales (llamado coeficiente de correlación muestral) se calcula dividiendo la covarianza muestral entre el producto de la desviación estándar muestral de \(x\) por la desviación estándar muestral de \(y\).

\[ correlación = r = \frac{covarianza}{S_x \cdot S_y} = \frac{42.7618}{42.7618\cdot12.88964}=\frac{476.5714}{551.1843}=0.8646318 \]

\[ S_{xy}\text{ es la covarianza muestral previamente calculada} \\ S_x \text{ es la desviación std. de la variable x} \\ S_y \text{ es la desviación std. de la variable y} \\ S_x\cdot S_y \text { es el producto de ambas desviaciones} \]

prod.dispersion = sd(datos$llamadas) * sd(datos$ventas)
prod.dispersion
## [1] 551.1843
r <- covarianza / prod.dispersion
r
## [1] 0.8646318

3.5 Covarianza y correlación con cov y cor

covarianza <- cov(x = datos$llamadas, y = datos$ventas, )
r <- cor(x = datos$llamadas, y = datos$ventas)
         
covarianza; r
## [1] 476.5714
## [1] 0.8646318

3.6 Correlación con chart.Correlation

Se visualiza la correlación entre dos variables de interés usando chart.Correlation de la librería PerformanceAnalytics.

chart.Correlation(datos[,2:3], histogram = TRUE)

De acuerdo a Hernández Sampiere [@hernándezsampieri2014], los valores del coeficiente de correlación de Pearson se interpreta de la siguiente manera:

  • -0.90 = Correlación negativa muy fuerte.
  • -0.75 = Correlación negativa considerable.
  • -0.50 = Correlación negativa media.
  • -0.25 = Correlación negativa débil.
  • -0.10 = Correlación negativa muy débil.
  • 0.00 = No existe correlación alguna entre las variables.
  • +0.10 = Correlación positiva muy débil.
  • +0.25 = Correlación positiva débil.
  • +0.50 = Correlación positiva media.
  • +0.75 = Correlación positiva considerable.
  • +0.90 = Correlación positiva muy fuerte.
  • +1.00 = Correlación positiva perfecta (“A mayor X, mayor Y” o “a menor X, menor Y”, de manera proporcional. Cada vez que X aumenta, Y aumenta siempre una cantidad constante).

El coeficiente de correlación va desde -1 hasta +1. Los valores cercanos a -1 o a +1 corresponden a una relación lineal fuerte. Entre más cercano a cero sea el valor de la correlación, más débil es la relación lineal[@anderson_estadistica_2008].

3.7 Regresión

Se utiliza la regresión para predecir valores de variables que se encuentra relacionadas. Vista en el siguiente caso.

4 Desarrollo

Se cargan datos de la dirección de internet registro de Jugadores de FIFA

4.1 Cargar datos

datos.bruto <- read.csv("https://raw.githubusercontent.com/rpizarrog/Trabajos-en-R-AD2021/main/datos/players_20.csv", stringsAsFactors = TRUE, encoding = "UTF-8")
str(datos.bruto)
## 'data.frame':    18278 obs. of  104 variables:
##  $ sofifa_id                 : int  158023 20801 190871 200389 183277 192985 192448 203376 177003 209331 ...
##  $ player_url                : Factor w/ 18278 levels "https://sofifa.com/player/101317/michael-ratajczak/20/159586",..: 397 5124 2497 3676 1537 2765 2674 4267 1088 5356 ...
##  $ short_name                : Factor w/ 17354 levels "<U+FFFD>. Blanaru","<U+FFFD>. Fara",..: 9773 3210 12708 7904 4505 8745 11813 16600 9783 11649 ...
##  $ long_name                 : Factor w/ 18218 levels "<U+0218>tefan Blanaru",..: 10955 4343 13608 8480 5494 10304 11733 17678 11387 13200 ...
##  $ age                       : int  32 34 27 26 28 28 27 27 33 27 ...
##  $ dob                       : Factor w/ 6142 levels "01/01/1983","01/01/1984",..: 4738 833 840 1230 1228 5551 5888 1539 1779 2945 ...
##  $ height_cm                 : int  170 187 175 188 175 181 187 193 172 175 ...
##  $ weight_kg                 : int  72 83 68 87 74 70 85 92 66 71 ...
##  $ nationality               : Factor w/ 162 levels "Afghanistan",..: 6 122 19 135 13 13 58 109 35 44 ...
##  $ club                      : Factor w/ 698 levels " SSV Jahn Regensburg",..: 228 353 463 64 507 401 228 389 507 389 ...
##  $ overall                   : int  94 93 92 91 91 91 90 90 90 90 ...
##  $ potential                 : int  94 93 92 93 91 91 93 91 90 90 ...
##  $ value_eur                 : int  95500000 58500000 105500000 77500000 90000000 90000000 67500000 78000000 45000000 80500000 ...
##  $ wage_eur                  : int  565000 405000 290000 125000 470000 370000 250000 200000 340000 240000 ...
##  $ player_positions          : Factor w/ 643 levels "CAM","CAM, CDM",..: 545 621 345 227 351 12 227 56 156 575 ...
##  $ preferred_foot            : Factor w/ 2 levels "Left","Right": 1 2 2 2 2 2 2 2 2 1 ...
##  $ international_reputation  : int  5 5 5 3 4 4 3 3 4 3 ...
##  $ weak_foot                 : int  4 4 5 3 4 5 4 3 4 3 ...
##  $ skill_moves               : int  4 5 5 1 4 4 1 2 4 4 ...
##  $ work_rate                 : Factor w/ 9 levels "High/High","High/Low",..: 8 2 3 9 3 1 9 9 1 3 ...
##  $ body_type                 : Factor w/ 10 levels "Akinfenwa","C. Ronaldo",..: 5 2 6 7 7 7 7 7 4 8 ...
##  $ real_face                 : Factor w/ 2 levels "No","Yes": 2 2 2 2 2 2 2 2 2 2 ...
##  $ release_clause_eur        : int  195800000 96500000 195200000 164700000 184500000 166500000 143400000 150200000 92300000 148900000 ...
##  $ player_tags               : Factor w/ 84 levels "","#Acrobat",..: 27 74 75 1 72 38 1 83 35 73 ...
##  $ team_position             : Factor w/ 30 levels "","CAM","CB",..: 27 16 2 7 16 21 7 10 21 27 ...
##  $ team_jersey_number        : int  10 7 10 13 7 17 1 4 10 11 ...
##  $ loaned_from               : Factor w/ 317 levels "","1. FC Heidenheim 1846",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ joined                    : Factor w/ 1761 levels "","01/01/1998",..: 73 639 245 969 88 1705 83 19 97 86 ...
##  $ contract_valid_until      : int  2021 2022 2022 2023 2024 2023 2022 2023 2020 2023 ...
##  $ nation_position           : Factor w/ 27 levels "","CAM","CB",..: 1 14 15 7 12 19 27 9 1 24 ...
##  $ nation_jersey_number      : int  NA 7 10 1 10 7 22 4 NA 10 ...
##  $ pace                      : int  87 90 91 NA 91 76 NA 77 74 93 ...
##  $ shooting                  : int  92 93 85 NA 83 86 NA 60 76 86 ...
##  $ passing                   : int  92 82 87 NA 86 92 NA 70 89 81 ...
##  $ dribbling                 : int  96 89 95 NA 94 86 NA 71 89 89 ...
##  $ defending                 : int  39 35 32 NA 35 61 NA 90 72 45 ...
##  $ physic                    : int  66 78 58 NA 66 78 NA 86 66 74 ...
##  $ gk_diving                 : int  NA NA NA 87 NA NA 88 NA NA NA ...
##  $ gk_handling               : int  NA NA NA 92 NA NA 85 NA NA NA ...
##  $ gk_kicking                : int  NA NA NA 78 NA NA 88 NA NA NA ...
##  $ gk_reflexes               : int  NA NA NA 89 NA NA 90 NA NA NA ...
##  $ gk_speed                  : int  NA NA NA 52 NA NA 45 NA NA NA ...
##  $ gk_positioning            : int  NA NA NA 90 NA NA 88 NA NA NA ...
##  $ player_traits             : Factor w/ 922 levels "","Acrobatic Clearance",..: 112 687 787 334 165 718 920 203 19 113 ...
##  $ attacking_crossing        : int  88 84 87 13 81 93 18 53 86 79 ...
##  $ attacking_finishing       : int  95 94 87 11 84 82 14 52 72 90 ...
##  $ attacking_heading_accuracy: int  70 89 62 15 61 55 11 86 55 59 ...
##  $ attacking_short_passing   : int  92 83 87 43 89 92 61 78 92 84 ...
##  $ attacking_volleys         : int  88 87 87 13 83 82 14 45 76 79 ...
##  $ skill_dribbling           : int  97 89 96 12 95 86 21 70 87 89 ...
##  $ skill_curve               : int  93 81 88 13 83 85 18 60 85 83 ...
##  $ skill_fk_accuracy         : int  94 76 87 14 79 83 12 70 78 69 ...
##  $ skill_long_passing        : int  92 77 81 40 83 91 63 81 88 75 ...
##  $ skill_ball_control        : int  96 92 95 30 94 91 30 76 92 89 ...
##  $ movement_acceleration     : int  91 89 94 43 94 77 38 74 77 94 ...
##  $ movement_sprint_speed     : int  84 91 89 60 88 76 50 79 71 92 ...
##  $ movement_agility          : int  93 87 96 67 95 78 37 61 92 91 ...
##  $ movement_reactions        : int  95 96 92 88 90 91 86 88 89 92 ...
##  $ movement_balance          : int  95 71 84 49 94 76 43 53 93 88 ...
##  $ power_shot_power          : int  86 95 80 59 82 91 66 81 79 80 ...
##  $ power_jumping             : int  68 95 61 78 56 63 79 90 68 69 ...
##  $ power_stamina             : int  75 85 81 41 84 89 35 75 85 85 ...
##  $ power_strength            : int  68 78 49 78 63 74 78 92 58 73 ...
##  $ power_long_shots          : int  94 93 84 12 80 90 10 64 82 84 ...
##  $ mentality_aggression      : int  48 63 51 34 54 76 43 82 62 63 ...
##  $ mentality_interceptions   : int  40 29 36 19 41 61 22 89 82 55 ...
##  $ mentality_positioning     : int  94 95 87 11 87 88 11 47 79 92 ...
##  $ mentality_vision          : int  94 82 90 65 89 94 70 65 91 84 ...
##  $ mentality_penalties       : int  75 85 90 11 88 79 25 62 82 77 ...
##  $ mentality_composure       : int  96 95 94 68 91 91 70 89 92 91 ...
##  $ defending_marking         : int  33 28 27 27 34 68 25 91 68 38 ...
##  $ defending_standing_tackle : int  37 32 26 12 27 58 13 92 76 43 ...
##  $ defending_sliding_tackle  : int  26 24 29 18 22 51 10 85 71 41 ...
##  $ goalkeeping_diving        : int  6 7 9 87 11 15 88 13 13 14 ...
##  $ goalkeeping_handling      : int  11 11 9 92 12 13 85 10 9 14 ...
##  $ goalkeeping_kicking       : int  15 15 15 78 6 5 88 13 7 9 ...
##  $ goalkeeping_positioning   : int  14 14 15 90 8 10 88 11 14 11 ...
##  $ goalkeeping_reflexes      : int  8 11 11 89 8 13 90 11 9 14 ...
##  $ ls                        : Factor w/ 95 levels "","30+2","31+2",..: 94 95 89 1 88 86 1 60 76 89 ...
##  $ st                        : Factor w/ 95 levels "","30+2","31+2",..: 94 95 89 1 88 86 1 60 76 89 ...
##  $ rs                        : Factor w/ 95 levels "","30+2","31+2",..: 94 95 89 1 88 86 1 60 76 89 ...
##  $ lw                        : Factor w/ 108 levels "","25+2","27+2",..: 108 106 107 1 106 104 1 64 100 105 ...
##  $ lf                        : Factor w/ 104 levels "","26+2","27+2",..: 104 103 102 1 101 100 1 65 94 101 ...
##  $ cf                        : Factor w/ 104 levels "","26+2","27+2",..: 104 103 102 1 101 100 1 65 94 101 ...
##  $ rf                        : Factor w/ 104 levels "","26+2","27+2",..: 104 103 102 1 101 100 1 65 94 101 ...
##  $ rw                        : Factor w/ 108 levels "","25+2","27+2",..: 108 106 107 1 106 104 1 64 100 105 ...
##  $ lam                       : Factor w/ 104 levels "","27+2","28+2",..: 104 101 103 1 102 101 1 64 99 100 ...
##  $ cam                       : Factor w/ 104 levels "","27+2","28+2",..: 104 101 103 1 102 101 1 64 99 100 ...
##  $ ram                       : Factor w/ 104 levels "","27+2","28+2",..: 104 101 103 1 102 101 1 64 99 100 ...
##  $ lm                        : Factor w/ 101 levels "","27+2","30+2",..: 101 99 100 1 100 99 1 62 95 98 ...
##  $ lcm                       : Factor w/ 89 levels "","31+2","32+2",..: 88 80 82 1 84 89 1 64 89 80 ...
##  $ cm                        : Factor w/ 89 levels "","31+2","32+2",..: 88 80 82 1 84 89 1 64 89 80 ...
##  $ rcm                       : Factor w/ 89 levels "","31+2","32+2",..: 88 80 82 1 84 89 1 64 89 80 ...
##  $ rm                        : Factor w/ 101 levels "","27+2","30+2",..: 101 99 100 1 100 99 1 62 95 98 ...
##  $ lwb                       : Factor w/ 99 levels "","30+2","31+2",..: 65 59 61 1 61 84 1 88 92 70 ...
##  $ ldm                       : Factor w/ 99 levels "","28+2","29+2",..: 60 51 51 1 55 84 1 95 92 63 ...
##  $ cdm                       : Factor w/ 99 levels "","28+2","29+2",..: 60 51 51 1 55 84 1 95 92 63 ...
##  $ rdm                       : Factor w/ 99 levels "","28+2","29+2",..: 60 51 51 1 55 84 1 95 92 63 ...
##  $ rwb                       : Factor w/ 99 levels "","30+2","31+2",..: 65 59 61 1 61 84 1 88 92 70 ...
##   [list output truncated]

Son 18278 observaciones o registros y 104 variables.

4.2 Seleccionar las variables de interés

Se seleccionan dos variables numéricas de interés, height_cm y weight_kg; se modifican los nombres de variables o columnas en el conjunto de datos y se muestran los primeros 10 y últimos 10 registros.

datos <- datos.bruto %>%
    select(height_cm, weight_kg)
colnames(datos) <- c("altura", "peso")
head(datos, 10)
##    altura peso
## 1     170   72
## 2     187   83
## 3     175   68
## 4     188   87
## 5     175   74
## 6     181   70
## 7     187   85
## 8     193   92
## 9     172   66
## 10    175   71
tail(datos, 10)
##       altura peso
## 18269    178   70
## 18270    183   74
## 18271    177   70
## 18272    180   72
## 18273    188   84
## 18274    186   79
## 18275    177   66
## 18276    186   75
## 18277    185   74
## 18278    182   78

Se muestran los estadísticos descriptivos principales de datos

summary(datos)
##      altura           peso       
##  Min.   :156.0   Min.   : 50.00  
##  1st Qu.:177.0   1st Qu.: 70.00  
##  Median :181.0   Median : 75.00  
##  Mean   :181.4   Mean   : 75.28  
##  3rd Qu.:186.0   3rd Qu.: 80.00  
##  Max.   :205.0   Max.   :110.00

4.3 Dispersión de los datos

f_diag.dispersion(datos)

4.4 Correlación de los datos

chart.Correlation(datos, histogram = TRUE)

r <- cor(x = datos$altura, y = datos$peso)
r
## [1] 0.7688164

La correlación de las variables peso y estatura o estatura y peso es de 0.7688 y se interpreta como positiva considerable.

5 Interpretación

Como explicación, pensamos que Covarianza y Correlación han observado una gran diferencia en todo el caso, esto comienza con la covarianza que indica si las dos variables cambian en la misma dirección (covarianza positiva) o en la dirección opuesta (covarianza negativa). … Aunque la correlación explica el cambio en una variable, muestra la proporción de cambio en la segunda variable.

6 Bibliografía

Anderson, David R., Dennis J. Sweeney, and Thomas A. Williams. 2008b. Estadística Para Administración y Economía. 10th ed. Australia • Brasil • Corea • España • Estados Unidos • Japón • México • Reino Unido • Singapur: Cengage Learning,. ———. 2008a. Estadística Para Administración y Economía. 10th ed. Australia Brasil Corea España Estados Unidos Japón México Reino Unido Singapur: Cengage Learning,. Hernández Sampieri, Roberto, Carlos Fernández Collado, and María del Pilar Baptista Lucio. 2014. Metodología de La Investigación. Sexta.