Chapter 3 OPERACIONES MATEMÁTICAS Y ESTADÍSTICAS CON VECTORES.

En este capítulo se desarrollará operaciones matemáticas y estadísticas con vectores. Para este capítulo es fundamental recordar lo que se desarrolló en el capítulo 1 llamado “R como calculadora”.

3.1 Operaciones matemáticas.

En el siguiente tabla se mostrarán algunas operaciones que se pueden hacer con vectores en R.

OPERACIONES SINTAXIS
Adición +
Sustracción -
Producto Escalar %*%
Producto de Elementos *
Suma de elementos sum()
Producto prod()
Suma Acumulada cumsum()
Producto Acumulado cumprod()
Diferencias diff()

Para mostrar las operaciones primero se definirán 2 vectores que nos permitirán hacer los cálculos.

# Creamos el vector x
x<-1:8
x
## [1] 1 2 3 4 5 6 7 8
# Y el vector y
y<-seq(3,27, length.out = 8)
y
## [1]  3.000000  6.428571  9.857143 13.285714 16.714286 20.142857 23.571429
## [8] 27.000000

Si se toma en cuenta la adición, esta se dará entre los elementos de posiciones iguales. Es decir, se sumará elemento de la primera posición del vector x y el elemento de primera posición del vector y, y así sucesivamente.

Veamos como sería la suma del vector x y y.

# Adición de vectores.
x+y         
## [1]  4.000000  8.428571 12.857143 17.285714 21.714286 26.142857 30.571429
## [8] 35.000000

Para el caso de la sustracción es similar. Como se muestra en el siguiente ejemplo:

# Sustracción de vectores.
x-y            
## [1]  -2.000000  -4.428571  -6.857143  -9.285714 -11.714286 -14.142857 -16.571429
## [8] -19.000000

EL producto escalar, como se sabe es la suma agregada del producto de cada elemento de posiciones iguales. Para poder determinarlo se usará la función %*%.

# Producto escalar.
x%*%y        
##      [,1]
## [1,]  684

El producto de elementos se da cuando se multiplica elementos de la misma posición:

# Producto de Elementos.
x*y           
## [1]   3.00000  12.85714  29.57143  53.14286  83.57143 120.85714 165.00000
## [8] 216.00000

Si deseamos sumar todos los elementos de un vector se tendrá que usar la función sum(). Veamos un ejemplo.

# Suma de elementos del vector.
sum(x)    
## [1] 36

Con lo visto, otra forma de calcular el producto escalar es usando el producto de elementos y la suma de elementos. Veamos el método alternativo.

sum(x*y)
## [1] 684

En efecto, nos resulta lo mismo que si lo hubieras hecho con la función %*%.

Ahora que ya conocemos como calcular algunas oeraciones matemáticas, podremos calcular algunas operaciones un poco más complejas como el cálculo de la norma o longitud del vector. Recordar que la norma de vector es: \(Norma=\sqrt{x_1^2+x_2^2+x_3^2+...x_n^2}\)

Entonces, este procedimiento podremos hacerlo en R con la siguiente sintaxis.

sqrt(sum(x^2))
## [1] 14.28286

En el caso que se desee calcular el producto de todos los elemenos de un vector, se usará la función prod().

# El producto de todos los elementos de x.
prod(x)        
## [1] 40320

Lo que se ha calculado aquí es la multiplicación de todos los elementos del vector x, es decir, 1 por 2 por 3 por 4 por 5 por 6 por 7 y por 8.

Otra operación es la suma acumulada de elementos, para ello se usa la función cumsum(), lo que hace es sumar los dos primeros elemento; este resultado lo suma al tercer elemento y así sucesivamente.

# Suma acumulada de elementos de x.
cumsum(x)      
## [1]  1  3  6 10 15 21 28 36

Como se puede observar, el último elemento de la suma acumulada es igual a la suma de todos los elementos, el resultado que se obtuvo con la función sum().

Similarmente el producto acumulado, se calculará con la función cumprod()

# El producto acumulado de elementos de x.
cumprod(x)
## [1]     1     2     6    24   120   720  5040 40320

Para diferenciar elemento a elemento se usa la función diff(), que realiza la diferencia entre dos elementos contiguos.

# Diferencias sucesivas de elementos de x.
diff(x)
## [1] 1 1 1 1 1 1 1

