1 Objetivo

En este curso se enseñará a crear y manipular objetos en R; principalmente vectores, matrices y funciones, para apoyar con las operaciones básicas de cálculo, álgebra y probabilidad.

2 Introdución

R es un lenguaje de programación y de distribución libre que funciona en los sistemas operativos de Windows, Linux, Macintosh y Unix.

R fue creado en \(1992\) en Nueva Zelanda por Ross Ihaka y Robert Gentleman adoptando la sintaxis del lenguaje S desarrollado por Bell Laboratories, actualmente Lucent Tecnologies. El lenguaje S fue desarrollado en \(1976\) por John Chambers y colaboradores.

Ventajas que se tienen al utilizar R, como lenguaje de programación:

  • Es un programa con código totalmente libre.

  • Se puede Almacenar y manipular objetos que son del tipo vectores, matrices, data frames, listas, funciones, etc.

  • Las contribuciones de los usuarios (http://cran.r-project.org/bin/windows/contrib/) hacen de R una herramienta cada vez más completa y potente.

El ambiente de trabajo en R es muy intuitivo y relativamente simple, ya que una vez instalado en la computadora solo es necesario tener en cuenta cuales son los paquetes que están instalados en la computadora empezar a trabajar con las funciones disponibles en dichos paquetes. Si ocupamos de un paquete que no está instalado en R, entonces se instala y se carga al archivo de trabajo. Todas las funciones que se pueden disponer y utilizar en R vienen contenidas en paquetes (bibliotecas).

Actualmente, el repositorio de paquetes CRAN tiene alrededor de \(18,365\) paquetes disponibles:

Paquetes que se pueden instalar en R:

3 Instalación de R

Para instalar R en el sistema operativo de Window:,

Paquetes a los que se tienen acceso una vez que se instala R:

search()
   [1] ".GlobalEnv"        "package:rmarkdown" "package:tinytex"  
   [4] "package:knitr"     "package:stats"     "package:graphics" 
   [7] "package:grDevices" "package:utils"     "package:datasets" 
  [10] "package:methods"   "Autoloads"         "package:base"

Instalación de R en Mac:

4 Instalación de paguetes

Un paquete se instala con la función install.packages() y se activar con la función library().

El paquete ggplot2 se utiliza para la creación de gráficos.

install.packages("ggplot2")  # Instalación del paquete ggplot2
library("ggplot2")      # Activación del paquete ggplot2
library(help=ggplot2)   # Funciones y bases de datos del paquete ggplot2

Para pedir ayuda al R con la función geom_line:

?geom_line        
help(geom_line )

Funciones relacionadas con la instalación de paquetes

  • install.packages( ,dependence=T):

  • install.packages( ,dependencies =c(“Depends”,“Imports”))

  • remove.packages( ): Quita un paquete de R.

  • update.packages( ): Actualiza un paquete de R.

  • updata.packages(): Actualiza los paquetes de R.

5 Creación y manejo de objetos

Objetos en R:

  • vector(): Vectores

  • matrix(): Matrices, es decir, arreglos de \(2\) dimensiones.

  • array(): Arreglos con más de dos dimensiones.

  • data.frame(): Arreglos para manipular bases de datos.

  • list(): Las listas tienen la capacidad de guardar vectores, matrices, funciones, listas, etc.

  • function(): La creación de funciones es útil cuando se tiene una gran cantidad de código, para optimizar los procesos, etc.

La función class() es útil para identificar el tipo es el objeto con el cual se encuentra trabajando el usuario. También es de utilidad la función attributes().

Información:

6 Cálculo

Grupo de funciones:

Funciones matemáticas:

  • Operaciones aritméticas que se pueden realizar en R:
?Arithmetic
  • funciones trigonométricas:
?Trig 
  • Más funciones:
?Special

6.1 Operaciones elementales

Para dos números \(a\) y \(b\), en \(\mathbb{R}\), donde

# forma 1
a<-8
b<-2

a  # muestra lo que se guardo en a
  [1] 8
b  # muestra lo que se guardo en b
  [1] 2
# forma 2

a<-8
b<-2

a # muestra lo que se guardo en a.
  [1] 8
b # muestra lo que se guardo en b.
  [1] 2
# forma 3

(a<-8)
  [1] 8
(b<-2)
  [1] 2
# forma 4

a=8; a
  [1] 8
b=2; b
  [1] 2
  • Suma: \(a+b\)
a+b  
  [1] 10
  • Resta: \(a-b\)
a-b  
  [1] 6
  • Multiplicación: \(a∗b\)
a*b  
  [1] 16
  • División: \(a/b\)
a/b  
  [1] 4
  • División entera: se tiene la parte entera de la división: \(a%/%b\)
a%/%b  
  [1] 4
  • Módulo: se tiene el residuo al dividir dos números: \(a%%b\)
a%%b  
  [1] 0
  • Potencia: \(a^b\)
a^b  
  [1] 64
  • Raíz cuadrada: \(sqrt(a)\)
sqrt(a)  
  [1] 2.828427
  • Logaritmos: \(log(a)\), \(log10(a)\)
log(a)  
  [1] 2.079442
  • Exponente de un número: \(exp(a)\)
exp(a)  
  [1] 2980.958
  • Valor absoluto de un número: \(abs(a)\)
abs(a) 
  [1] 8
  • Funciones trigonométricas: \(sin(a)\), \(cos(a)\), \(asin(a)\) y \(acos(a)\).
sin(a)
  [1] 0.9893582
a<b
  [1] FALSE
a>b
  [1] TRUE

6.2 Graficos de funciones

Funciones polinómicas: \[ f(x)=x^2+x \]

n<-100
x<-seq(-n,n, by=0.5)

fx<-x^2+x

plot(x, fx, type="l")

Creación de un data.frame

dat<-data.frame(x,fx) 

Generación de un gráfico con funciones del paquete ggplot2:

ggplot(dat, aes(x, fx))+
geom_line(col="purple",size=2)+ # geom_line agrega la línea
theme_dark()                   # theme_dark especifica el diseño del gráfico

Funciones racionales:

\[ f(x)=\frac{1}{1+x^2} \]

n<-100
x<-seq(-n,n, by=0.5)

fx<-x/(1+x^2)

plot(x, fx, type="l")
points(x,fx, cex =1, col ="blue")

dat<-data.frame(x,fx)

ggplot(dat, aes(x, fx))+
geom_line()+    #  geom_line generar la línea
geom_point(aes(x, fx))  # geom_point agrega los puntos

ggplot(dat, aes(x, fx, group=1)) +
  geom_line(linetype = "dashed",color="black", size=1)+ #  geom_line generar la línea
  geom_point()  # geom_point agrega los puntos

Materia:

6.3 Integración

Dada la función \[ f(x)=e^{-\frac{x^2}{2}} \] integrarla en el intervalo \([1,\infty)\)

f<-function(x) 
    {
     exp(-x^2/2)
    }

integrate(f, lower=1, upper=Inf)
  0.3976897 with absolute error < 1.2e-06

Dada la función \[ f(x)=\frac{\sin(x)}{x+1} \] integrarla en el intervalo \([0,1]\)

f<-function(x) 
    {
     sin(x)/(x+1)
    }

integrate(f, lower=0, upper=1)$value
  [1] 0.284227

Calcular la siguiente integral

\[ P(X>1)= \int_{20}^{\infty}\frac{1}{\sqrt{2\pi}}e^{- \frac{x^2}{2}}dx \]

#--- Definición de la función
h <- function(x){
                (1/sqrt(2*pi))*exp(-(x^2)/2)
                }


#--- valor exacto de la integral
integrate(h,1,Inf)$value
  [1] 0.1586553

7 Álgebra

Las funciones que se emplean en esta sección pertenecen al paquete base; lo cual se puede verificar ejecutando la línea library(help=base).

7.1 Vectores

Existen varias formas de crear vectores en R, una de ellas es con la función c(), la cual ayuda a agrupar datos numéricos, alfabéticos y alfanuméricos. Vectores de números:

a <- c(-3,-2,-1, 1, 2, 3, 4, 5); a
  [1] -3 -2 -1  1  2  3  4  5
b <- -3:5; b
  [1] -3 -2 -1  0  1  2  3  4  5
f <- seq(from = -3, to = 5, by = 2);f
  [1] -3 -1  1  3  5
g <- seq(from = -3, to = 5, length = 30);g
   [1] -3.00000000 -2.72413793 -2.44827586 -2.17241379 -1.89655172 -1.62068966
   [7] -1.34482759 -1.06896552 -0.79310345 -0.51724138 -0.24137931  0.03448276
  [13]  0.31034483  0.58620690  0.86206897  1.13793103  1.41379310  1.68965517
  [19]  1.96551724  2.24137931  2.51724138  2.79310345  3.06896552  3.34482759
  [25]  3.62068966  3.89655172  4.17241379  4.44827586  4.72413793  5.00000000

Vectores de letras:

y <-c("a","b","c");y
  [1] "a" "b" "c"
let <-LETTERS[1:10];let
   [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J"
# vetores
a<-c(2,4,6) # c concatena elementos
b<-c(1,3,5)
# Suma: a+b
a+b
  [1]  3  7 11
# Resta:    a-b
a-b
  [1] 1 1 1
#Multiplicación:    a∗b
a*b
  [1]  2 12 30
#División a/b
a/b
  [1] 2.000000 1.333333 1.200000
# División entera:  a%/%b
a%/%b
  [1] 2 1 1
# Potencia: a^{b}
a^b
  [1]    2   64 7776
# Raíz cuadrada:    sqrt()
sqrt(a)
  [1] 1.414214 2.000000 2.449490
# log(), log10()
log(a)
  [1] 0.6931472 1.3862944 1.7917595
# sin(), cos(), asin(), acos()
sin(b)
  [1]  0.8414710  0.1411200 -0.9589243

Funciones:

  • diff(): Diferencia entre los elementos de un vector dado.
diff(a)
  [1] 2 2
  • cumsum(): Se obtiene la suma de los elementos de un vector dado.
cumsum(a)
  [1]  2  6 12
  • cumprod(): Se obtiene el producto de los elementos de un vector dado.
cumprod(a)
  [1]  2  8 48
  • cummax(): Se obtiene el máximo de los elementos de un vector dado.
cummax(a)
  [1] 2 4 6
  • cummin(): Se obtiene el mínimo de los elementos de un vector dado.
cummin(a)
  [1] 2 2 2

7.2 Matrices

Una matriz:

  • Es un arreglo con dos dimensiones.

  • Es una colección de datos del mismo tipo.

  • Es un vector con un atributo adicional (dim).

Una matriz se puede crear con la función matrix(). Dada la matriz \(A\):

  • A[i,j]: indica la entrada (i,j) de la matriz.

  • A[i,]: indica la fila i-ésima de la matriz.

  • matriz[,j]: indica la columna j-ésima de la matriz.

Matrices:

\[ A=\begin{pmatrix} 2 & 5 & 0\\ 7 & 3 & 8\\ 3 & 0 & 1 \end{pmatrix} \]

A<-matrix(c(2,7,3,5,3,0,0,8,1),3,3) # Capturar la información por columna
A
       [,1] [,2] [,3]
  [1,]    2    5    0
  [2,]    7    3    8
  [3,]    3    0    1

\[ B=\begin{pmatrix} 1 & 1 & 2\\ 2 & 2 & 3\\ 4 & 6 & 1 \end{pmatrix} \]

B<-matrix(c(1,2,4,1,2,6,2,3,1),3,3)
B
       [,1] [,2] [,3]
  [1,]    1    1    2
  [2,]    2    2    3
  [3,]    4    6    1

Funciones para matrices en R:

  • dim(): Devuelve las dimensiones de la matriz.
dim(A)
  [1] 3 3
  • sum(): Devuelve la suma de todas las entradas de la matriz.
sum(A)
  [1] 29
  • prod(): Devuelve el producto de todas las entradas de la matriz.
prod(A)
  [1] 0
  • mean(): Devuelve la media aritmética de todas las entradas de la matriz.
mean(A)
  [1] 3.222222
  • colSums(): Devuelve las sumas por columnas de la matriz.
colSums(A)
  [1] 12  8  9
  • rowSums(): Devuelve las sumas por filas de la matriz.
rowSums(A)
  [1]  7 18  4
  • colMeans(): Devuelve las medias aritméticas por columnas de la matriz.
colMeans(A)
  [1] 4.000000 2.666667 3.000000
  • rowMeans(): Devuelve las medias aritméticas por filas de la matriz.
rowMeans(A)
  [1] 2.333333 6.000000 1.333333
  • diag(): Devuelve la diagonal de la matriz. La diagonal de una matriz cuadrada son los elementos que están en la diagonal principal de la matriz dada.
diag(A) # diagonal
  [1] 2 3 1
  • La traza de una matriz cuadrada \(A_{k\times k}\), es la suma los elementos de la diagonal

\[ tr(A)=\sum_{i=1}^ka_{ij} \]

sum(diag(A))
  [1] 6
  • det(): Determinante de una matriz. Para una matriz cuadrada, el determinante está dado por \[ |A|=\sum_{j=1}^{k}a_{ij}|A_{ij}|(-1)^{i+j} \]
det(A) 
  [1] 91
  • t(): Transpuesta de la matriz \(A\).
t(A) 
       [,1] [,2] [,3]
  [1,]    2    7    3
  [2,]    5    3    0
  [3,]    0    8    1
  • solve(): Inversa de una matriz. Para una matriz cuadrada no singular, \(A\), existe una única matriz inversa \(B\), tal que \(AB=I\) de igual modo \(BA=I\).
solve(A) # inversa de la matriz
              [,1]        [,2]       [,3]
  [1,]  0.03296703 -0.05494505  0.4395604
  [2,]  0.18681319  0.02197802 -0.1758242
  [3,] -0.09890110  0.16483516 -0.3186813
  • eigen(): Descomposición espectral de una matriz. Con esta función se pueden obtener los valores y vectores propios obtenidos de la descomposición espectral de una matriz cuadrada:

\[ A=\sum_{i=1}^{κ}\lambda_{i}e_{i}e_{i}´ \]

eigen(A)
  eigen() decomposition
  $values
  [1]  9.523447+0.000000i -1.761724+2.540018i -1.761724-2.540018i
  
  $vectors
                [,1]                  [,2]                  [,3]
  [1,] -0.5432879+0i  0.6371432+0.0000000i  0.6371432+0.0000000i
  [2,] -0.8174795+0i -0.4793513+0.3236711i -0.4793513-0.3236711i
  [3,] -0.1912212+0i -0.3749493-0.3448492i -0.3749493+0.3448492i

Eigenvalores: 9.523447+0i, -1.761724+2.540018i, -1.761724-2.540018i

Eigenvalores: -0.543288+0i, -0.81748+0i, -0.191221+0i, 0.637143+0i, -0.479351+0.323671i, -0.374949-0.344849i, 0.637143+0i, -0.479351-0.323671i, -0.374949+0.344849i

  • svd(): Descomposición en valores singulares de una matriz. Para una matriz \(A\) de \(m\times k\), existe una matriz ortogonal \(U\) de \(m\times m\) y \(U\) ortogonal de \(k\times k\), tal que \[ A=UAV' \] La descomposición en valores singulares de \(A\) puede escribirse como

\[ A=\sum_{i=1}^{r}\lambda_{i}\mathbf{u}_{i}\mathbf{v}_{i}' \]

svd(A)
  $d
  [1] 11.711634  4.577856  1.697312
  
  $u
             [,1]       [,2]       [,3]
  [1,] -0.2639427 -0.9630370 -0.0537965
  [2,] -0.9376196  0.2430923  0.2485471
  [3,] -0.2262825  0.1160428 -0.9671247
  
  $v
             [,1]        [,2]       [,3]
  [1,] -0.6634489  0.02702149 -0.7477335
  [2,] -0.3528604 -0.89253749  0.2808315
  [3,] -0.6597917  0.45016293  0.6016878
  • qr(): Descomposición QR de una matriz. La descomposición o factorización QR de una matriz es una descomposición de la matriz dada, \(A\), como producto de una matriz ortogonal,\(Q\), por una triangular superior, \(R\), tal que \[ A=QR \]
qr(A)
  $qr
             [,1]       [,2]      [,3]
  [1,] -7.8740079 -3.9370039 -7.493007
  [2,]  0.8890009  4.3011626 -1.278724
  [3,]  0.3810004  0.6312972 -2.686951
  
  $rank
  [1] 3
  
  $qraux
  [1] 1.254000 1.775541 2.686951
  
  $pivot
  [1] 1 2 3
  
  attr(,"class")
  [1] "qr"
  • A %*% B : producto de las matrices \(A\) y \(B\)
A %*% B
       [,1] [,2] [,3]
  [1,]   12   12   19
  [2,]   45   61   31
  [3,]    7    9    7
  • solve(A,b) : solución del sistema de ecuaciones \(Ax=b\).

Dado el sistema

\[ x+y=7 \]

\[ x-2y=1 \]

Encontrar el valor de \(x\) y \(y\). En este caso

\[ A=\begin{pmatrix} 1 & 1 \\ 1 & -2 \end{pmatrix} \] y \[ A=\begin{pmatrix} 7 \\ 1 \end{pmatrix} \]

A<-matrix(c(1,1,1,-2),2,2)
A
       [,1] [,2]
  [1,]    1    1
  [2,]    1   -2
b<-c(7,1)
b
  [1] 7 1
solve(A,b)
  [1] 5 2

Luego \(x=5\) y \(y=2\)

8 Probabilidad

8.1 Algebra de conjuntos

Definición: Si cada elemento de \(A\) pertenece también a \(B\), entonces \(A\subset B\).

Definición: El complemento de un conjunto \(A\) con respecto a \(\Omega\) denotado por \(A^c\), el el conjunto de todos los elementos que están en \(\Omega\) pero que no están en \(A\).

Definición: Dado \(A\) y \(B\) dos conjuntos de \(\Omega\) la unión de \(A\) y \(B\), dado por \(A\cup B\), es el conjunto de todos los elementos que están en \(A\) o en \(B\) o en ambos.

Definición: Dado \(A\) y \(B\) dos conjuntos de \(\Omega\) la intersección de \(A\) y \(B\), dado por \(A\cap B\), es el conjunto que contiene a todos los elementos que están en \(A\) y en \(B\).

Definición: Dos conjuntos \(A\) y \(B\) definidos en \(\Omega\) se dice que son mutuamente excluyentes o disjuntos si no tienen elementos en común, es decir, \(A\cap B= \varnothing\)

Definición: Dados \(A\) y \(B\) conjuntos definidos en \(\Omega\), el conjunto de elementos que están en \(A\) pero que no están en \(B\) es el conjunto diferencia y se denota con \(A-B\).

Operaciones en R:

Dado: \(A=\{a,k,m\}\), \(B=\{b,k,f\}\), encontrar \(A\cup B\) y \(A\cap B\) :

A<-c("a","k","m")
B<-c("b","k","f")
union(A,B) # Conjunto union
  [1] "a" "k" "m" "b" "f"
intersect(A,B) # Conjunto intersección
  [1] "k"
setdiff(A,B) # Conjunto diferencia.
  [1] "a" "m"

Ejercicio:

  • Dado \(U=\{1,3,5,7,9\}\), \(A=\{1,3\}\) y \(B=\{1,5,7\}\). Calcular \(U\cap A\) y \(U\cap B\)

  • Dado \(A=\{1,3,5\}\) y \(B=\{1,5,7\}\), calcular \(A-B\)

8.2 Métodos de conteo

El factorial de un número esta dado por \[ n!=\prod_{k=1}^{n} k \] Ejemplo:

n<-4
factorial(n) # factorial de 4
  [1] 24

Definición: De un conjunto de \(n\) elementos distintos se seleccionan \(k\) elementos uno a la vez sin remplazo. El resultado es una perpetuación de \(n\) elementos tomados \(k\) a la vez. Así el número de ordenamientos distintos de ka objeto seleccionados sin remplazo de una colección de \(n\) objetos diferentes está dado por:

\[ P_{n,k}=\frac{n!}{(n-k)!} \] Ejercicio: Calcular \(P_{4,2}\), es decir \(n=4\) y \(k=2\)

n<-4
k<-2
  
factorial(n)/factorial(k)
  [1] 12

Si el muestreo es realizado con remplazo, entonces el número de formas en las que se puede seleccionar una muestra ordenada de \(k\) objetos de un conjunto de \(n\) objetos distintos es

\[ n^k \] Ejemplo:

n^k
  [1] 16

Definición: Dado un conjunto de \(n\) elementos diferentes, cada subconjunto de tamaño \(k\) elegido del conjunto dato sin remplazo, se le conoce como combinación de \(n\) elementos \(k\) a la vez. El número de estas combinaciones está dado por

\[ C_{n,k}=\binom{n}{k} = \frac{n!}{k!(n - k)!} \] Así el número de formas en la cual se puede seleccionar una muestra (no ordenada) de \(k\) objetos sin remplazo de un conjunto con \(n\) objetos diferentes está dado por \(C_{n,k}\).

Ejemplo:

choose(n, k) # número de combinaciones
  [1] 6

Si el muestreo es realizado con remplazo, entonces el número de formas en la cual se puede seleccionar una muestra de \(k\) objetos de un conjunto con \(n\) objetos diferentes está dado por \[ \frac{(n-1+k)!}{k!(n-1)!} \]

Ejemplo:

factorial(n-1+k)/(factorial(k)*factorial(n-1))
  [1] 10

Resumen:

Muestra Ordenada No ordenada
Sin remplazo \(P_{n,k}=\frac{n!}{(n-k)!}\) \(C_{n,k}= \frac{n!}{k!(n - k)!}\)
Con remplazo \(n^k\) \(\frac{(n-1+k)!}{k!(n-1)!}\)

La función nsamp del paquete prob también ayudan con los cálculos del Resumen anterior.

Instalación del paquete prob

install.packages("prob")
library(prob)

Ejemplo de: \[ P_{n,k}=\frac{n!}{(n-k)!} \]

nsamp(n=4,k=2,replace=F,ordered = T)
  [1] 12

Ejemplo de: \[ n^k \]

nsamp(n=4,k=2,replace=T,ordered = T)
  [1] 16

Ejemplo de \[ C_{n,k}= \frac{n!}{k!(n - k)!} \]

nsamp(n=4,k=2,replace=F,ordered = F)
  [1] 6

Ejemplo de

\[ \frac{(n-1+k)!}{k!(n-1)!} \]

nsamp(n=4,k=2,replace=T,ordered = F)
  [1] 10

Ejercicio: Generar un número aleatorio

sample(1:28,1)
  [1] 2