*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
1. Ayuda sobre funciones y capacidades con el comando help("nombre de la
función").
# Por ejemplo, ver las instrucciones de la función histograma
help("hist")
# o también
?hist
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
2. Creando series secuenciales en R
a. Creando una secuencia de los 10 primeros números naturales
a <- 1:10
a
1] 1 2 3 4 5 6 7 8 9 10
b. Usando la función secuencia
b <- c(seq(1,10))
b
[1] 1 2 3 4 5 6 7 8 9 10
c <- c(seq(-10, 10, by = 2))
c
[1] -10 -8 -6 -4 -2 0 2 4 6 8 10
c. Igual resultado, pero utilizando length, para indicar cuantos elementos tendrá el vector
d <- seq(length=11, from=-10, by = 2)
d
[1] -10 -8 -6 -4 -2 0 2 4 6 8 10
d. Repetir valores en un vector
e <- rep(c, times=2)
e
[1] -10 -8 -6 -4 -2 0 2 4 6 8 10 -10 -8 -6 -4 -2 0 2 4 6 8 10
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
3. Cambiando el formato de un vector con .as
a. Por ejemplo, si escribe
h <- 0:9
h
[1] 0 1 2 3 4 5 6 7 8 9
b. Convirtiendo el vector a texto
digitos <- as.character(h)
digitos
[1] "0" "1" "2" "3" "4" "5" "6" "7" "8" "9"
c. Convirtiéndolo nuevamente a número.
i <- as.integer(digitos)
i
[1] 0 1 2 3 4 5 6 7 8 9
R reconstruirá el vector numérico de nuevo y, en este caso, h e i coinciden.
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
4. Modicación de la longitud de un objeto
j <- (1:3)
j
[1] 1 2 3
j [4] <- 0
j
[1] 1 2 3 0
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
5. Uso de variables indexadas como índices (Matrices)
Una variable indexada (array) es una colección de datos, por ejemplo, numéricos, indexada
por varios índices. R permite crear y manipular variables indexadas en general y en particular,
matrices. Una variable indexada puede utilizar no sólo un vector de índices, sino incluso una
variable indexada de índices, tanto para asignar un vector a una colección irregular de elementos
de una variable indexada como para extraer una colección irregular de elementos.
Veamos un ejemplo sobre una matriz, que es una variable indexada con dos índices. Puede
construirse un índice matricial consistente en dos columnas y varias filas. Los elementos del
índice matricial son los índices fila y columna para construir la matriz de índices. Supongamos
que X es una variable indexada 4 x 5 y que desea hacer lo siguiente:
a. Extraer los elementos X[1,3], X[2,2] y X[3,1] con una estructura de vector
x <- array(1:20,dim=c(4,5)) # Genera una variable indexada (4,5).
x
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 9 13 17
[2,] 2 6 10 14 18
[3,] 3 7 11 15 19
[4,] 4 8 12 16 20
i <- array(c(1:3,3:1),dim=c(3,2)) # c(1:3,3:1) contenido de las 2 columnas,
i # i es una matriz de índice (3x2)
[,1] [,2]
[1,] 1 3
[2,] 2 2
[3,] 3 1
b. Reemplazar dichos elementos de X con ceros.
x[i] <- 0 #Sustituir dichos elementos con ceros
x
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 0 13 17
[2,] 2 0 10 14 18
[3,] 0 7 11 15 19
[4,] 4 8 12 16 20
c. Traspuesta generalizada de una variable indexada
En el caso de matrices es más sencillo utilizar la función t( ), y bastaría escribir B <-
t(A).
B <- t(x)
B
[,1] [,2] [,3] [,4]
[1,] 1 2 0 4
[2,] 5 0 7 8
[3,] 0 10 11 12
[4,] 13 14 15 16
[5,] 17 18 19 20
d. Producto matricial.
Si, por ejemplo, A y B, son matrices cuadradas del mismo tamaño, entonces > A * B
A <- array(1:4,dim = c(2,2))
A
[,1] [,2]
[1,] 1 3
[2,] 2 4
B <- array(c(0,2,-2,0),dim = c(2,2))
B
[,1] [,2]
[1,] 0 -2
[2,] 2 0
C <- A*B # es la matriz de productos elemento a elemento
C
[,1] [,2]
[1,] 0 -6
[2,] 4 0
D <- A %*% B
D # es el producto matricial.
[,1] [,2]
[1,] 6 -2
[2,] 8 -4
Si x es un vector (de la dimensión apropiada) entonces > x %*% A %*% x
E <- c(-5,0.25)
E
[1] -5.00 0.25
F <- E %*% A %*% E
F
[,1]
[1,] 19
La función crossprod( ) realiza el producto cruzado de matrices
G
[,1] [,2]
[1,] 4 -2
[2,] 8 -6
También existe la función diag(). Si su argumento es una matriz, diag(matriz), devuelve
un vector formado por los elementos de la diagonal de la misma.
diag(C)
[1] 0 0
diag(D)
[1] 6 -4
Cálculo del determinante de una matríz cuadrada
det(A)
[1] -2
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
6. Medidas de tendencia central en R
Se realiza una encuesta a 30 personas, y se les pregunta su edad, su ingreso anual en dólares y el
estado en el que vive.
a. Ingresando las edades en un vector
edad <- c(18,25,18,35,40,45,18,24,48,52,18,19,25,42,40,52,18,35,40,40,28,22,35,64,59,45,24,40,29,30)
edad
[1] 18 25 18 35 40 45 18 24 48 52 18 19 25 42 40 52 18 35 40 40 28 22
[23] 35 64 59 45 24 40 29 30
b. Verificando que se han ingresado las 30 edades
length(edad)
[1] 30
c. Sumatoria
sum(edad)
[1] 1028
d. Media Aritmética o promedio
mean(edad)
[1] 34.26667
e. Mediana
median(edad)
[1] 35
f. Mínimo y Máximo
min(edad)
[1] 18
max(edad)
[1] 64
g. Rango
range(edad)
[1] 18 64
h. Media ponderada
weighted.mean(edad)
[1] 36.53846
i. Ordenando datos numéricos con el comando sort( )
# Deformas ascendente, de menor a mayor
sort(edad)
[1] 18 18 18 18 18 19 22 24 24 25 25 28 29 30 35 35 35 40 40 40 40 40 42 45 45 48 52 52 59 64
# Deformas descendente, de mayor a menor
sort(edad,decreasing = TRUE)
[1] 64 59 52 52 48 45 45 42 40 40 40 40 40 35 35 35 30 29 28 25 25 24 24 22 19 18 18 18 18 18
j. Impresión de resultados mediante el comando cat
cat("La edad promedio de los 30 individuos es", mean(edad), "años\n")
La edad promedio de los 30 individuos es 34.26667 años
cat("Las edades de los 30 encuestados se encuentran entre", min(edad), "y",max(edad), "años.\n")
Las edades de los 30 encuestados se encuentran entre 18 y 64 años.
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
7. Medidas Condicionales.
k. Imprimiendo sólo las edades que son mayores a 30 años
mean(edad[edad>30])
[1] 44.5
l. Solo las edades que están entre 30 y 50 años.
sum((edad >= 30 & edad <= 50))
[1] 13
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
8. Medidas de variabilidad central en R
a. Ingresando los ingresos de los 30 individuos en un vector
ingresos <- c(60, 49, 40, 61, 64, 60, 59, 54, 62, 69, 70, 42, 56, 61, 61, 61, 58, 51, 48, 65, 49, 49, 41, 48, 52,
46,59, 46, 58, 43)
b. Verificando que se han ingresado los 30 ingresos
length(ingresos)
[1] 30
c. Varianza
var(ingresos)
[1] 69.71954
d. Desviación Estándar
sd(ingresos)
[1] 8.349823
e. Calculando la varianza y la desviación estándar y usando el comando cat
cat("la varianza de las edades es", var(edad),"y la desviación estándar es",sd(edad),"años.\n")
la varianza de las edades 8.349823
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
9. Tablas de Frecuencias en R (Continuación)
a. Registrando el estado en el que vive cada individuo
estado <- c("tas", "sa", "qld", "nsw", "nsw", "nt", "wa", "wa", "qld", "vic", "nsw", "vic", "qld", "qld", "sa",
"tas", "sa", "nt", "wa", "vic", "qld", "nsw", "nsw", "wa", "sa", "act", "nsw", "vic", "vic", "act")
estado
[1] "tas" "sa" "qld" "nsw" "nsw" "nt" "wa" "wa" "qld" "vic" "nsw"
[12] "vic" "qld" "qld" "sa" "tas" "sa" "nt" "wa" "vic" "qld" "nsw"
[23] "nsw" "wa" "sa" "act" "nsw" "vic" "vic" "act"
length(estado)
[1] 30
b. Mostrando juntos la edad, el ingreso y el estado
cbind(edad,ingresos,estado)
edad ingresos estado
[1,] "18" "60" "tas"
[2,] "25" "49" "sa"
[3,] "18" "40" "qld"
[4,] "35" "61" "nsw"
[5,] "40" "64" "nsw"
[6,] "45" "60" "nt"
[7,] "18" "59" "wa"
[8,] "24" "54" "wa"
[9,] "48" "62" "qld"
[10,] "52" "69" "vic"
[11,] "18" "70" "nsw"
[12,] "19" "42" "vic"
[13,] "25" "56" "qld"
[14,] "42" "61" "qld"
[15,] "40" "61" "sa"
[16,] "52" "61" "tas"
[17,] "18" "58" "sa"
[18,] "35" "51" "nt"
[19,] "40" "48" "wa"
[20,] "40" "65" "vic"
[21,] "28" "49" "qld"
[22,] "22" "49" "nsw"
[23,] "35" "41" "nsw"
[24,] "64" "48" "wa"
[25,] "59" "52" "sa"
[26,] "45" "46" "act"
[27,] "24" "59" "nsw"
[28,] "40" "46" "vic"
[29,] "29" "58" "vic"
[30,] "30" "43" "act"
c. # Construyendo una tabla de frecuencias sencilla con los 30 estados
table(estado)
estado
act nsw nt qld sa tas vic wa
2 6 2 5 4 2 5 4
d. Tablas de frecuencia de un factor
# Construyendo un factor con los estados
Factor_estado <- factor(estado)
Factor_estado
[1] tas sa qld nsw nsw nt wa wa qld vic nsw vic qld qld sa tas
[17] sa nt wa vic qld nsw nsw wa sa act nsw vic vic act
Levels: act nsw nt qld sa tas vic wa
# Construimos una tabla con el factor de los estados.
tabla_estado <- table(Factor_estado)
tabla_estado
Factor_estado
act nsw nt qld sa tas vic wa
2 6 2 5 4 2 5 4
# Construyendo una tabla de frecuencias sencilla con los ingresos
table(ingresos)
ingresos
40 41 42 43 46 48 49 51 52 54 56 58 59 60 61 62 64 65 69 70
1 1 1 1 2 2 3 1 1 1 1 2 2 2 4 1 1 1 1 1
e. Construyendo una tabla de frecuencias con intervalos de clases para los salarios.
# Calculando el ancho de las clases. Con 8 clases
(max(ingresos)-min(ingresos))/8
[1] 3.75
# Usamos el comando min( ), para ver donde iniciamos los intervalos
min(ingresos)
[1] 40
# Iniciamos los intervalos en 40.
Factor_ingresos <- factor(cut(ingresos,breaks = 40-1 + 3.75*(0:9)))
Factor_ingresos
[1] (57.8,61.5] (46.5,50.2] (39,42.8] (57.8,61.5] (61.5,65.2] (57.8,61.5]
[7] (57.8,61.5] (50.2,54] (61.5,65.2] (65.2,69] (69,72.8] (39,42.8]
[13] (54,57.8] (57.8,61.5] (57.8,61.5] (57.8,61.5] (57.8,61.5] (50.2,54]
[19] (46.5,50.2] (61.5,65.2] (46.5,50.2] (46.5,50.2] (39,42.8] (46.5,50.2]
[25] (50.2,54] (42.8,46.5] (57.8,61.5] (42.8,46.5] (57.8,61.5] (42.8,46.5]
9 Levels: (39,42.8] (42.8,46.5] (46.5,50.2] (50.2,54] (54,57.8] ... (69,72.8]
# Ahora construimos una tabla de frecuencia con el estado creado.
tabla_ingresos <- table(Factor_ingresos)
cbind(tabla_ingresos)
tabla_ingresos
(39,42.8] 3
(42.8,46.5] 3
(46.5,50.2] 5
(50.2,54] 3
(54,57.8] 1
(57.8,61.5] 10
(61.5,65.2] 3
(65.2,69] 1
(69,72.8] 1
f. Como calcular una tabla de frecuencias de doble entrada
# Mostrar los ingresos en filas y los estados en columnas en una tabla
tabla_ing_est <- table(Factor_ingresos,Factor_estado)
tabla_ing_est
Factor_estado
Factor_ingresos act nsw nt qld sa tas vic wa
(39,42.8] 0 1 0 1 0 0 1 0
(42.8,46.5] 2 0 0 0 0 0 1 0
(46.5,50.2] 0 1 0 1 1 0 0 2
(50.2,54] 0 0 1 0 1 0 0 1
(54,57.8] 0 0 0 1 0 0 0 0
(57.8,61.5] 0 2 1 1 2 2 1 1
(61.5,65.2] 0 1 0 1 0 0 1 0
(65.2,69] 0 0 0 0 0 0 1 0
(69,72.8] 0 1 0 0 0 0 0 0
# Mostrar los estados en filas y los ingresos en columnas en una tabla
tabla_est_ing <- table(Factor_estado,Factor_ingresos)
tabla_est_ing
_ing
Factor_ingresos
Factor_estado (39,42.8] (42.8,46.5] (46.5,50.2] (50.2,54] (54,57.8] (57.8,61.5]
act 0 2 0 0 0 0
nsw 1 0 1 0 0 2
nt 0 0 0 1 0 1
qld 1 0 1 0 1 1
sa 0 0 1 1 0 2
tas 0 0 0 0 0 2
vic 1 1 0 0 0 1
wa 0 0 2 1 0 1
Factor_ingresos
Factor_estado (61.5,65.2] (65.2,69] (69,72.8]
act 0 0 0
nsw 1 0 1
nt 0 0 0
qld 1 0 0
sa 0 0 0
tas 0 0 0
vic 1 1 0
wa 0 0 0
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
10. Cálculo del Sesgo con R
( )
3
n x i−x
Sesgo= ∑
⏟
( n−1 ) ( n−2 ) ⏟desv . estandar
x1 x2
a. Ejecutar los siguientes comandos, línea por línea no todo junto
# Primero calculemos a x1
x1 <-(length(ingresos)/((length(ingresos)-1)*(length(ingresos)-2)))
# Ahora calculemos a x2
x <-c((ingresos-mean(ingresos))/sd(ingresos))
x <-c(x**3)
x2 <-sum(x)
# Ahora calculemos el sesgo
sesgo <-x1*x2
sesgo
[1] -0.1156291
round(sesgo,2)
[1] -0.12
Como el sesgo es negativo, los datos están sesgados hacia la izquierda.
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
11. Uso de funciones con R
La estructura para crear una función es
Nombre de la función <- function(x) fórmula
Ejemplo 1
a. Crear función para el cálculo de la desviación estándar
Desciacion_Estandar <- function(x) sqrt(var(x))
# Aplicando la función creada a la variable edad.
Desciacion_Estandar(edad)
[1] 13.05673
# Comparando con la desviación estándar calculada por R
sd(edad)
[1] 13.05673
b. Creando una función para calcular el coeficiente de variación
Coeficiente_variación <- function(x) round(sd(x)/abs(mean(x)),2)
Aplicando la función creada a la variable ingresos
Coeficiente_variación(ingresos)
[1] 0.15
Aplicando la función creada a la variable edad.
Coeficiente_variación(edad)
[1] 0.39
c. Creando una función para calcular el sesgo
# Crear función para el cálculo del sesgo
Cal_sesgo <- function(x){
x3 <-(length(x)/((length(x)-1)*(length(x)-2)));
x1 <-c((x-mean(x))/sd(x));
x1 <-c(x1**3);
x2 <-sum(x1);
sesgo <-x3*x2;
cat("El sesgo de los datos es", round(sesgo,2))
}
# Ahora calculemos el sesgo para los ingresos.
Cal_sesgo(ingresos)
El sesgo de los datos es -0.12
Sesgo hacia la izquierda
# Ahora calculemos el sesgo para la edad
Cal_sesgo(edad)
El sesgo de los datos es 0.46
Sesgo hacia la derecha
d. Calculando el sesgo o coeficiente de asimetría con el comando skewness
install.packages("moments")
library(moments)
# Calculando la simetría
skewness(ingresos)
[1] -0.1097654
skewness(edad)
[1] 0.4394234
hist(edad)
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
12. Creando una función para aplicar el Teorema de Chebyshev
Al menos 75% de las mediciones están en el intervalo [𝝁−𝟐𝝈, 𝝁+𝟐𝝈]
Al menos 89% de las mediciones están en el intervalo [𝝁−𝟑𝝈, 𝝁+𝟑𝝈]
# Crear función
Chebyshev <- function(x){
linf <- round(mean(x)-2*sd(x));
lsp <- round(mean(x) + 2*sd(x));
linf1 <- round(mean(x)-3*sd(x));
lsp1 <- round(mean(x) + 3*sd(x));
cat("el 75% de los datos se encuentran entre [",linf,"-",lsp,"]\n ");
cat("el 89% de los datos se encuentran entre [",linf1,"-",lsp1,"]");
}
# Aplicar el teorema a la variable edad
Chebyshev(edad)
el 75% de los datos se encuentran entre [ 8 - 65 ]
el 89% de los datos se encuentran entre [ -6 - 79 ]
Chebyshev(ingresos)
el 75% de los datos se encuentran entre [ 38 - 71 ]
el 89% de los datos se encuentran entre [ 30 - 80 ]