Como el vector x es una secuencia que aumenta de 1 en 1. Al aplicar esta función el resultado nos muestra que cada elemento del vector se diferencia en una unidad.

3.2 Operaciones estadísticas.

A continuación se presentarán las funciones para realizar operaciones estadísticas con vectores.

OPERACIÓN SINTAXIS
Media mean()
Mediana median()
Máximo max()
Mínimo min()
Cuantiles quantile()
Coeficiente de Correlación cor()

Todas las operaciones se harán respecto al vector x.

Si se desea calcular la media aritmética o promedio de los elementos del vector, se tendrá que usar la función mean(), como sigue:

# Cálculo de la media del vector x.
mean(x)        
## [1] 4.5

Asimismo, si deseamos calcular la mediana de un vector tenemos que usar la función median(). A continuación un ejemplo.

# Cálculo de la mediana del vector x.
median(x) 
## [1] 4.5

Para hallar el elemento de máximo valor se usará la función max().

# El elemento de valor máximo del vector x.
max(x)        
## [1] 8

Asimismo, para calcular el elemento de mínimo valor se usará la función min()

# El elemento de valor mínimo del vector x.
min(x)
## [1] 1

Ahora una de las operaciones más importantes es poder calcular los percentiles de un vector, para esto se usará la función quantile().

quantile(x)
##   0%  25%  50%  75% 100% 
## 1.00 2.75 4.50 6.25 8.00

R por defecto, nos arroja los resultados para los cuartiles. Es así que podemos ver que se tiene información para el 25%, 50%, 75% y 100%.

Pero si deseamos obtener los quintiles, entonces podemos hacer uso del argumento probs de la función quantile(). De la siguiente manera.

quantile(x, probs = c(0,.2,.4,.6,.8,1))
##   0%  20%  40%  60%  80% 100% 
##  1.0  2.4  3.8  5.2  6.6  8.0

En efecto, ahora tenemos información para los quintiles: 20%, 40%, 60%, 80% y 100%.

Entonces, si usted desea calcular los deciles, colocaría en probs=c(0, .1, .2, .3, .4, .5, .6, .7, .8, .9, 1), y si quiere calcular los ventiles la serie sería 0, .05, .1, .15 y así susecivamente hasta el 1. Usted se habrá podido dar cuenta que esto es muy tedioso y que debe de haber una forma más rápida y sencilla.

En realidad, sí. Usted que ha leído el capítulo 2 sabrá con que función solucionar este pequeño problema. En efecto, es la función seq().

Entonces, si queremos calcular los quintiles usando la función seq(), será de la siguiente manera.

quantile(x, probs = seq(0,1, by=0.2))
##   0%  20%  40%  60%  80% 100% 
##  1.0  2.4  3.8  5.2  6.6  8.0

Y si desea calcular los deciles y los ventiles.

# Para calcular los deciles.
quantile(x, probs = seq(0,1, by=0.1))
##   0%  10%  20%  30%  40%  50%  60%  70%  80%  90% 100% 
##  1.0  1.7  2.4  3.1  3.8  4.5  5.2  5.9  6.6  7.3  8.0
# Para calcular los ventile.
quantile(x, probs = seq(0,1, by=0.05))
##   0%   5%  10%  15%  20%  25%  30%  35%  40%  45%  50%  55%  60%  65%  70%  75% 
## 1.00 1.35 1.70 2.05 2.40 2.75 3.10 3.45 3.80 4.15 4.50 4.85 5.20 5.55 5.90 6.25 
##  80%  85%  90%  95% 100% 
## 6.60 6.95 7.30 7.65 8.00

En efecto, hemos calculado los deciles y ventiles8 sin escribir tanto código.

Por último, si deseamos calcular el coeficiente de corrrelación entre dos vectores, usaremos la función cor().

# El coeficiente de correlación entre "x" y "y".
cor(x,y)
## [1] 1

La función cor() calcula por defecto el coeficiente de correlación de pearson. Pero si usted desea calcularlo con otro método, tendrá que usar el argumento method. R nos da la posibilidad de poder calcular el coeficiente de correlación de Kendall y el de spearman, adicionalmente, al de Pearson que viene por defecto.

Es así que si usted desea calcular el coeficiente de correlación de spearman. Tendría que usar la siguiente sintaxis.

