0% encontró este documento útil (0 votos)
54 vistas12 páginas

Funciones Básicas de R para Análisis de Datos

Este documento proporciona una introducción a varias funciones y conceptos básicos en R, incluyendo: 1) cómo obtener ayuda sobre funciones, 2) cómo crear secuencias numéricas, 3) cómo cambiar el formato de vectores, 4) cómo modificar la longitud de objetos, 5) cómo usar índices matriciales, 6) medidas de tendencia central y variabilidad para vectores numéricos, 7) medidas condicionales, 8) tablas de frecuencias. El documento ofrece ejemplos prácticos de cómo aplicar estas funciones y

Cargado por

Gilbert Santos
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
54 vistas12 páginas

Funciones Básicas de R para Análisis de Datos

Este documento proporciona una introducción a varias funciones y conceptos básicos en R, incluyendo: 1) cómo obtener ayuda sobre funciones, 2) cómo crear secuencias numéricas, 3) cómo cambiar el formato de vectores, 4) cómo modificar la longitud de objetos, 5) cómo usar índices matriciales, 6) medidas de tendencia central y variabilidad para vectores numéricos, 7) medidas condicionales, 8) tablas de frecuencias. El documento ofrece ejemplos prácticos de cómo aplicar estas funciones y

Cargado por

Gilbert Santos
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

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 ]

También podría gustarte