Professional Documents
Culture Documents
Índice General
1 Definir el directorio de trabajo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
4 Matrices y vectores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
5 Seleccionar variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
6 Funciones básicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
7 Funciones estadísticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
8 Tablas y gráficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
8.1 Una variable cualitativa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
8.2 Dos variables cualitativas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
8.3 Una variable cuantitativa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
8.4 Una variable cuantitativa vs. una cualitativa . . . . . . . . . . . . . . . . . . . . . . . 18
8.5 Dos variables cuantitativas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
8.6 Una variable cuantitativa vs. dos cualitativas (factores) . . . . . . . . . . . . . . . . . 23
8.7 Más sobre gráficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
9 Probabilidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
9.1 Eventos y espacios muestrales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
9.2 Complementación, unión e intersección de eventos . . . . . . . . . . . . . . . . . . . . 29
1
9.3 Probabilidad y probabilidad condicional . . . . . . . . . . . . . . . . . . . . . . . . . 31
10 Funciones de distribución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
10.1 Variables aleatorias discretas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
10.2 Variables aleatorias continuas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
11 Intervalos de confianza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
11.1 Una muestra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
11.2 Dos muestras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
11.3 Intervalos de confianza para una proporción . . . . . . . . . . . . . . . . . . . . . . . 39
12 ANOVA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
13 Regresión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
2
1. Definir el directorio de trabajo
Por defecto R trabaja en un directorio específico que se crea al instalar el programa y podemos saber
cuál es a través del comando getwd(). Por ejemplo,
> getwd()
[1] "C:/Documents and Settings/R"
Para cambiar el directorio de trabajo desde la ventana de comando utilizamos el comando setwd
especificando el directorio donde deseamos trabajar. Por ejemplo,
> setwd(C:/Usuario/PyE)
También podemos cambiar el directorio de trabajo a través de la barra de menú como sigue:
Utilizando la plataforma RStudio: Session > > Set Working Directory > > Choose
Directory e ir a la carpeta deseada.
Utilizando la plataforma RStudio: Tools > > Install Packages... allí seleccionar si se lo
desea instalar desde internet o desde un archivo (en general lo hacemos desde internet a través
de un repositorio (CRAN)), escribir el nombre del paquete, por ejemplo, Sleuth2 e instalarlo
presionando Install.
Windows: Para instalar desde internet ir a Paquetes > > Instalar paquetes(s). Seleccionar
un repositorio (CRAN) y luego el paquete en las ventanas que se abrirán sucesivamente. Para
hacerlo a través de un archivo elegir la opción Instalar paquetes a partir de archivos
zip locales
Para leer un paquete utilizamos el comando library. Por ejemplo, para leer el paquete que cargamos
anteriormente utilizamos: library(Sleuth2).
Para este curso será necesario instalar y leer los paquetes: car, descr, lawstat, MASS, MindOnStats,
mosaic, multcomp, prob, Sleuth2, stats, agricolae, combinat, tseries.
3
3. Leer y visualizar datos
Para empezar a trabajar con un determinado archivo primero debemos especificar en que directorio
se encuentra el mismo. Esto lo realizamos en Archivo > > Cambiar directorio. Para leer y cargar
los datos tenemos que fijarnos que tipo de extensión tiene el archivo. De acuerdo a la extensión es la
función que usamos.
Archivos desde librerías de R: Algunas librerías de R contienen varios conjuntos de datos. Por
ejemplo, la librería Sleuth2 contiene, además de otros, un conjunto de datos llamado case0801,
para leer estos datos primero leemos la librería como en 2. y luego leemos los datos como sigue:
library(Sleuth2)
library(help = "Sleuth2")
datos = case0801
attach(datos)
lee los archivos .R y .txt y los guarda en data1 y data2 respectivamente. Con el argumento
header estamos indicando que queremos que también se lean y guarden los títulos que iden-
tifican cada variable. Si no tiene titulos se debe poner header = F. Para ver como funciona el
comando read.table escribir en R help(read.table)
Archivos de excel: en el caso de archivos de excel, la forma más sencilla de cargarlos es primero
guardandolos con extensión .CSV y luego utilizando el siguiente comando:
Cuando los datos están ordenados usando las columnas de excel, como en el caso de alumnos.csv,
debemos declarar sep = ’;’ para que [R] entienda que cada columna es una variable. En cam-
bio, si solamente se separan utilizando las comas, como en el archivo pennstate.csv, declaramos
sep = ’,’. Si los datos están separados por una tabulación debemos usar sep = ’\t’.
4
Datos faltantes: Hay veces en que los datos tienen “datos faltantes” por lo que en ese caso
debemos usar sep = ’\t’. Además si el dato faltante corresponde a una variable cualitativa,
debemos agregar la instrucción na.string = ’’ como sigue,
Para poder visualizar los datos, una vez cargados sólo escribimos en [R] su nombre.
> data1
CALORIAS SODIO TIPO
1 186 495 A
2 181 477 A
3 176 425 A
4 149 322 A
......................
> names(data1)
[1] "CALORIAS" "SODIO" "TIPO"
> head(data1)
CALORIAS SODIO TIPO
1 186 495 A
2 181 477 A
3 176 425 A
4 149 322 A
5 184 482 A
6 190 587 A
> str(data1)
’data.frame’: 54 obs. of 3 variables:
$ CALORIAS: int 186 181 176 149 184 190 158 139 175 148 ...
$ SODIO : int 495 477 425 322 482 587 370 322 479 375 ...
$ TIPO : Factor w/ 3 levels "A","B","C": 1 1 1 1 1 1 1 1 1 1 ...
Para saber si una variable tiene datos faltantes usamos la función is.na que es una función lógica
que devuelve TRUE en la posición donde falta el dato y FALSE en las restantes. Por ejemplo:
5
> a = c(1,2,NA,4,5,NA)
> a
[1] 1 2 NA 4 5 NA
> is.na(a)
[1] FALSE FALSE TRUE FALSE FALSE TRUE
Si directamente queremos saber si una variable tiene algún dato faltante podemos hacer:
> a = c(-1,2,4,-5)
> which(a>0)
[1] 2 3
4. Matrices y vectores
Vamos a ver algunas formas de generar vectores. Se puede construir un vector de tipo numérico,
lógico o carácter. Algunos ejemplos:
> vector1 = c(74, 122, 235, 111, 292, 111, 211, 133, 156, 79)
con la expresión c() concatenamos los valores que le ingresamos para crear el vector. Otras funciones
para la generación de vectores:
seq(from = a,to = b,by = c): genera una secuencia de números desde a hasta b con incre-
mentos de c.
Para saber la longitud que tiene un vector utilizamos el comando length como sigue:
> length(vector1)
[1] 10
6
Para crear una matriz la forma más simple en R, es mediante la función matrix(). A continuación,
se muestra como crear una matriz llamada M de dimensión 3x2:
Ya que no se ha definido ningún elemento, R nos lo informa con NA, para crear una matriz con
elementos, por ejemplo, mediante columnas: (1, 2, 3, 4, 5, 6):
Y por último, si queremos añadirles nombres a los índices de columnas: Naranjas, Platanos y Melon,
y en las filas: Supermercado y Tienda, se muestra a continuación:
> M
Naranjas Platanos Melon
Supermercado 1 2 3
Tienda 4 5 6
apply: aplica una función sobre las filas o columnas de una matriz.
cbind(a,b,...): crea una matriz con los vectores o matrices a, b, ... como columnas.
rbind(a,b,...): crea una matriz con los vectores o matrices a, b, ... como filas.
> M[1,]
Naranjas Platanos Melon
1 2 3
> M[,1:2]
Naranjas Platanos
Supermercado 1 2
Tienda 4 5
Una ventaja que posee este software es que podemos extraer de manera muy senciall filas o columnas
que no son contiguas. Por ejemplo, si queremos extraer las columnas 1 y 3 de M hacemos:
8
> M[,c(1,3)]
Naranjas Melon
Supermercado 1 3
Tienda 4 6
> M[,-1]
Platanos Melon
Supermercado 2 3
Tienda 5 6
> M[-c(2,3),]
Naranjas Platanos Melon
1 2 3
por supuesto que en este caso sencillo esto es lo mismo que hacer M[1,].
5. Seleccionar variables
Recordemos que para ver los nombres de las variables (el nombre de las columnas de data1) podemos
utilizar el comando names:
> names(data1)
[1] "CALORIAS" "SODIO" "TIPO"
Utilizando los nombres podemos extraer los datos que están en cada columna de la matriz de datos
utilizando un signo $. Por ejemplo, si queremos los datos de CALORIAS debemos hacer:
> data1$CALORIAS
[1] 186 181 176 149 184 190 158 139 175 148 152 111 141 153 190 157 131 149 135
[20] 132 173 191 182 190 172 147 146 139 175 136 179 153 107 195 135 140 138 129
[39] 132 102 106 94 102 87 99 170 113 135 142 86 143 152 146 144
Otra forma mas práctica de trabajar, es utilizando la función attach que permite acceder a los
objetos a través de sus nombres.
9
> attach(data1)
> CALORIAS
[1] 186 181 176 149 184 190 158 139 175 148 152 111 141 153 190 157 131 149 135
[20] 132 173 191 182 190 172 147 146 139 175 136 179 153 107 195 135 140 138 129
[39] 132 102 106 94 102 87 99 170 113 135 142 86 143 152 146 144
Si por ejemplo nos interesa quedarnos con aquellos valores del sodio que corresponde a las salchichas
tipo A, lo podemos hacer como sigue y lo guardamos en la nueva variable SOA:
Si nos interesa quedarnos con aquellos valores del sodio que corresponde a las salchichas que no son
de tipo A, lo podemos hacer como sigue:
Si nos interesa quedarnos con aquellos valores de calorías correspondientes a las salchichas de tipo A
con un nivel de sodio mayor o igual a 400, lo podemos hacer como sigue:
Si deseamos quedarnos con aquellos valores de calorías correspondientes a las salchichas de tipo C o
con un nivel de sodio menor a 400, lo podemos hacer como sigue:
10
6. Funciones básicas
Las funciones min(x) y max(x) calculan el mínimo y el máximo, respectivamente, del elemento
x.
> M
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
> min(M)
[1] 1
> max(M)
[1] 6
> x
[1] 1 3 6 -8 15 21 3 5
> min(x)
[1] -8
> max(x)
[1] 21
En caso de existir datos faltantes o perdidos es necesario agregar la opción na.rm = TRUE.
Veamos algunos ejemplos.
> M
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 NA
> a
11
[1] 5 27 32 45 -2
> range(a)
[1] -2 45
> a
[1] 5 27 32 45 -2
> sum(a)
[1] 107
Obervarción: En caso de existir datos perdidos es necesario agregar la opción na.rm = TRUE como
antes.
7. Funciones estadísticas
Consideremos el vector
> x = c(1,3,6,-8,15,21,3,5)
[1] 1 3 6 -8 15 21 3 5
> mean(x)
[1] 5.75
> median(x)
[1] 4
12
> var(x)
77.92857
> sd(x)
[1] 8.827716
> quantile(x)
0% 25% 50% 75% 100%
-8.00 2.50 4.00 8.25 21.00
> IQR(x)
[1] 5.75
Obervarción: En caso de existir datos perdidos es necesario agregar la opción na.rm = TRUE como
antes.
8. Tablas y gráficos
8.1. Una variable cualitativa
Tabla de frecuencias absolutas y relativas: Utilizamos la función table y prop.table respecti-
vamente. Por ejemplo,
> table(TIPO)
TIPO
A B C
20 17 17
> prop.table(table(TIPO))
TIPO
A B C
0.3703704 0.3148148 0.3148148
13
Gráfico de tortas y barras:
Tipo de Salchichas
C
A
Para realizar un graáfico de barra de frecuencias absolutas utilizamos la función barplot: como
sigue: y . Veamos ejemplos,
> barplot(table(TIPO), main = ’Tipo de Salchichas’, col = ’blue’)
Tipo de Salchichas
20
15
10
5
0
A B C
14
Tipo de Salchichas
0.30
0.20
0.10
0.00
A B C
Sexo
NumeroAleatorio Female Male
1 1 1
2 5 4
3 11 11
4 15 6
5 10 8
6 13 10
7 28 28
8 11 8
9 8 6
10 1 5
Si en lugar de las frecuencias absolutas queremos calcular las relativas anteponemos a table
la función prop.table especificando con un 1 si queremos calcular las proporciones por fila o
con un 2 si queremos las proporciones por columna (sin esa especificación calcula el porcentaje
sobre el total de la tabla). Veamos un ejemplo:
> prop.table(table(NumeroAleatorio,Sexo),2)
Sexo
NumeroAleatorio Female Male
15
1 0.009708738 0.011494253
2 0.048543689 0.045977011
3 0.106796117 0.126436782
4 0.145631068 0.068965517
5 0.097087379 0.091954023
6 0.126213592 0.114942529
7 0.271844660 0.321839080
8 0.106796117 0.091954023
9 0.077669903 0.068965517
10 0.009708738 0.057471264
Gráfico de barras: Para realizar un gráfico de barras apilado utilizamos la función barplot:
> a = prop.table(table(NumeroAleatorio,Sexo),2)
> barplot(t(a))
0.4
0.2
0.0
1 2 3 4 5 6 7 8 9 10
Para realizar un gráfico de barras adosado es necesario agregar la opción beside = TRUE:
> a = prop.table(table(NumeroAleatorio,Sexo),2)
> barplot(t(a), beside = TRUE)
0.30
0.20
0.10
0.00
1 2 3 4 5 6 7 8 9 10
16
Observar que para realizar un barpot es necesario transponer la matriz de datos.
En todos los casos es necesario agregar el argumento na.rm = TRUE si x contiene datos perdidos,
para que la función los ignore.
Gráficos:
17
Histograma Histograma
Frequency
0.010
Density
5 10
0.000
0
80 120 160 200 80 120 160 200
CALORIAS CALORIAS
Frequency
Histograma Histograma
0.010
Density
8
4
0.000
0
CALORIAS CALORIAS
18
ecdf(x)
1.0
●●●
●●
●●
●
0.8
●●
●●
●
●●
0.6
Fn(x)
●
●●●
0.4
●
●●
0.2
●
●●
●
●
●●●
0.0
●
Gráficos
• Histograma por categoría: Cuando realizamos histogramas para comparar la variable para
cada categoría, es importante que escalas vertical y horizantal sean las mismas para cada
gráfico:
19
> par(mfrow = c(1,3))
> hist(CALORIAS[TIPO == ’A’], br = seq(80,200,20))
> hist(CALORIAS[TIPO == ’B’], br = seq(80,200,20))
> hist(CALORIAS[TIPO == ’C’], br = seq(80,200,20))
Histogram of CALORIAS[TIPO
Histogram
== "A"]
of CALORIAS[TIPO
Histogram
== "B"]
of CALORIAS[TIPO == "C"]
5
4
4
6
3
Frequency
Frequency
Frequency
4
2
2
1
0
0
80 140 200 80 140 200 80 140 200
A B C
> bwplot(CALORIAS~TIPO)
20
También puede observarse la distribución de la variable cuantitativa por categoría de la
cualitativa graficando las densidades como sigue:
A
B
C
0.015
Density 0.010
0.005
0.000
CALORIAS
●
●
100 120 140
● ●
●
●
● ●
●
● ●
●
●
● ●
● ●
●
Velmax
● ●
● ●
●
● ●
●
●
●
●
● ●
80
●
● ●
●
●
60
●
●
●
40
Sexo
Dos o más gráficos superpuestos: Para superponer gráficos es necesario agregar la opción
add = TRUE al partir del segundo gráfico. Por ejemplo, si queremos superponer dos histogramas
hacemos lo siguiente:
Histograma de CALORIAS
8
6
4
2
0
plot(CALORIAS, SODIO)
22
600
500
SODIO
400
300
200
CALORIAS
Si queremos discriminar por categoría de una tercera variable cualitativa podemos utilizar diferentes
colores y formas para los puntos del gráfico:
400
Sexo
300
A
B
C
calorias
23
library(car)
scatterplot(Calorias, Sodio, groups = Tipo, legend.title = ’Tipo’,
legend.coords = ’bottomright’, smooth = FALSE, reg.line = FALSE, boxplots = FALSE)
600
500
SODIO
400
300
Tipo
200
A
B
C
CALORIAS
> library(mosaic)
> favstats(Contraccion~Velocidad+Temperatura)
Para realizar el gráfico de las medias de una variable cuantitativa para dos combinaciones de factores
y así poder visualizar si existen interacciones entre los diferentes factores hacemos
Alta
90
Bajo
mean of Contraccion
85
80
75
Alta Baja
Velocidad
Para realizar un nuevo gráfico sin borrar el anterior, antes del nuevo gráfico debemos agregar
la opción dev.new().
Para agregar una leyenda al gráfico, dentro de la función gráfica (plot, barplot, etc.) debemos
agregar la opción legend indicando en un vector los nombres de las variables. Por ejemplo,
legend = c(’Hombres’, ’Mujeres’).
Para agregar/modificar las etiquetas de los ejes del gráfico, dentro de la función gráfica (plot,
barplot, etc.) debemos agregar la opción xlab o ylab con el nombre que deseamos ponerle al
eje. Por ejemplo, xlab = ’Peso en kg.’, ylab = ’Altura en cm.’.
Para modificar los ejes del gráfico, dentro de la función gráfica (plot, barplot, etc.) debemos
agregar la opción xlim o ylim indicando en un vector los limites queremos que tengan los ejes.
Por ejemplo, xlim = c(0,100) o ylim = c(0,200).
Si deseamos cambiar las marcas de los ejes, primero debemos borrar las que hace por defecto
agregando la opción xaxt = ’n’ o yaxt = ’n’ dentro de la función gráfica y luego agregando
la sentencia axis(side = eje, at = marcas). Por ejemplo, si queremos poner marcas en 1,
2 y 3 del eje x, debemos agregar axis(side = 1, at = c(1,2,3)).
25
Para cambiar el tipo de gráfico, dentro de la función gráfica (plot, barplot, etc.) debemos agregar
la opción type indicando el tipo que gráfico que deseamos realizar. Por ejemplo, si deseamos
que grafique líneas, debemos escribir type = ’l’, si deseamos que grafique puntos, debemos
escribir type = ’p’, etc. Recurrir a la ayuda de R para ver más tipos de gráficos (help(plot)).
Para cambiar el caracter del gráfico, dentro de la función gráfica (plot, barplot, etc.) debemos
agregar la opción pch indicando el tipo de caracter que deseamos realizar. Por ejemplo, si
deseamos que grafique cuadraditos, debemos escribir pch = 0, si deseamos círculos, debemos
escribir pch = 1, triángulos debemos escribir pch = 2, etc. Recurrir a la ayuda de R para ver
más tipos de gráficos (help(points)).
Para cambiar el color del gráfico, dentro de la función gráfica (plot, barplot, etc.) debemos
agregar la opción col indicando el color que deseamos. Por ejemplo, si deseamos que el gráfico
sea rojo, debemos escribir col = ’red’ o col = 2. Recurrir a la ayuda de R para ver más
tipos de gráficos (help(plot)). Para poner colores personalizados, podemos utilizar la opción
col = rgb(#1, #2, #3, #4) con #1 la cantidad de rojo que deseamos, #2 la cantidad de verde
y #3 la cantidad de azul. El argumento #4 es para especificar la transparencia de los colores.
Por ejemplo, para graficar en rojo escribimos col = rgb(1, 0, 0, 1), para graficar en rojo
pero más transparente escribimos col = rgb(1, 0, 0, 1/5).
Ejemplo:
par(mfrow = c(1,2))
plot(SODIO, CALORIAS, main = ’Antes’)
26
Antes Despues
200
180
160
CALORIAS
Calorias
100
140
120
100
0
200 400 600 100 300 500 700
SODIO Sodio
9. Probabilidad
En esta sección veremos com utilizar la librería library(prob) para resolver ejercicios de probabil-
dad.
1. Lanzar una Moneda: la función tosscoin establece el espacio muestral asociado al experimento
de lanzar una moneda al aire "n"veces.
> n.veces = 3
> S = tosscoin(n.veces)
> S
toss1 toss2 toss3
1 H H H
2 T H H
3 H T H
27
4 T T H
5 H H T
6 T H T
7 H T T
8 T T T
Si deseamos saber la probabilidad de cada evento es necesario agregar la opción makespace = TRUE
como sigue:
> n.veces = 1
> S = rolldie(n.veces)
> S
X1
1 1
2 2
3 3
4 4
5 5
6 6
Para cambiar el número de caras del dado (por defecto usa 6) es necesario agregar la op-
ción nsides indicando el número de lados deseado y para que además para que muestre las
probabilidades debemos agregar makespace = TRUE como antes.
28
3. Ruleta: la función roulette establece el espacio muestral asociado a experimento de hacer
girar la ruleta UNA VEZ.
29
4. Cartas: a función cards establece el espacio muestral para una baraja de 52 cartas.
> S = cards()
> S
rank suit
1 2 Club
2 3 Club
.
.
14 2 Diamond
15 3 Diamond
.
.
27 2 Heart
28 3 Heart
.
.
51 K Spade
52 A Spade
Si deseamos incluir los comodines debemos agregar la opción jokers = TRUE (por defecto uti-
liza jokers = FALSE). Para que además para que muestre las probabilidades debemos agregar
makespace = TRUE como antes.
Para las operaciones de complementación, unión e intersección de eventos, utilizamos las fun-
ciones setdiff, union e intersect, respectivamente como sigue:
30
> S = cards()
> A = subset(S, suit == "Heart")
> B = subset(S, rank == "A" )
> C = subset(S, rank == "2" )
> A
> B
rank suit
rank suit
27 2 Heart
13 A Club
28 3 Heart
26 A Diamond
29 4 Heart
39 A Heart
30 5 Heart
52 A Spade
31 6 Heart
32 7 Heart
> C
33 8 Heart
rank suit
34 9 Heart
1 2 Club
35 10 Heart
14 2 Diamond
36 J Heart
27 2 Heart
37 Q Heart
40 2 Spade
38 K Heart
39 A Heart
> union(A,B)
rank suit
13 A Club
26 A Diamond
27 2 Heart > intersect(A, B)
28 3 Heart rank suit
29 4 Heart 39 A Heart
30 5 Heart
31 6 Heart Acomplemento = setdiff(S,A)
32 7 Heart Bcomplemento = setdiff(S,B)
33 8 Heart
34 9 Heart
35 10 Heart
36 J Heart
37 Q Heart
38 K Heart
39 A Heart
52 A Spade
31
9.3. Probabilidad y probabilidad condicional
Para calcular una probabilidad usamos la función prob con argumentos, el espacio muestral S
y función de las variables a la que queremos calcularle la probabilidad. Si ademmás queremos
condicionar a otro evento, debemos agregar la opción given como sigue:
> n.veces = 2
> S = rolldie(n.veces, makespace = TRUE)
> prob(S, X1+X2 > 9)
[1] 0.1666667
> prob(S, X1+X2 > 9, given = X1 > 4)
[1] 0.4166667
Cuando realizamos una probabilidad condicional con given dado por una expresion lógica,
event también tiene que ser una expresión lógica. Veamos un ejemplo,
1. Comencemos con un ejemplo de una variable aleatoria discreta: sea X una variable aleatoria
que toma valores 1, 3 y 4 con probabilidades 0.5, 0.2 y 0.3, respectivamente. Definimos los
elementos que necesitaremos:
x = c(1, 3, 4)
p = c(0.5, 0.2, 0.3)
32
plot(x, p, type = ’h’, xaxt = "n", ylim = c(0,max(p)),
+ main = ’Funcion de probabilidad puntual’)
points(x, p , pch = 16)
axis(side = 1, at = c(1,3,4))
La función cumsum(x) devuelve un vector con las sumas acumuladas de los elementos de
x.
Funcion de probabilidad puntual Funcion de distribucion acumulada
0.5
1.0
0.4
0.8
0.3
0.6
F(X)
p
0.2
0.4
0.1
0.2
0.0
0.0
1 3 4 0 1 2 3 4 5
x x
b) Distribución empírica: Para obtener una muestra de tamaño 1000 de la variable aleatoria
X, utilizamos la función sample como sigue:
n = 1000
muestra = sample(x, prob = p, size = n, replace = TRUE)
Para graficar el histograma con estos datos utilizamos la función hist (ver sección 8.3).
0.5
1.0
0.4
0.8
frecuencias relativas
0.3
0.6
Fn(x)
0.2
0.4
0.1
0.2
0.0
0.0
1 2 3 4 0 1 2 3 4 5
x x
k = 10
x = 1:10
p = rep(1/k, k)
2. Distribución Binomial: sea X una variable aleatoria con distribución Binomial de parámetros
m y p. Definimos los elementos que necesitaremos:
m = 6
p = 0.5
x = 0:m
par(mfrow = c(1,2))
1.0
1.0
0.8
0.8
frecuencias relativas
0.6
0.6
F(X)
0.4
0.4
0.2
0.2
0.0
0.0
0 1 2 3 4 5 6 0 2 4 6
x x
b) Distribución empírica: Para obtener una muestra de tamaño 1000 de la variable aleatoria
X, utilizamos la función rbinom como sigue:
n = 1000
muestra = rbinom(n, m, p)
par(mfrow = c(1,2))
35
Histograma muestral Funcion de distribucion acumulada de X
1.0
1.0
0.8
0.8
frecuencias relativas
0.6
0.6
Fn(x)
0.4
0.4
0.2
0.2
0.0
0.0
0 1 2 3 4 5 6 0 1 2 3 4 5 6
x x
Observaciones:
En general, cuando trabajamos con una variable aleatoria discreta (excepto para la uniforme que di-
fiere levemente) realizamos los gráficos anteriores de manera análoga, teniendo en cuenta la siguiente
tabla:
36
10.2. Variables aleatorias continuas
En esta sección veremos como graficar funciones de densidad y funciones de distribución acumulada
tanto empíricas como teóricas.
1. Distribución Normal: sea X una variable aleatoria con distribución normal de parámetro µ y
σ. Definimos los elementos que necesitaremos:
mu = 2
sigma = 2
par(mfrow = c(1,2))
x1 = mu-3*sigma
x2 = mu+3*sigma
curve(dnorm(x, mu, sigma), xlim = c(x1,x2), main = ’Funcion de densidad’,
+ylab = ’f(x)’)
F(X)
0.10
f(x)
0.05
0.00
-4 -2 0 2 4 6 8 -10 -5 0 5 10 15
x x
b) Distribución empírica: Para obtener una muestra de tamaño 1000 de la variable aleatoria
X, utilizamos la función rnorm de la siguiente forma:
n = 1000
muestra = rnorm(n, mu, sigma)
37
Para graficar el histograma y la función de distribución acumulada empírica de X lo
hacemos como sigue:
par(mfrow = c(1,2))
1.0
0.20
0.8
frecuencias relativas
0.15
0.6
Fn(X)
0.10
0.4
0.05
0.2
0.00
0.0
-5 0 5 -5 0 5 10
x x
En general, cuando trabajamos con una variable aleatoria continua realizamos los gráficos anteriores
de manera análoga, teniendo en cuenta la siguiente tabla:
38
11. Intervalos de confianza
En esta sección encontrarán un resumen de como costruir en R todos los intervalos de confianza que
vimos en clase.
Intervalo de confinza para µ con varianza desconocida: Vamos a utilizar la función de R t.test
de la siguiente forma:
39
Por ejemplo, en este caso construimos el intervalo unilateral inferior con 99 % de confianza.
Intervalo de confianza para muestras apareadas: Aclaramos esta condición en t.test por medio
del argumento paired = T
σ12
Intervalo de confianza para : Lo realizamos mediante la función var.test
σ22
Dos muestras: Para calcular el intervalo de confianza para la diferencia de proporciones utili-
zamos prop.test como se explica a continuación
12. ANOVA
Para realizar un anális ANOVA en R vamos a necesitar instalar los siguientes paquetes: car, multcomp
y lawstat.
Mediante un gráfico boxplot por niveles del factor podemos elaborar algunas conjeturas.
> boxplot(Respuesta~Factor)
40
Podemos realizar un resumen numérico por niveles del factor de la siguiente forma:
• Tukey
La tabla mostrará todas las comparaciones posibles entre los niveles del factor, y en la
última columna los p-valores. Por ejemplo, para los datos serum.txt se obtuvo lo siguiente
41
Linear Hypotheses:
Estimate Std. Error t value Pr(> |t|)
G2 - G1 == 0 -24.084 14.483 -1.663 0.3522
G3 - G1 == 0 20.593 14.483 1.422 0.4891
G4 - G1 == 0 28.046 15.845 1.770 0.2986
G3 - G2 == 0 44.677 17.009 2.627 0.0552 .
G4 - G2 == 0 52.130 18.183 2.867 0.0312 *
G4 - G3 == 0 7.453 18.183 0.410 0.9761
• Bonferroni
Utilizamos lo que ya guardamos en T como sigue:
Nos devolverá una tabla similar a la anterior pero con los p-valores correspondientes a
este método.
• Dunnet: Este método lo usamos cuando queremos comparar los niveles del factor con un
control. Es importante reordenar los niveles del factor, de modo que el primero corresponda
al nivel control.
Contamos con los siguientes test y gráficos para analizar los residuos:
Son los dos primeros gráficos que se obtienen mediante el comando > plot(modelo).
42
> outlierTest(modelo)
rstudent unadjusted p-value Bonferonni p
21 -3.71598 0.00023648 0.002294
> influenceIndexPlot(modelo)
PASO 5: Si en el paso 4 no encontramos problemas con los residuos, el análisis terminó. En caso
contrario, realizamos las modificaciones o transformacines necesarias y retomamos al PASO 1.
Si queremos quitar un dato que resultó atípico según el test de outliers, como por ejemplo el
dato 21 en el item anterior, recordar que lo hacemos definiendo nuevas variables sin ese dato:
> boxcox(modelo)
13. Regresión
En lo que sigue llamaremos Y donde guardamos los datos de la variable respuesta y X para los datos
predictores.
> plot(X,Y)
Este gráfico es muy importante para observar como se relacionan los datos y elaborar hipótesis. Para
ajustar el modelo de regresión lineal utilizamos la función lm.
43
(Intercept) 1.769135 0.078664 22.490 <2e-16 ***
X -0.001965 0.003493 -0.563 0.576
En la última linea del summary, el F-test compara: H0: modelo con solamente la media vs
H1: modelo más completo que estoy ajustando. En este caso, el p-value da 0.57 por lo que
aceptamos H0.
> plot(X, Y)
> lines(X, modelo$fitted)
> plot(X, Y)
> abline(modelo)
Como en ANOVA, tenemos que estudiar los residuos. Las funciones que utilizaremos son similares:
> plot(modelo)
> influenceIndexPlot(modelo, id.n = 3)
> outlierTest(modelo)
En el caso de existir outliers y querer eliminarlos podemos proceder de varias maneras, una de ellas
es eliminar a mano los datos atípicos (como se mostró en la Sección anterior). Supongamos que el
outlierTest nos dice que los datos atípicos se encuentran en las posiciones 2 y 23 de los datos. Por
lo tanto hacemos:
Otra forma es utilizar directamente la sentencia subset dentro de la función lm como sigue:
En caso de realizar una transformación, recordemos de la Sección anterior que podemos ver que
transformación aplicarle a la variable respuesta mediante boxcox(modelo). Por ejemplo, si éste
gráfico resulta como el que sigue:
95%
-500
log-Likelihood
-700
-900
-2 -1 0 1 2
Al estar el intervalo de confianza centrado en cero, esto nos indicaría que debemos aplicar una
transformación logarítmica. Por el contrario, el índice indicará la potencia a la cual deberá ser
elevada la variable respuesta para ser transformada. En este caso procedemos de la siguiente manera:
45
> modelo = lm(log(Y) ~ X)
Y si, por ejemplo, queremos obtener intervalos de confianza y predicción para un valor en particular
a, en este caso debemos proceder de la siguiente manera:
Es decir, debemos aplicar la función inversa del logaritmo (exponencial) para obtener los intervalos
para los valores originales.
46