Escolar Documentos
Profissional Documentos
Cultura Documentos
Introducción
1
https://www.r-project.org/
JS, YA (DCC - UChile) Prog. Est. en R 4 / 136
Introducción
Componentes de R
https://www.rstudio.com/
JS, YA (DCC - UChile) Prog. Est. en R 7 / 136
Introducción
1 > 12 * 23
2 [1] 276
3 > 5 ^ 2
4 [1] 25
Creando variables
Vectores
Pruébenlo
Variables y vectores
1 > a <- 4 * 7
2 > b <- 6 * 5
3 > c <- 9 * 2
4 >
5 > d <- c(c, a, b)
6 > d
7 [1] 18 28 30
8 >
Posición de elementos
Pueden acceder a los elementos de un vector por posición:
1 > a <- 4 * 7
2 > length(a)
3 [1] 1
Operadores: +, -, *, /, ^ (potencia)
Pruébenlo
Funciones
1 > log(1)
2 [1] 0
3 > log(1:10)
4 [1] 0.0000000 0.6931472 1.0986123 1.3862944 1.6094379 1.7917595 1.9459101
5 [8] 2.0794415 2.1972246 2.3025851
6 > x3 <- c(2, 9, 1, 6, 7, 8, 4, 5, 3, 10)
7 > x3
8 [1]
9 > max(x3)
10 [1] 10
11 > min(x3)
12 [1] 1
13 > range(x3)
14 [1] 1 10
Funciones
Pueden usar help(...) para ver todos los parámetros que recibe una
función.
Secuencias de números
Ejemplo:
1 > seq(from = 4, to = 10, by = 0.5)
2 [1] 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 9.0 9.5 10.0
Pruébenlo
Secuencias de números
Valores lógicos
Valores lógicos
1 > 1 > 0
2 [1] TRUE
3 > c(1, 4, 8) > 0
4 [1] TRUE TRUE TRUE
5 > c(1, 4, 8) >= 4
6 [1] FALSE TRUE TRUE
Vectores lógicos
Pruébenlo
Operadores lógicos
Pruébenlo
1
Calculen el puntaje, ahora descontando 4 de punto por cada respuesta
incorrecta (exceptuando las omitidas).
Operadores lógicos
Datos no disponibles
1 > 5 + NA
2 [1] NA
3 >
4 > a <- 5
5 > a + NA
6 [1] NA
7 >
8 > x <- c(2, 6, 2, NA, 6, 2, NA, 3, 4, NA, 9)
9 > x + 4
10 [1] 6 10 6 NA 10 6 NA 7 8 NA 13
Secuencias de ı́ndices
Secuencias de ı́ndices
Pruébenlo
Pruébenlo
Texto
Texto
Texto
Pruébenlo
Scripts
Agrupando expresiones
En R:
1 > source("miprograma.R")
2 > x
3 [1] 1 2 3 4 5 6 7 8 9 10
4 > y
5 [1] 1 4 9 16 25 36 49 64 81 100
6 > mis_valores
7 [1] 1 4 9 16 25 36 49 64 81 100
8 > lista
9 [1] 3 6 11 18 27 38 51 66 83 102
10 > otros_valores
11 [1] 3 6 11 18 27 38 51 66 83 102
Pruébenlo
Condiciones compuestas
Cadenas de if . . . else
1 > labels
2 [1] "Libro 1" "Libro 2" "Libro 3" "Libro 4" "Libro 5" "Libro 6"
3 [7] "Libro 7" "Libro 8" "Libro 9" "Libro 10"
4 > digits
5 [1] "0" "1" "2" "3" "4" "5" "6" "7" "8" "9"
6 > ifelse(as.integer(digits) %% 2 == 0, digits, labels)
7 [1] "0" "Libro 2" "2" "Libro 4" "4" "Libro 6"
8 [7] "6" "Libro 8" "8" "Libro 10"
9 >
Pruébenlo
2
Parallel max: máximo componente a componente, para uno o más vectores
JS, YA (DCC - UChile) Prog. Est. en R 49 / 136
Introducción Funciones
Funciones
1 > potencia_vec
2 function(x, n){
3 y <- x^n
4 }
5 > y <- NULL
6 > x <- NULL
7 > n <- NULL
8 > valores <- potencia_vec(1:10, 3)
9 > x
10 NULL
11 > n
12 NULL
13 > y
14 NULL
15 > valores
16 [1] 1 8 27 64 125 216 343 512 729 1000
1 > potencia_vec
2 function(x, n=2){
3 y <- x^n
4 }
5 > potencia_vec(1:10)
6 > valores <- potencia_vec(1:10)
7 > valores
8 [1] 1 4 9 16 25 36 49 64 81 100
9 > valores <- potencia_vec(1:10, n=4)
10 > valores
11 [1] 1 16 81 256 625 1296 2401 4096 6561 10000
12 > valores <- potencia_vec(1:10)
13 > valores
14 [1] 1 4 9 16 25 36 49 64 81 100
Repetición
Pruébenlo
Pruébenlo
Objetos
Tipos de objetos
Propiedades de objetos
Cambio de mode()
Pruébenlo
Vectores
1 > e
2 [1] NA NA 17 NA NA NA NA NA NA 3
3 > e[-2] <- 4 # asignar 4 a todo menos la posicion 2
4 > e
5 [1] 4 NA 4 4 4 4 4 4 4 4
6 > e[2] <- 1.3
7 > e
8 [1] 4.0 1.3 4.0 4.0 4.0 4.0 4.0 4.0 4.0 4.0
9 > mode(e)
10 [1] "numeric"
11 > e[c(1, 5, 8)] <- "abc"
12 > e
13 [1] "abc" "1.3" "4" "4" "abc" "4" "4" "abc" "4" "4"
14 >
1 > f
2 [1] 4 4 NA NA NA
3 >
4 > length(f) <- 3
5 > f
6 [1] 4 4 NA
7 >
8 > length(f) <- 13
9 > f
10 [1] 4 4 NA NA NA NA NA NA NA NA NA NA NA
Concatenación de elementos
Pruébenlo
Factores
Factores
Los Levels de un factor son las categorı́as que hay en los datos.
Factores: uso
1 > fact_x
2 [1] rojo azul rojo rojo azul
3 Levels: azul rojo
4 > datos <- 1:5
5 > tapply(datos, fact_x, sum)
6 azul rojo
7 7 8
8 > tapply(datos, fact_x, mean)
9 azul rojo
10 3.500000 2.666667
11 > tapply(datos, fact_x, max)
12 azul rojo
13 5 4
datos y el vector usado para crear fact x debe ser del mismo largo.
Combinando factores
1 > fact_x
2 [1] rojo azul rojo rojo azul
3 Levels: azul rojo
4 > datos <- 1:5
5 >
6 > genero <- c("H", "H", "F", "F", "F")
7 > fact_g <- factor(genero)
8 > tapply(datos, list(fact_x, fact_g), sum)
9 F H
10 azul 5 2
11 rojo 7 1
12 > table(x, fact_g) # pueden usar table para contar los cruces
13 fact_g
14 x F H
15 azul 1 1
16 rojo 2 1
Arreglos y matrices
Creando un arreglo
Creando un arreglo
Creando un arreglo
Puede redefinir las dimensiones si es consistente con número de elementos:
1 > dim(z) <- c(30,50)
2 > z
3 [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13]
4 [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0
5 [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0
6 ...
7 [30,] 0 0 0 0 0 0 0 0 0 0 0 0 0
8 ...
9 ...
10 [,38] [,39] [,40] [,41] [,42] [,43] [,44] [,45] [,46] [,47] [,48] [,49]
11 [1,] 0 0 0 0 0 0 0 0 0 0 0 0
12 [2,] 0 0 0 0 0 0 0 0 0 0 0 0
13 ...
14 [30,] 0 0 0 0 0 0 0 0 0 0 0 0
15 [,50]
16 [1,] 0
17 [2,] 0
18 ...
19 [30,] 0
Orden de elementos
1 > dim(z)
2 [1] 3 5 100
Arreglos de posiciones
Matrices
Pruébenlo
2x + y − 2z = 10
3x + 2y + 2z = 1
5x + 4y + 3z = 4
1 > length(ex3)
2 [1] 6
3 > length(ex3) <- 3
4 > ex3
5 $nombre
6 [1] "Juan"
7
8 $num.hijos
9 [1] 2
10
11 $edades.hijos
12 [1] 4 7
Data frame
Un data frame es una lista donde todas las columnas son del mismo largo:
1 > mtcars
2 mpg cyl disp hp drat wt qsec vs am gear carb
3 Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
4 Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
5 Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
6 Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
7 Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
8 Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
9 ...
Modelos lineales
Modelo lineal
1 > summary(modelo)
2 Call:
3 lm(formula = pfam$change ~ pfam$setting + pfam$effort)
4
5 Residuals:
6 Min 1Q Median 3Q Max
7 -10.3475 -3.6426 0.6384 3.2250 15.8530
8
9 Coefficients:
10 Estimate Std. Error t value Pr(>|t|)
11 (Intercept) -14.4511 7.0938 -2.037 0.057516 .
12 pfam$setting 0.2706 0.1079 2.507 0.022629 *
13 pfam$effort 0.9677 0.2250 4.301 0.000484 ***
14 ---
15 Signif. codes: 0 ’***’ 0.001 ’**’ 0.01 ’*’ 0.05 ’.’ 0.1 ’ ’ 1
16
17 Residual standard error: 6.389 on 17 degrees of freedom
18 Multiple R-squared: 0.7381, Adjusted R-squared: 0.7073
19 F-statistic: 23.96 on 2 and 17 DF, p-value: 1.132e-05
Usando factores
Usando factores
1 > summary(nuevo_modelo)
2
3 Call:
4 lm(formula = pfam$change ~ pfam$setting + effort_fact)
5
6 Residuals:
7 Min 1Q Median 3Q Max
8 -10.0386 -2.8198 0.1036 1.3269 11.4416
9
10 Coefficients:
11 Estimate Std. Error t value Pr(>|t|)
12 (Intercept) -5.9540 7.1660 -0.831 0.418
13 pfam$setting 0.1693 0.1056 1.604 0.128
14 effort_factmoderate 4.1439 3.1912 1.299 0.213
15 effort_factstrong 19.4476 3.7293 5.215 8.51e-05 ***
16 ---
17 Signif. codes: 0 ’***’ 0.001 ’**’ 0.01 ’*’ 0.05 ’.’ 0.1 ’ ’ 1
18
19 Residual standard error: 5.732 on 16 degrees of freedom
20 Multiple R-squared: 0.8016, Adjusted R-squared: 0.7644
21 F-statistic: 21.55 on 3 and 16 DF, p-value: 7.262e-06
Datos cualitativos
1 > head(mtcars, 5)
2 mpg cyl disp hp drat wt qsec vs am gear carb
3 Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
4 Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
5 Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
6 Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
7 Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
8 > mtcars$cyl
9 [1] 6 6 4 6 8 6 8 4 4 6 6 8 8 8 8 8 8 4 4 4 4 8 8 8 8 4 4 4 8 6 8 4
10 >
11 > fact_cyl <- factor(mtcars$cyl)
12 > fact_cyl
13 [1] 6 6 4 6 8 6 8 4 4 6 6 8 8 8 8 8 8 4 4 4 4 8 8 8 8 4 4 4 8 6 8 4
14 Levels: 4 6 8
Pruébenlo
1 > library(MASS)
Distribución de frecuencia
1 > table(painters$School)
2 A B C D E F G H
3 10 6 6 10 7 4 7 4
4 >
5 > table(fact_cyl)
6 fact_cyl
7 4 6 8
8 11 7 14
9 > table(crabs$sex, crabs$sp)
10
11 B O
12 F 50 50
13 M 50 50
Frecuencia
Frecuencia relativa =
Tamaño muestra
Calculamos la distribución de frecuencia relativa usando table() y
nrow():
1 > rel_freq
2
3 A B C D E F G
4 0.18518519 0.11111111 0.11111111 0.18518519 0.12962963 0.07407407 0.12962963
5 H
6 0.07407407
7 > options(digits=1)
8 > rel_freq
9
10 A B C D E F G H
11 0.19 0.11 0.11 0.19 0.13 0.07 0.13 0.07
12 > options(digits=3)
13 > rel_freq
14
15 A B C D E F G H
16 0.1852 0.1111 0.1111 0.1852 0.1296 0.0741 0.1296 0.0741
Distribución de frecuencia
Distribución de frecuencia
Ahora podemos usar table() y barplot():
1 > freq.FL <- table(crabs.cut.FL)
2 > freq.FL
3 crabs.cut.FL
4 [6,8) [8,10) [10,12) [12,14) [14,16) [16,18) [18,20) [20,22) [22,24)
5 1 11 21 31 47 35 31 18 5
6 > barplot(freq.FL, ylim=c(0, 50), main="Distribucion de largo de lobulo
7 + frontal", ylab="frecuencia", xlab="largo de lobulo frontal [mm]")
Distribución de frecuencia
Tambien podemos usar la funcion hist() para generar histogramas:
1 > hist(crabs$FL, right=FALSE)
Podemos reutilizar los intervalos que calculamos antes usando cut() para
ahora calcular las distribuciones de frecuencia relativa y acumulada:
Cuartiles
1 > IQR(crabs$FL)
2 [1] 5.15
Percentiles
Los percentiles son los 99 valores que dividen la serie de datos en 100
partes iguales. Por ejemplo:
P10 es el valor que separa el primer 10% de los valores de los datos,
cuando se ordenan en forma ascendente
P50 es la mediana
Podemos concluir que hay una correlación positiva entre el tamaño del
caparazón y del lóbulo frontal en el cangrejo Leptograpsus variegatus.
1 > library(MASS)
2 > head(crabs, n = 1)
3 sp sex index FL RW CL CW BD
4 1 B M 1 8.1 6.7 16.1 19.0 7.0
5 > plot(crabs$FL, crabs$CL) # primer grafico
6 > colores <- c("blue", "orange")[crabs$sp]
7 > head(colores, n = 3)
8 [1] "blue" "blue" "blue"
9 > tail(colores, n = 3)
10 [1] "orange" "orange" "orange"
11 > plot(crabs$FL, crabs$CL, col=colores) # segundo grafico
12 > plot(crabs$CL ~ crabs$FL, col=colores) # tercer grafico
Lineas de tendencia
Gráficos resumen
Pueden usar plot() o pairs() para generar gráficos de resumen:
1 > colores <- c("blue", "orange")[crabs$sp]
2 > plot(crabs) # primer grafico
3 > plot(crabs, col=colores) # segundo grafico
Gráficos resumen