cor(x,y, method = "spearman")
## [1] 1

3.2.1 ¿Cómo trabajar con missings o elementos faltantes (NA)?

Hasta ahora hemos visto que nuestros datos están completos, pero en el día a día la mayoría de veces no se cuenta con la totalidad de los datos y se tiene missing values o mejor conocidos como valores faltantes. En R, a estos valores faltantes se les conoce como NA (not available).

Si se tiene NA en un vector, entonces, las funciones que hemos utilizado para hacer cálculos matemáticos y estadísticos arrojarán como resultado NA. Veamos un ejemplo para que quede claro.

# Definimos el vector z.
z<-c(1,4,NA,6,10)
z
## [1]  1  4 NA  6 10

Si deseamos calcular la media del vector z.

mean(z)
## [1] NA

En efecto, nos arrojó como resultado NA. Entonces cuando se tenga elementos faltantes en nuestro vector, tendremos que usar el argumento na.rm. Este argumento es parte de todas las funciones que hemos desarrollado en este capítulo.

A continuación un ejemplo.

mean(x, na.rm = TRUE)
## [1] 4.5

Hemos podido solucionar el problema de los elementos faltantes.

Es así que si usted tiene valores faltantes y desea obtener el cálculo de los estadísticos sin tener en consideración a éstos, tiene que usar el argumento na.rm=TRUE.

3.2.2 ¿Cómo ordenar elementos de los vectores?

En este apartado se verá cómo ordenar los elementos de los vectores con las funciones sort() y rev()9. La función sort() permite ordenar elementos de manera decreciente o creciente, mientras que la función rev() permite obtener el vector en orden inverso.

Veamos los argumentos de la función sort():

sort(x, decreasing=FALSE, ...)

Donde:
x: Es un objeto vector de clase numérico, complejo, caracter o lógico. decreasing: Es un argumento lógico en donde si toma el valor de TRUE entonces los elementos del vector son ordenados de manera decreciente. Su valor por defecto es FALSE. ...: Otros argumentos.

Para más detalles veamos un ejemplo:

# Creamos el vector x.
x<-c(3,5,3,2,1,4,8,9,7,10,13,1,6)
x
##  [1]  3  5  3  2  1  4  8  9  7 10 13  1  6

Podemos ver que el vector x que acabamos de crear tiene los elementos desordenados. Así que si queremos ordenarlos de forma creciente, usaremos la función sort.

# Ordenando de manera creciente.
sort(x)
##  [1]  1  1  2  3  3  4  5  6  7  8  9 10 13

En efecto, se ha ordenado los elementos del vector x de forma creciente. Como puede ver, no hemos usado el argumento decreasing, ya que queremos ordenarlo de forma creciente.

Si queremos ordenarlo de forma decreciente, sí tendremos que usaar el argumento decreasing

sort(x, decreasing = TRUE)
##  [1] 13 10  9  8  7  6  5  4  3  3  2  1  1

El vector x ha sido ordenado de forma creciente.

Ahora, si deseamos ordenar los elementos del vector en orden inverso, tendremos que usar la función rev(). Veamos su sintaxis.

rev(x)

Donde:
x: Es un vector u otro objeto que pueda ser definido inversamente.

Por ejemplo, si nosotros queremos ordenar el vector x de forma decreciente, una vez que ya se ordenó de manera creciente.

# Ordenando el vector x de manera creciente.
x_cre<-sort(x)
x_cre
##  [1]  1  1  2  3  3  4  5  6  7  8  9 10 13

Hemos definido al vector x_cre con el vector ordenado crecientemente del vector x. Ahora le aplicamos la función rev() para que se ordene de forma inversa (decrecientemente).

# Ordenando inversamente el vector x_cre
rev(x_cre)
##  [1] 13 10  9  8  7  6  5  4  3  3  2  1  1

En efecto, el vector x_cre ha sido ordenado de forma inversa.


  1. Podría dejar el directorio de trabajo en esa ruta, pero si quisiera importar el archivo que deseo tendría que especificar la ruta del archivo y eso me demoraría más tiempo, ya que tendría que escribir la ruta completa cada vez que deseo cargar un archivo.↩︎

  2. En ejemplos posteriores se mostrará como importar archivos desde otra ruta.↩︎