Documentos de Académico
Documentos de Profesional
Documentos de Cultura
MANUAL RB PDF
MANUAL RB PDF
1
PREFACIO 8
CAPTULO 1: INTRODUCCIN 9
1.1. OPERANDO R 9
1.1.1 INICIACIN DE UNA SESIN EN R 9
1.1.2 TERMINACIN DE UNA SESIN EN R 10
1.2. EJECUCIN DE COMANDOS DESDE UN ARCHIVO EXTERNO 10
1.3. EJECUCIN DE FUNCIONES ESPECIALES 11
3.1. OPERADORES 74
3.1.1 FUNCIONES QUE PRODUCEN ESCALARES 79
3.1.2 FUNCIONES PARA REDONDEO DE NMEROS 81
3.1.3 FUNCIONES RELACIONADAS CON DISTRIBUCIONES 83
3.2. EJECUCIONES CONDICIONALES Y LOOPS (FLUJOS DE CONTROL) 89
3.2.1 CMO PARAR CICLOS: LA FUNCIN STOP() 99
3.3. OBJETOS EN R 100
3.3.1 FUNCIN APPEND 100
3.3.2 FUNCIN MATRIX, IS.MATRIX, AS.MATRIX 105
3.3.3 FUNCIN DATA.MATRIX 110
2
3.3.4 FUNCIN LIST 112
3.3.5 FUNCIN UNLIST 117
3.3.6 FUNCIN DATA.FRAME 120
3.3.7 REMOVIENDO OBJETOS 124
3
CAPTULO 7: GRFICOS PARA UNA VARIABLE 179
4
9.6. ANLISIS MULTIVARIABLE 253
9.6.1 DISCRIMINACIN, FUNCIN: LDA 254
9.6.2 FUNCIN MAHALANOBIS 258
9.6.3 FUNCIN COV.WT 260
9.6.4 FUNCIN PRCOMP 261
9.6.5 FUNCIN BIPLOT.PRINCOMP 266
9.6.6 FUNCIN BIPLOT 267
9.6.7 FUNCIN SCREEPLOT 270
9.6.8 FUNCIN FACTANAL 271
9.6.9 FUNCIN CANCOR 277
9.6.10 FUNCIN DIST 281
9.6.11 FUNCIN KMEANS 283
9.6.12 FUNCIN HCLUST 287
9.6.13 FUNCIN CUTREE 292
9.7. ANLISIS DE DATOS CATEGRICOS 306
9.7.1 FUNCIN CUT: 306
9.7.2 FUNCIN TABLE: 309
9.7.3 FUNCIN LEVELS 309
9.7.4 FUNCIN FACTOR 309
9.7.5 FUNCIN BINOM.TEST: 311
9.7.6 FUNCIN LOGLIN 315
9.7.7 FUNCIN SPLIT 319
9.8. MODELO LINEAL GENERALIZADO: FUNCIN GLM 323
9.8.1 FUNCIN FAMILY 331
9.9. ANLISIS DE VARIANZA: FUNCIN AOV 333
5
Prefacio
Estas notas son para uso local en la Universidad Nacional-Sede Medelln y se realizaron
para motivar el uso del programa R entre los estudiantes del posgrado de estadstica. El
programa R es una versin del programa S creado en los laboratorios ATT-Bell. Ha tenido
la ventaja de contar con el apoyo de famosos estadsticos y cientficos tales como Hastie,
Tibshirani, Friedman, Ripley, Venables, etc. Muchos han contribudo con nuevas y
novedosas rutinas para implementar nueva metodologa estadstica, lo que lo coloca como
uno de los programas de avanzada para investigadores en estadstica. Fu escrito
bsicamente en Scheme con la implementacin de algunas rutinas provenientes de Fortran.
La filosofa de programacin es muy similar a la del lenguaje C.
R es un paquete estadstico de dominio pblico, pero esto no quiere decir que su calidad
sea baja, por el contrario, su calidad es muy superior a muchos paquetes estadsticos que
6
cuestan una pequea fortuna. Este paquete ha tenido un desarrollo vertiginoso debido al
entusiasmo de un grupo de personas que trabajan en estadstica, que no solo son
estadsticos prestantes sino que tambin aportan sus conocimientos a la comunidad. El
programa se puede obtener, para diferentes plataformas, de la siguiente direccin en
Internet
http : //cran.r project.org
Los orgenes de este programa se remontan a finales de la dcada de los 80, cuando sali el
programa S + y las versiones comerciales de l, en especial el S-Plus. Realmente se trataba
de una emulacin escrita en Scheme que no tuvo un desarrollo grande en sus primeros aos.
A mediados de los 90 se realiza una transaccin comercial que gener cierto resquemor
entre la comunidad de usuarios del S-Plus, StatSci Inc. fue vendida a Mathsoft Inc. Esta
ltima empresa se ha caracterizado por su agresividad comercial y StatSci se caracteriz
por ser una empresa abierta a la comunidad cientfica. Esto motiv que algunos miraran
hacia otro lado. En Internet se consegua R (versin 0.6), un programa altamente inestable,
pero estaba disponible y adems era de cdigo abierto y altamente compatible con S-Plus
(versin 3.1). La migracin fue inmediata y en trmino de dos meses se haban liberado
varias modificaciones del programa empujadas por Brian Ripley, un profesor de Oxford,
experto en simulacin y estadstica espacial, cuyos aportes al S-Plus haban sido
significativos. En la versin de R 0.64 el programa ya era bastante estable y prcticamente
era igual al S-Plus 3.1.
Una de las caractersticas que hizo que la comunidad estadstica en la dcada de los 80
mirara el S-Plus, era su capacidad grfica. Los grficos producidos por este programa son
de altsima calidad (calidad de publicacin) y se pueden realizar grficos de una manera
muy simple. Otra caracterstica es su orientacin a objetos. Los creadores de S + en los
laboratorios de la AT&T siempre defendieron la idea que este era un lenguaje para realizar
anlisis de datos y no un paquete estadstico.
7
Parte I
Manejo de Datos
8
Captulo 1: Introduccin
1.1. Operando R
En el cono de R oprima la tecla derecha del mouse dos veces. El programa ejecuta y
aparece la pantalla de comandos encabezada por lo siguiente:
>
y el cursor se ubicar en esa lnea. El programa espera que usted le d los comandos
respectivos. El smbolo $>$ que aparece al lado izquierdo es el prompt. Ud. no lo tiene que
9
escribir y lo seguiremos escribiendo para conservar uniformidad con los otros textos sobre
R.
> q()
Nota: Es importante notar que para el programa las maysculas son diferentes a las
minsculas, y el comando q() es diferente del comando Q(). Una vez ud. decide
terminar su sesin en R el programa le presenta una ventana en la cual le pregunta si desea
guardar el trabajo ralizado (los comandos, archivos usados y las funciones creadas), si ud.
le responde que no, todo el trabajo realizado se pierde, en caso contrario, su trabajo se
guarda y puede retomarlo en el mismo punto donde lo deja.
Consejo: Una buena alternativa es abrir un editor de textos e ir guardando los comandos
que ud. ha ido utilizando. Guardarlos como un archivo plano o de texto nos permite replicar
el trabajo en caso necesario. Usted tambin puede ir salvando su espacio de trabajo, cosa
que puede ser til cuando se trabaja con varios proyectos que manejen diferentes conjuntos
de funciones y datos.
10
.txt es solo con el fin de enfatizar que el archivo es en ASCII, ellos pueden ser ejecutados
en cualquier momento en una sesin de R simplemente escribiendo el comando
> source(comandos.txt)
Obviamente, deber indicar la ruta completa del archivo que contiene la funcin. Tambin
podemos ir a la barra men FILE y seleccionar la opcin Source R code con la cual se
abre la ventana presentada en el grfico 1.1; all\'\i\ seleccionamos la ruta y archivo
particular en donde se encuentran objetos R tales como funciones, tablas, matrices, etc.
Figura 1.1: Ventana Source R code: Podemos llamar a travs deesta ventana,
disponible en la barra men FILE, cualquier archivo en donde previamente se
han guardado objetos R
11
de datos y graficacin. Existen otros paquetes en los cuales se encuentran herramientas de
anlisis ms especializadas, las cuales pueden ser utilizadas cargando previamente la
librera que las contiene. Una librera o paquete puede cargarse mediante la funcin
library() o bien a travs de la barra men PACKAGE del R, ilustrada en la figura 1.2.
Una descripcin de estas librerias puede obtenerse con:
> library()
12
survival Survival analysis, including penalised likelihood.
tcltk Interface to Tcl/Tk
ts Time series functions
13
Captulo 2: Manejo de Datos en R
Comando Funcin
scan() Lectura de datos. Especial para datos unestructurados.
read.table() Lectura de matrices de datos
read.fwf() Lectura de datos en formato fijo.
sink() Desva la salida de informacin.
write() Escribe una matriz en un archivo de texto.
xtable() Escribe una matriz en formato Latex. Es
necesario cargar la librera xtable.
ftable() Permite presentar decentemente un arreglo
multidimensional.
La funcin scan() puede usarse para leer datos desde un archivo de texto o
interactivamente desde el teclado; es de notar la similaridad con el lenguaje C. Su sintaxis
es como sigue:
14
scan(file = "", what = double(0), nmax = -1,
n = -1, sep = "",quote = if (sep=="\n") "" else "'\"",
dec = ".",skip = 0, nlines = 0, na.strings = "NA",
flush = FALSE, fill = FALSE, strip.white = FALSE,
quiet = FALSE,blank.lines.skip = TRUE,
multi.line = TRUE)
file: Nombre del archivo, desde el cual se leern los datos. Si en su lugar se
especifica ` ', entonces la entrada ser tomada desde el teclado y en este caso la
entrada puede ser terminada por una lnea en blanco. Por ejemplo, es posible entrar
datos por teclado asignados a un objeto R (vector, matriz, lista) mediante la
instruccin scan() luego de dar enter digitar los correspondientes valores. El
nombre del archivo es interpretado en relacin al directorio de trabajo actual (dado
por `getwd()' , a no ser que se especifique una ruta completa. Tambin `file' puede
ser una `connection' (ver funcin connetion) la cual ser abierta cuando es
necesaria y se cerrar al final del llamado de la funcin. `file' puede ser tambin un
URL completo.
what: Indica el tipo de datos (numrico o carcter) a ser ledos. Cuando los datos a
leer estn en un arreglo rectangular de filas y columnas (filas para observaciones y
columnas para variables) en los cules un nmero de variables son de tipo numrico y
otras son alfanumricas, entonces `what' es una lista, cuya longitud corresponde al
nmero de variables o items.
15
nmax: El nmero mximo de valores a ser ledos, o si `what' es una lista, entonces
indica el nmero mximo de registros a ser ledos. Si se omite y `nlines' no est
ajustado a un valor positivo, scan leer todo el archivo.
sep: Por defecto, scan espera leer los campos de entrada delimitados (separados)
por espacios en blanco. Alternativamente, `sep' puede usarse para especificar un
carcter con el cual se han delimitado los campos. Un campo siempre es delimitado
por una nueva lnea a menos que est entre comillas (esto es posible cuando el campo
es definido como alfanumrico).
quote: el conjunto de caracteres entre comillas como una sola cadena de caracteres.
skip: El nmero de lneas del archivo de entrada a omitir antes de comenzar a leer
los datos.
16
fill: Argumento lgico. Si es `TRUE', scan implcitamente agregar campos
vacos a todas las lneas con menos campos que los implicados por `what'.
quiet: Argumento lgico. si es `FALSE' (valor por defecto) scan() imprimir una
lnea diciendo cuantos items han sido ledos.
Detalles:
El valor de `what' puede ser una lista de tipos de caracter, en cuyo caso scan
devuelve una lista de vectores con los tipos dados por los tipos de los elementos en
`what'. Esto proporciona una manera de leer datos en columnas.
17
Campos numricos vacos son siempre considerados como valores faltantes. Campos
de tipo caracter vacos son escaneados como vectores de caracter vacos, a menos que
`na.strings' contenga cuando ellos son considerados como valores faltantes.
Si `sep' est ajustado al valor por defecto, el carcter '\' en una cadena entre comillas
escapa al carcter siguiente, as que las comillas pueden incluirse en la cadena y
pasarlas por alto.
Si `sep' no est ajustado al valor por defecto, los campos pueden estar entre comillas
en el estilo de archivos `.csv' en donde separadores entre comillas (sencillas o dobles)
son ignorados y las comillas pueden ser colocadas dentro de las cadenas
duplicndolas. Pero si sep = \n es asumido por defecto entonces se desea leer
lneas completas tal cual.
Para leer un registro por lnea usar `flush = TRUE' y `multi.line = FALSE'.
Las cadenas de longitud mayor que 8190 caracteres sern truncadas con una
advertencia.
Ejemplos:
18
Uso del argumento n: La funcin scan() permite leer parte del archivo de datos con la
opcin n , por ejemplo,
datos<-scan(c:/miarchivo,what=list( ,0,0),n=5)
Si tenemos una matriz de datos con d columnas y n filas, por el momento suponemos
que solo contiene elementos numricos, en un archivo llamado misdatos, los cuales se
encuentran grabados en un disquete que se coloca en el drive a. El comando es
datos<-matrix(scan("a:misdatos"),ncol=d,byrow=T)
Aqu tenemos una funcin nueva: matrix() . Esta nos permite crear un objeto que es una
matriz. Si los datos estuvieran separados por comas se coloca una opcin adicional de la
siguiente forma:
datos<-matrix(scan("a:misdatos",sep=","'),ncol=d,byrow=T)
Uso del argumento `what': Vamos a leer el siguiente conjunto de datos ubicado en la ruta
c:/graficosr/datosgraficos/renault.dat:
Tipo de Precio en
vehculo millones
Modelo
r4 85 4.00
r4 88 4.30
r4 81 2.85
r4 80 2.95
r4 70 2.20
r4 77 2.45
r4 71 2.00
r4 88 4.90
r4 74 1.78
r4 73 1.70
r4 80 2.90
19
Tipo de Precio en
vehculo millones
Modelo
r12 80 4.60
r12 76 3.80
r12 78 4.80
r12 79 4.70
r12 76 3.60
r12 78 4.50
r12 74 3.50
r12 74 3.50
a<-scan(file="c:/graficosr/datosgraficos/renault.dat",
what=list("",1,1))
Read 19 records
>a
[[1]]
[1] "r4" "r4" "r4" "r4" "r4" "r4" "r4" "r4" "r4" "r4" "r4" "r12"
[13] "r12" "r12" "r12" "r12" "r12" "r12" "r12"
[[2]]
[1] 85 88 81 80 70 77 71 88 74 73 80 80 76 78 79 76 78 74 74
[[3]]
[1] 4.00 4.30 2.85 2.95 2.20 2.45 2.00 4.90 1.78 1.70 2.90 4.60 3.80 4.80 4.70
[16] 3.60 4.50 3.50 3.50
El objeto creado `a', tiene tres componentes, puede llamarse una cualquiera como se indica
a continuacin:
> a[1]
[[1]]
[1] "r4" "r4" "r4" "r4" "r4" "r4" "r4" "r4" "r4" "r4" "r4" "r12" "r12" "r12"
[15] "r12" "r12" "r12" "r12" "r12"
20
En el apndice A se presentan unos datos sobre los resultados de unos estudiantes en las
pruebas del ICFES. Los datos los tenemos en un archivo de texto en un diskette. Los
queremos leer en R. La instruccin ser:
icfes<-scan("c:/graficosr/datosgraficos/icfes.dat",
what=list(" ",1, 1, 1, 1, 1, 1, 1, 1, 1, 1," "))
Supongamos ahora que se quiere construir por teclado, un objeto con dos campos por
registro: sexo (M F) y puntaje, y 10 registros, podemos hacerlo como sigue:
notas<-scan(what=list(character(0),double(0)))
1: F 55
2: M 78
3: M 56
4: F 87
5: F 65
6: M 80
7: F 57
8: F 79
9: M 90
10: M 82
11:
Read 10 records
Nota: Los nmeros al comienzo de cada registros seguidos por dos puntos aparecen
automticamente, y nos indica el nmero de la siguiente observacin a ser entrada desde el
teclado. La entrada de datos se finaliza pulsando la tecla enter dos veces seguidas.
> notas
[[1]]
[1] "F" "M" "M" "F" "F" "M" "F" "F" "M" "M"
[[2]]
[1] 55 78 56 87 65 80 57 79 90 82
21
En los dos ejemplos anteriores el correspondiente objeto creado con scan usando
`what=list(...)', crea listas con las cuales no se pueden operar directamente, hay que
aplicarles una funcin denominada unlist :
sexo<-unlist(notas[1])
nota<-unlist(notas[2])
Observe ahora el uso de comillas para considerar lo que est entre ellas como un solo string
de caracteres:
> b<-scan(what=character(0))
1: 'ciudad
1: de medellin'
2: cali
3: bogota
4:
Read 3 items
> b
[1] "ciudad \nde medellin" "cali" "bogota"
datos<-scan(miarchivo,sep=\n)
#Si tenemos datos separados con
#tabulador entonces el comando es
datos<-scan(miarchivo,sep=\t)
22
#un objeto con dos registros de caracteres:
>a<-scan(sep="\n",what=character(0))
1: a b c
2: d e f
3:
Read 2 items
> a
[1] "a b c" "d e f"
23
> a
[1] 2334 NA 12 45
Uso del argumento `flush': Observe como la expresin entre comillas al final del primer
registro no es tenido en cuenta si `flush=TRUE', en cambio si flush=FALSE', observe el
error que nota el sistema:
> a<-scan(flush=TRUE)
1: 2 "fin"
2: 3
3: 2
4:
Read 3 items
> a
[1] 2 3 2
> a<-scan(flush=FALSE)
1: 2 "fin"
1: 3
Error in scan(flush = FALSE) : "scan" expected a real, got ""fin""
a<-scan(sep="*",flush=TRUE)
1: 23 34*32
24
2: 12
3: 23
4:
Read 3 items
> a
[1] 2334 12 23
> a<-scan(sep="*",flush=FALSE)
1: 23 34*32
3: 12
4: 23
5:
Read 4 items
> a
[1] 2334 32 12 23
> a<-scan(flush=TRUE)
1: 1 2 3
2: 4 5 6
3:
Read 2 items
> a
[1] 1 4
> a<-scan(flush=FALSE)
1: 1 2 3
4: 4 5 6
7:
Read 6 items
> a
[1] 1 2 3 4 5 6
25
> a<-scan(sep="\n",what=character(0),strip.white=TRUE)
1: SER FRT
2: DRT ASE
3:
Read 2 items
> a
[1] "SER FRT" "DRT ASE"
> a<-scan(sep="\n",what=character(0))
1: ser frt
2: drt ase
3:
Read 2 items
> a
[1] " ser frt " "drt ase "
Uso del argumento `multi.line': Observe como en una sola lnea es posible escribir dos
registros:
[[2]]
[1] 1 4 6 8
[[3]]
[1] "A" "B" "C" "D"
26
La funcin read.table() permite leer archivos en ASCII y crear un marco de datos.
Esta funcin tiene la siguiente sintaxis:
antioquia.marco<-read.table("a:antioq.txt",header=FALSE)
antioquia.dat<-data.matrix(antioquia.marco)
27
read.csv2(file, header = TRUE, sep = ";", quote="\"", dec=",",
fill = TRUE, ...)
Argumentos:
file: Nombre del archivo a ser ledo. Las filas de la tabla corresponden a las lneas
del archivo. Cuando no se especifica una ruta para el archivo, se asume el directorio
actual de trabajo. Este argumento tambin puede ser un `connection', o un URL.
header: Argumento lgico para indicar si la primera lnea del archivo contiene
nombres para las variables o columnas. Cuando no se especifica, su valor es ajustado
segn el formato del archivo: Se ajustar a `TRUE' si la primera fila contiene menos
campos que el nmero de columnas.
sep: Caracter para indicar separacin entre campos. Debe corresponder al caracter
que en el el archivo se utilice para separar los valores en una misma lnea. Si `sep = "
" ' (El valor por defecto para este argumento) el separador corresponde a uno o ms
espacios en blanco, tabuladores o lneas nuevas.
quote: Conjunto de caracteres entre comillas. Para desabilitarlo usar `quote=" " '.
28
row.names: Un vector de nombres para las filas. Puede ser un vector que d los
nombres actuales de las filas, o un slo nmero que indique la columna de la tabla
que contiene los nombres de las filas, o una cadena de caracteres que d el nombre de
la columna de la tabla que contiene los nombres de las filas. Si hay un encabezado y
la primera fila contiene un campo menor que el nmero de las columnas, la primera
columna en la entrada es usada es usada para el nombre de las filas. De lo contrario,
si `row.names' no existe, entonces las filas son numeradas. `row.names = NULL'
produce dicha numeracin de las filas.
col.names: Un vector de nombres opcionales para las variables. Su valor por defecto
es usar `"V"' seguido del nmero de la columna.
skip: El nmero de lneas del arhivo de datos a omitir antes de comenzar a leer
datos.
fill: Argumento lgico. Si es `TRUE', si las filas tienen longitud desigual, campos en
blanco son adicionados implcitamente.
29
strip.white: Argumento lgico. Es usado slo cuando `sep' ha sido especificado, y
permite eliminar los epacios en blanco al principio y al final de campos tipo
`character' (esta accin siempre es aplicada sobre campos numricos).
Detalles:
30
para el delimitador. Notar que por defecto en estas ltimas cuatro funciones `header =
TRUE' y `fill = TRUE'.
Adicionalmente, tambin es posible leer datos guardados bien sea en el disco duro del
computador o en alguna unidad de memoria externa con read.table usando el
comando file.choose() , lo cual permite navegar por el sistema de archivos y
abrir aquel que deseamos trabajar:
> read.table(file.choose())
V1 V2 V3
1 r4 85 4.00
2 r4 88 4.30
3 r4 81 2.85
4 r4 80 2.95
5 r4 70 2.20
6 r4 77 2.45
7 r4 71 2.00
8 r4 88 4.90
9 r4 74 1.78
10 r4 73 1.70
11 r4 80 2.90
12 r12 80 4.60
13 r12 76 3.80
14 r12 78 4.80
15 r12 79 4.70
16 r12 76 3.60
17 r12 78 4.50
18 r12 74 3.50
19 r12 74 3.50
31
Ver tambin: `read.fwf' para leer archivos de formato de lectura de ancho fijo,
`read.table.url' para leer archivos de internet, `write.table', `data.frame'. count.fields' es una
funcin que puede ser til para determinar problemas con la lectura de archivos para los
cuales el programa reporta incorrectas longitudes de los registros.
a<-read.table(file="c:/graficosr/datosgraficos/renault.dat",
header=FALSE,
row.names=NULL, as.is=FALSE)
> a
V1 V2 V3
1 r4 85 4.00
2 r4 88 4.30
3 r4 81 2.85
4 r4 80 2.95
5 r4 70 2.20
6 r4 77 2.45
7 r4 71 2.00
8 r4 88 4.90
9 r4 74 1.78
10 r4 73 1.70
11 r4 80 2.90
12 r12 80 4.60
13 r12 76 3.80
14 r12 78 4.80
15 r12 79 4.70
16 r12 76 3.60
17 r12 78 4.50
18 r12 74 3.50
19 r12 74 3.50
32
> a[2]
V2
1 85
2 88
3 81
4 80
5 70
6 77
7 71
8 88
9 74
10 73
11 80
12 80
13 76
14 78
15 79
16 76
17 78
18 74
19 74
>
> a$V2
[1] 85 88 81 80 70 77 71 88 74 73 80 80 76 78 79 76 78 74 74
Observe en el ejemplo anterior las dos diferentes llamadas de la columna 2 (a[2] y a$V2) de
la tabla y sus respectivos resultados; en qu se diferencian?.
33
EAFIT 224 17 651 NA NA 9684
EscIng 9 7 182 28 0 688
CES 36 227 27 6 1 1582
UNAULA 0 0 193 19 1 2006
UCC 0 0 1041 26 0 8295
UdeM 24 15 786 99 10 5907
UPB 111 136 956 98 21 14083
USanBu 26 38 182 45 6 3239
> universidades.dat<-read.table('c:/datos/univers.dat',
+ header=T,row.names=1)
> universidades.dat
ProfTC ProfMT ProfC Magister PhD Estudiantes
UdeA 977 308 1235 454 67 34406
UNal 968 82 262 373 79 9495
EAFIT 224 17 651 NA NA 9684
EscIng 9 7 182 28 0 688
CES 36 227 27 6 1 1582
UNAULA 0 0 193 19 1 2006
UCC 0 0 1041 26 0 8295
UdeM 24 15 786 99 10 5907
UPB 111 136 956 98 21 14083
USanBu 26 38 182 45 6 3239
>
Si deseamos realizar algn tipo de anlisis sobre las variables podemos utilizar el nombre
del objeto ms el signo pesos (\$) seguido del nombre de la variable as:
> mean(universidades.dat$ProfTC)
34
[1] 237.5
> summary(universidades.dat)
ProfTC ProfMT ProfC Magister
Min. : 0.00 Min. : 0.0 Min. : 27.0 Min. : 6.0
1st Qu.: 12.75 1st Qu.: 9.0 1st Qu.: 184.8 1st Qu.: 26.0
Median : 31.00 Median : 27.5 Median : 456.5 Median : 45.0
Mean :237.50 Mean : 83.0 Mean : 551.5 Mean :127.6
3rd Qu.:195.75 3rd Qu.:122.5 3rd Qu.: 913.5 3rd Qu.: 99.0
Max. :977.00 Max. :308.0 Max. :1235.0 Max. :454.0
NA's : 1.0
PhD Estudiantes
Min. : 0.00 Min. : 688
1st Qu.: 1.00 1st Qu.: 2314
Median : 6.00 Median : 7101
Mean :20.56 Mean : 8939
3rd Qu.:21.00 3rd Qu.: 9637
Max. :79.00 Max. :34406
NA's : 1.00
>
Esta funcin permite la lectura de archivos con formato de lectura de ancho fijo dentro de
un `data.frame'. Su valor es un `data.frame'
Argumentos:
35
file: El nombre del archivo (con ruta completa) de lectura de datos.
Alternativamente, v puede ser una `connection', que ser abierta cuando sea necesario
y cerrada al final del llamado de la funcin.
widths: Un vector de enteros que dan los anchos de los campos de ancho fijo en una
lnea.
sep: Caracter para indicar el separador usado internamente; debe ser un caracter que
no ocurra en la fila y con los cuales se presenta el data frame resultante.
Nota: Los campos de ancho cero o que estn totalmente ms all del extremo de la lnea
en `file' son reemplazados por `NA'.
Autor(es): Brian Ripley para la versin R: original `Perl' por Kurt Hornik.
36
Ejemplo: El siguiente ejemplo aparece en el help `R Documentation'; tres funciones son
invocadas en ste: tempfile, cat y unlink; la primera permite crear nombres para
archivos temporales mediante la creacin de un vector de cadena de caracteres usado para
nombrar dichos archivos temporales; la segunda funcin es una funcin de concatenacin e
impresin de argumentos a un archivo, forzndolos primero a un modo de caracteres; y la
ltima funcin permite borrar archivos y directorios especficos:
ff <- tempfile()
cat(file=ff, "123456", "987654", sep="\n")
> ff
[1] "C:\\DOCUME~1\\PROPIE~1\\CONFIG~1\\Temp\\file18467"
read.fwf(ff, width=c(1,2,3))
V1 V2 V3
1 1 23 456
2 9 87 654
unlink(ff)
unlink(ff)
El siguiente ejemplo consiste en la lectura de los tiempos de una maratn realizadas por
180 corredores, en donde cada registro consiste de un cifra de cinco dgitos tales que el
primero corresponde a las horas registradas, el segundo y el tercero a los minutos y cuarto y
quinto a los segundos de cada corredor. El objetivo es descomponer el registro en los
37
valores de horas-minutos-segundos y calcular luego el tiempo total en horas de cada
corredor. El archivo de datos presenta la siguiente estructura:
10253 10302 10307 10309 10349 10353 10409 10442 10447 10452 10504 10517
10530 10540 10549 10549 10606 10612 10646 10648 10655 10707 10726 10731
10737 10743 10808 10833 10843 10920 10938 10949 10954 10956 10958 11004
11009 11024 11037 11045 11046 11049 11104 11127 11205 11207 11215 11226
11233 11239 11307 11330 11342 11351 11405 11413 11438 11453 11500 11501
11502 11503 11527 11544 11549 11559 11612 11617 11635 11655 11731 11735
11746 11800 11814 11828 11832 11841 11909 11926 11937 11940 11947 11952
12005 12044 12113 12209 12230 12258 12309 12327 12341 12413 12433 12440
12447 12530 12600 12617 12640 12700 12706 12727 12840 12851 12851 12937
13019 13040 13110 13114 13122 13155 13205 13210 13220 13228 13307 13316
13335 13420 13425 13435 13435 13448 13456 13536 13608 13612 13620 13646
13705 13730 13730 13730 13747 13810 13850 13854 13901 13905 13907 13912
13920 14000 14010 14025 14152 14208 14230 14344 14400 14455 14509 14552
14652 15009 15026 15242 15406 15409 15528 15549 15644 15758 15837 15916
15926 15948 20055 20416 20520 20600 20732 20748 20916 21149 21714 23256
Sin embargo, para leer estos datos con read.fwf es necesario eliminar los espacios
(con un editor de texto esto resulta rpido y fcil) y que el archivo quede como:
102531030210307103091034910353104091044210447104521050410517
105301054010549105491060610612106461064810655107071072610731
107371074310808108331084310920109381094910954109561095811004
110091102411037110451104611049111041112711205112071121511226
112331123911307113301134211351114051141311438114531150011501
115021150311527115441154911559116121161711635116551173111735
117461180011814118281183211841119091192611937119401194711952
120051204412113122091223012258123091232712341124131243312440
124471253012600126171264012700127061272712840128511285112937
130191304013110131141312213155132051321013220132281330713316
133351342013425134351343513448134561353613608136121362013646
137051373013730137301374713810138501385413901139051390713912
139201400014010140251415214208142301434414400144551450914552
146521500915026152421540615409155281554915644157581583715916
159261594820055204162052020600207322074820916211492171423256
a<-read.fwf(file="c:/manualr/maraton3.txt",
width=rep(c(1,2,2),12),sep=" ")
38
el data frame resultante tiene 36 columnas dado que cada registro (hora, minutos, segundos)
en descompuesto en tres elementos y en total cada lnea posee los registros de los tiempos
de 12 participantes. Pero an es necesario transformar ms estos datos para obtener los
tiempos en horas de los 180 corredores:
tiempo<-matrix(t(as.matrix.data.frame(a)),ncol=3,byrow=T)
\end verbatim
Veamos una presentacin parcial de esta matriz:
tiempo
[,1] [,2] [,3]
[1,] 1 2 53
[2,] 1 3 2
[3,] 1 3 7
[4,] 1 3 9
[5,] 1 3 49
[6,] 1 3 53
[7,] 1 4 9
[8,] 1 4 42
[9,] 1 4 47
[10,] 1 4 52
[11,] 1 5 4
[12,] 1 5 17
.
.
.
.
[161,] 1 54 6
[162,] 1 54 9
39
[163,] 1 55 28
[164,] 1 55 49
[165,] 1 56 44
[166,] 1 57 58
[167,] 1 58 37
[168,] 1 59 16
[169,] 1 59 26
[170,] 1 59 48
[171,] 2 0 55
[172,] 2 4 16
[173,] 2 5 20
[174,] 2 6 0
[175,] 2 7 32
[176,] 2 7 48
[177,] 2 9 16
[178,] 2 11 49
[179,] 2 17 14
[180,] 2 32 56
tiempo<-tiempo[,1]+tiempo[,2]/60+tiempo[,3]/3600
tiempo
40
[89] 1.375000 1.382778 1.385833 1.390833 1.394722 1.403611 1.409167 1.411111
[97] 1.413056 1.425000 1.433333 1.438056 1.444444 1.450000 1.451667 1.457500
[105] 1.477778 1.480833 1.480833 1.493611 1.505278 1.511111 1.519444 1.520556
[113] 1.522778 1.531944 1.534722 1.536111 1.538889 1.541111 1.551944 1.554444
[121] 1.559722 1.572222 1.573611 1.576389 1.576389 1.580000 1.582222 1.593333
[129] 1.602222 1.603333 1.605556 1.612778 1.618056 1.625000 1.625000 1.625000
[137] 1.629722 1.636111 1.647222 1.648333 1.650278 1.651389 1.651944 1.653333
[145] 1.655556 1.666667 1.669444 1.673611 1.697778 1.702222 1.708333 1.728889
[153] 1.733333 1.748611 1.752500 1.764444 1.781111 1.835833 1.840556 1.878333
[161] 1.901667 1.902500 1.924444 1.930278 1.945556 1.966111 1.976944 1.987778
[169] 1.990556 1.996667 2.015278 2.071111 2.088889 2.100000 2.125556 2.130000
[177] 2.154444 2.196944 2.287222 2.548889
summary(tiempo)
Min. 1st Qu. Median Mean 3rd Qu. Max.
1.048 1.202 1.384 1.445 1.625 2.549
> x<-c(3.6,2.5,1.2,0.6,1.3,2.1)
41
Este es un comando de asignacin que utiliza la funcin c() con la cual creamos vectores
y que en este contexto puede tomar un nmero arbitrario de argumentos. El resultado final
es un vector que concatena los argumentos de la funcin c() . Esta funcin combina
valores en un vector o lista. El mtodo por defecto combina los argumentos para formar un
vector. Todos los argumentos son forzados a un tipo comn que corresponde al valor
retornado por la funcin.
c(..., recursive=FALSE)
Argumentos:
Ejemplos:
> c(1,7:9)
[1] 1 7 8 9
42
B
1
> list(A=c(B=1))
$A
B
1
$B
E
7
frutas<-c("pera","manzana","banano","pera","curuba")
> x <-0
> y <-x<-0
43
Como se mostr previamente, datos pueden tambin entrarse con la funcin scan() de
una forma muy simple
> x<-c(scan())
1: 3.6 2.5
2: 1.2 0.6 1.3 2.1
7:
>
Esto nos permite entrar tantos datos por linea como queramos, dejando espacio entre datos
consecutivos. Si queremos ver en pantalla el vector de datos x la instruccin ser:
>x
>win.graph()
>velocidades<-c(scan())
1: 48 57 52 45
5: 46 57 38
8: 59 55 53 53 49 46
:
:
66: 40 45
68:
>summary(velocidades)
>hist(velocidades)
>stem(velocidades)
>boxplot(velocidades)
>plot(density(velocidades),type=l)
44
>q()
>ciudades<-scan(what=character(0))
>
Entrando Listas
Si se desea entrar un conjunto de datos que contienen tanto variables numricas como
alfanumricas, por ejemplo nombre, peso y edad, se har como se explic previamente (ver
funcin scan ):
1: Juan 70 25
4: Pedro 65 28
7: Maria 50 22
10: Norma 55 39
13:
>
R permite crear secuencias de una forma gil. Por ejemplo 1:5 es equivalente a c(1,2,3,4,5).
45
> s1<-2:10
El anterior comando crea un vector llamado s1 con los elementos 2, 3, 4,..., 10.
> s1<-2:10
> s1
[1] 2 3 4 5 6 7 8 9 10
> s2<-10:2
> s2
[1] 10 9 8 7 6 5 4 3 2
>
Otra forma, an ms poderosa de crear secuencias es usar la funcin seq() , ya que esta
permite definir un incremento. El smbolo : tiene la ms alta prioridad dentro de una
expresin. Un ejemplo de esto es,
s2<-seq(1,2,by=.2)
Este comando crea un vector s2 con los elementos 1.0, 1.2, 1.4, 1.6, 1.8, 2.0.
> s2<-seq(1,2,by=.2)
> s2
[1] 1.0 1.2 1.4 1.6 1.8 2.0
> s2<-seq(2,1,by=-.2)
> s2
[1] 2.0 1.8 1.6 1.4 1.2 1.0
> s2<-seq(2,1,length=6)
> s2
[1] 2.0 1.8 1.6 1.4 1.2 1.0
46
Replicacin de una estructura
La funcin rep() puede usarse para replicar una estructura particular cierto nmero de
veces. La forma ms simple es
s3<-rep(x,times=4)
> x<-c(1,3,2,5)
> s3<-rep(x,times=4)
> s3
[1] 1 3 2 5 1 3 2 5 1 3 2 5 1 3 2 5
>
Cuando tenemos valores de las variables faltantes debemos denotarlos en R con NA. Sin
embargo si tenemos un archivo donde los datos faltantes se denoten con otro carcter
entonces en la opcin na.strings = NA de la funcin scan() o de la funcin
read.table() reemplazamos el NA por el smbolo adecuado.
47
260 330 4
75 * 3
85 100 3
165 235 4
donde los valores faltantes se han denotado por una * . En R le damos el comando
siguiente para su lectura:
> apartamentos.dat<-read.table('c:/datos/aptos.txt',header=T,
na.strings = "*")
> apartamentos.dat
precio mts2 piezas
1 120 NA 3
2 175 NA 3
3 NA 220 4
4 95 NA 4
5 NA 80 2
6 120 141 3
7 260 330 4
8 75 NA 3
9 85 100 3
10 165 235 4
y observamos como el programa reemplaza los smbolos por el adecuado para manejo
interno.
48
2.3. Funciones de Escritura y Exportacin de Datos que
Estn en R
2.3.1 Funcin dump
Si queremos crear un archivo en ASCII que contenga un objeto usamos la funcin dump().
Esta funcin permite realizar representaciones de objetos R tomando un vector de nombres
de dichos objetos y produciendo representaciones textuales de estos en un archivo o
conexin. un archivo `dump' puede ser retomado en una sesin R con la funcin source.
Argumentos:
file: Corresponde bien sea a una cadena de caracter nombrando un archivo o una
conexin. `" " ' indica salida a la consola (pantalla).
append: Si es TRUE, la salida ser aadida a `file'; de otra forma, sobreescribir los
contenidos de `file'.
Detalles:
49
La funcin save est diseada para ser usada para transportar datos R entre
mquinas.
x <- 1
y <- 1:10
dump(c("x","y"),file="c:/result.txt")
Supongamos ahora que estamos iniciando una nueva sesin en R, y queremos utilizar los
objetos `x' e `y' en dicha sesin; para ello, llamamos el archivo c:/result.txt con la funcin
source:
> source("c:/result.txt")
> x
[1] 1
> y
[1] 1 2 3 4 5 6 7 8 9 10
Si un nuevo vector `z' es creado y se desea aadir al archivo
c:/result.txt:
z<-rnorm(100)
dump("z",file="c:/result.txt",append=TRUE)
50
Ahora, crearemos una funcin llamada `resumen' la cual aadiremos como un objeto R en
c:/result.txt:
resumen<-function(x){
media<-mean(x)
desv.std<-sqrt(var(x))
coef.var<-(desv.std/media)*100
mediana<-median(x)
list(media=media,desv.std=desv.std,coef.var=coef.var,mediana=mediana)
}
dump("resumen",file="c:/result.txt",append=TRUE)
Supongamos que necesitamos en una nueva sesin de trabajo algunos de los objetos R
guardados en c:/result.txt, podemos llamarlos cargando todos los objetos disponibles en
tal archivo con source("c:/result.txt"); por ejemplo, si requerimos la funcin `resumen' para
aplicarla a un conjunto de datos `a':
source("c:/result.txt")
a<-rnorm(50,5,2)
#aplicacin de la funcin resumen
#sobre el vector a.
resumen(a)
$media
[1] 5.129502
51
$desv.std
[1] 2.066936
$coef.var
[1] 40.29506
$mediana
[1] 5.242943
52
Otro ejemplo: si en el espacio de trabajo R existen ciertos objetos R y deseamos
guardarlos todos en un mismo archivo, podemos hacerlo como sigue:
a<-rexp(10)
> b<-rnorm(20)
> c<-a/b
#listado de todos los objetos R
#disponibles en la sesin:
> ls()
[1] "a" "b" "c"
> dump(ls(),file="c:/objetos.txt")
> d<-matrix(b,ncol=4)
> dump("d",file="c:/objetos.txt",append=TRUE)
>
En la figura 2.2 puede observarse el contenido final del archivo "c:/objetos.txt". Las
funciones print(), format(), cat() y paste() pueden usarse para formatear la salida
a ser escrita en un archivo externo. Las funciones data.dump() , dump() y dput()
escriben objetos de R a archivos ASCII pero no en formato de texto regular. Ellas se
utilizan para transferir datos entre mquinas.
53
Figura 2.2: Datos en c:/objetos.txt
Para escribir una matriz a un archivo ASCII utilizamos esta funcin donde los datos que
corresponden a una matriz `x' son escritos al archivo `file'. Cuando `x' es una matriz de dos
o ms dimensiones es necesario trasponerla para que las columnas que aparezcan en `file'
coincidan con las de `x'.
Argumentos:
54
file: Una conexin o una cadena de caracteres nombrando el archivo al cual se
escribirn los datos.
Ver tambin: save para escribir cualesquiera objetos R; write.table para data
frames (marcos de datos).
Ejemplos: A continuacin guardamos una matrix `x' creada con \tt matrix (ver ms
adelante esta funcin) la cual es guardada en el archivo c:/manualr/write.txt (ver figura
2.3):
55
[3,] 0.7992131 -0.066703082 0.62109208 -0.28452693
[4,] 2.0775911 0.569413512 2.03562228 3.47638462
[5,] 1.4738575 -0.004902835 1.33584992 -2.14009081
[6,] -2.1628119 -1.078721708 -0.06621326 -0.87445892
[7,] -0.3956469 0.285227385 -0.05265089 0.54351961
[8,] 1.2897217 -0.679368675 -0.52699198 0.86417546
[9,] -0.7860005 1.374524963 1.13809830 -0.06029963
[10,] -0.2013117 -1.411422651 -0.60979649 -0.30612573
A veces se requiere tener un archivo ASCII con los resultados que se obtengan en una
sesin para una edicin posterior. sink desva una salida de R a una conexin. Esta nos
redirige la salida de los comandos de la pantalla a un archivo. En la terminal no observamos
56
nada. Es muy til cuando se ejecutan trabajos como simulaciones (una alternativa obvia
bajo Windows es utilizar las opciones Cortar/Pegar).
Argumentos:
Detalles:
La salida Normal de R es desviada por defecto a `type = output '. nicamente los
apuntadores (prompts) y los mensajes de advertencia/error siguen apareciendo en la
terminal. Estos tambin puede desviarse por `type = message '.
57
si `file' es una conexin ser abierta cuando sea necesario. switchear a otro archivo o
conexin cierra y destruye el actual sink connection si ste es una conexin archivo
Advertencia: No usar una conexin que es abierta por sink para cualquier otro
propsito. El programa lo detendr a usted cerrando tal conexin inadvertidamente. No
aplicar sink al flujo de mensajes a menos que comprenda el cdigo fuente para
implementacin y por tanto las trampas.
>sink("c:/sink-examp.txt")
>i <- 1:10
>outer(i,i,"*")
>sink()
>sink("c:/sink-examp.txt", append=TRUE)
>m<-matrix(rnorm(100),ncol=10)
>m
>sink()
>unlink("c:/sink-examp.txt")
58
Figura 2.4: Datos en c:/sink-example
59
as.table.ftable(x)
read.ftable(file, sep = "", quote = "\"",
row.var.names, col.vars, skip = 0)
write.ftable(x, file = "", quote = TRUE,
digits = getOption("digits"))
Argumentos:
x: Un objeto R arbitrario.
file: Puede ser una cadena de caracters nombrando un archivo o conexin desde la
cual los datos van a ser ledos o a donde van a ser escritos. ` 'indica entradas desde
la consola para leer y salidas a la consola para escribir.
60
sep: Cadena separadora de campos. Los valores en cada lnea del archivo estn
separadas por esta cadena.
quote: Una cadena de caracteres dando el conjunto de caracteres entre comillas para
read.ftable; para deshabilitar comillas por completo, usar `quote= . Para
write.table es un valor lgico indicando si las cadenas en los datos estn entre
comillas dobles.
col.vars: Una lista dando los nombres y los niveles de ls variables columna, en caso
que stos no puedan ser determinados automticamente.
digits: Un entero dando el nmero de dgitos significativos a ser usados para las
entradas de celda de `x'.
Detalles:
61
modo que los niveles de la variable ms a la izquierda varan ms lento). Presentando
una tabla de contingencia en esta forma de matriz categrica (por medio de
`print.ftable', que es el mtodo de impresin de los objetos clase ftable) es a
menudo preferible para mostrarla como un arreglo un arreglo en alta dimensin.
62
La funcin write.ftable escribe una tabla categrica a un archivo, lo cual es
til para generar representaciones ASCII pretty de tablas de contingencias.
Notar que las tablas categricas estn caracterizadas por sus presentaciones
recortadas de las etiquetas de filas (puede ser tambin el caso para las columnas). Si
la rejilla completa de los niveles de las variables fila es dado, uno debera usar ms
bien read.table para leer los datos, y crear la tabla de contingencia usando
xtabs.
Valor: ftable devuelve un objeto de clase ftable, el cual es una matriz con conteos en
cada combinacin de los niveles de las variables con informacin sobre los nombres y
niveles de las variables (fila y columnas) guardadas como atributos row.vars ycol.vars.
63
Ver tambin: ftable.formula para interface de frmula (la cual permite un argumento
`data = .'); table para tabulacin cruzada ordinaria; xtabs para tabulacin cruzada basada
en frmula.
data(Titanic)
> Titanic
, , Age = Child, Survived = No
Sex
Class Male Female
1st 0 0
2nd 0 0
3rd 35 17
Crew 0 0
Sex
Class Male Female
1st 118 4
2nd 154 13
3rd 387 89
Crew 670 3
Sex
Class Male Female
1st 5 1
64
2nd 11 13
3rd 13 14
Crew 0 0
Sex
Class Male Female
1st 57 140
2nd 14 80
3rd 75 76
Crew 192 20
65
Class Sex
1st Male 118 62
Female 4 141
2nd Male 154 25
Female 13 93
3rd Male 422 88
Female 106 90
Crew Male 670 192
Female 3 20
> data(mtcars)
> mtcars
66
Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3
Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2
Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2
Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6
Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2
67
1 0 0 1
1 0 1 2 0
1 0 6 1
6 0 0 0 0 0
1 0 2 1
1 0 2 2 0
1 0 0 0
8 0 0 12 0 0
1 0 0 2
1 0 0 0 0
1 0 0 0
>
#Diseando la tabla:
cat(" Intercourse\n",
"Race Gender Yes No\n",
"White Male 43 134\n",
68
" Female 26 149\n",
"Black Male 29 23\n",
" Female 22 36\n",
file = file)
>file
[1] "C:\\DOCUME~1\\PROPIE~1\\CONFIG~1\\Temp\\file26500"
file.show(file)
ft <- read.ftable(file)
ft
Intercourse Yes No
Race Gender
White Male 43 29
Female 134 23
Black Male 26 22
Female 149 36
unlink(file)
69
"Noncarriers 497 560 269\n",
"Carriers 19 29 24\n",
file = file)
file.show(file)
ft <- read.ftable(file, skip = 2,
row.var.names = "Status",
col.vars = list("Tonsil Size" =
c("Not Enl.", "Enl.", "Greatly Enl.")))
ft
Tonsil Size Not Enl. Enl. Greatly Enl.
Status
Noncarriers 497 269 29
Carriers 560 19 24
>
unlink(file)
70
A continuacin, construiremos una tabla a partir de una base de datos, la cual contiene 12
variables relacionadas con los resultados en las pruebas del ICFES, realizadas durante
varios aos, los cuales estn disponibles en BASES DE DATOS", J. C. Correa y J. C.
Salazar, 1997, UNAL. De las 12 variables, hay tres que pueden considerarse como factores,
a saber: sexo (M, F), ao en que se tom la prueba (89,92,93) y tipo de electiva (ABS
(razonamiento abstracto), MET (metalmecnica), CON (contabilidad), ING (ingls), ELE
(elctrica), MEC (razonamiento mecnico)):
ftable(icfes[c("sexo","ano","tipoElect")])
>icfes.tabla<-ftable(icfes[c("sexo","ano","tipoElect")])
>icfes.tabla
tipoElect ABS CON ELE ING MEC MET
sexo ano
F 89 0 17 0 1 1 0
92 0 16 0 2 0 0
93 0 14 0 19 1 3
M 89 3 0 8 1 0 6
92 2 1 2 10 5 2
93 1 0 2 0 7 8
>
71
#Guardando la tabla anterior
#como un objeto R (ver figura 2.6):
dump("icfes.tabla",file="c:/tabla.txt")
write.ftable(icfes.tabla,file="c:/tabla2.txt")
72
Figura 2.7: Datos en c:/tabla2.txt"
73
Captulo 3: Manipulacin de Datos
3.1. Operadores
+ : Suma
- : Resta
* : Multiplicacin
/ : Divisin
^ : Exponenciacin
%% : Operador mdulo
Operadores de comparacin
< : menor
>: mayor
74
<= : menor o igual
= = : igual
!= : diferente
Operadores Lgicos
&:y
|:
! : no
all(...): Todo
any(...): Ninguno
Operadores de Control
75
Si x y z son vectores, no necesariamente de la misma dimensin, entonces podemos
ejecutar los siguientes comandos
> y<-x+z
> y2<-x-z
> y3<-2*x+z-3
> y4<-1/x
Subndices
x[ subindice]
Enteros positivos:
Valores lgicos:
76
x[x > 0] Slo tomamos los valores de x que sean positivos.
nombre[estatura > 175 & edad < 30] Nos quedamos con aquellos nombres cuyas
correspondientes esturas sean mayores a 175 y la edad sea menor de 30.
Enteros negativos:
Ejemplo: Los siguientes datos corresponden a informacin tomada del anuario estadstico
de Antioquia de 1996, de los cuales la segunda columna se refiere a la temperatura en las
cabeceras municipales. El objetivo es crear una nueva variable categrica que clasifique
los municipios de acuerdo a rangos de temperatura Muy Baja, Baja, Media y
Alta:
>datos.antioquia<-scan()
1: 1 22 1834881 53822 432680 36053 4114 16763 489610 419676 35912 4068 11870 471526 95.3
16: 1 22 34985 1718 3481 432 14 32 3959 3130 430 14 31 3605 95.9
31: 1 22 293841 9472 63961 2205 266 968 67400 62288 2166 242 849 65545 95
46: 1 19 56488 1825 8481 1119 45 34 9679 8172 1103 45 32 9352 95
61: 1 22 49649 2306 10223 580 57 161 11021 8632 545 45 159 9381 91
76: 1 21 123943 5928 32652 2649 296 299 35896 30951 2619 291 295 34156 97.1
91: 1 22 31168 1662 4662 383 26 54 5125 4298 348 9 52 4707 95.6
106: 1 21 193381 11077 44940 4424 978 575 50917 42700 4366 956 513 48535 98.8
121: 1 20 41592 931 5352 259 95 204 5910 4766 243 89 187 5285 93.7
136: 1 20 29870 1476 6856 771 245 163 8035 6694 762 239 127 7822 97.1
151: 2 28 22362 1068 860 37 0 19 916 667 34 0 17 718 58.6
166: 2 28 54210 1228 8970 776 0 57 9803 3751 286 0 28 4065 39.8
181: 2 28 11003 309 1132 109 0 21 1262 38 0 0 0 38 20
.
.
.
1366: 8 21 12356 433 1002 102 1 33 1138 796 68 0 24 888 84.8
1381: 8 20 36194 308 3124 294 0 60 3478 3086 294 0 60 3440 91.6
1396: 8 21 9352 229 1032 77 0 31 1140 758 72 0 23 853 86
77
1411: 8 21 13830 429 1333 123 0 22 1478 989 107 0 16 1112 91.9
1426: 9 28 78019 2403 8868 882 3 70 9823 3662 713 0 28 4403 60
1441: 9 28 23895 677 1380 127 0 32 1539 1008 118 0 31 1157 45
1456: 9 28 44201 1762 3764 337 0 41 4142 2183 275 0 31 2489 44.5
1471: 9 28 2959 81 0 0 0 0 0 0 0 0 0 0 0
1486: 9 28 12670 1354 618 59 0 35 712 NA NA NA NA NA 80
1501: 9 28 99782 2277 5089 343 0 63 5495 NA NA NA NA NA 45
1516: 9 28 9403 96 450 47 0 0 497 0 0 0 0 0 0
1531:
Read 1530 items
datos.antioquia<-matrix(datos.antioquia,ncol=15,byrow=T)
temperatura<-c(datos.antioquia[,2])
tipo<-rep(NA,length(temperatura))
tipo[temperatura<=15]<-'MUy Baja'
tipo[15<temperatura & temperatura<=20]<-'Baja'
tipo[20<temperatura & temperatura<=25]<-'Media'
tipo[25<temperatura]<-'Alta'
> tipo
[1] "Media" "Media" "Media" "Baja" "Media" "Media"
[7] "Media" "Media" "Baja" "Baja" "Alta" "Alta"
[13] "Alta" "Alta" "Alta" "Alta" "Media" "Alta"
[19] "Alta" "Alta" "Media" "Media" "Media" "Media"
[25] "Media" "Baja" "Media" "Media" "Media" "Media"
[31] "Media" "MUy Baja" "Media" "Baja" "Baja" "Baja"
[37] "Baja" "Baja" "Media" "Media" "MUy Baja" "MUy Baja"
[43] "MUy Baja" "Baja" "Media" "MUy Baja" "Baja" "Baja"
[49] "Media" "Media" "Media" "Media" "Media" "Alta"
[55] "Media" "Media" "Baja" "Baja" "Baja" "Baja"
[61] "Media" "Baja" "Baja" "Baja" "Baja" "Baja"
[67] "Baja" "Baja" "Baja" "MUy Baja" "Baja" "Baja"
[73] "Baja" "Media" "Media" "Baja" "MUy Baja" "Media"
[79] "Media" "Baja" "Baja" "Baja" "Media" "Baja"
[85] "Media" "Baja" "Baja" "MUy Baja" "Baja" "Media"
[91] "Baja" "Media" "Baja" "Media" "Media" "Alta"
78
[97] "Alta" "Alta" "Alta"
Existen una gran cantidad de funciones que al ser aplicadas a un vector producen como
resultado un escalar. Entre ellas tenemos:
var(): retorna la varianza de todos los elementos del argumento, cuando ste es un
vector, o la matriz de varianzas - covarianzas si el argumento es una matriz.
length(): retorna el nmero de elementos del argumento si este es una lista o vector.
79
nrow(): nmero de filas si el argumento es una matriz
Ejemplo:
> x<-rexp(20)
> x
> max(x)
[1] 4.384231
> min(x)
[1] 0.01892189
> sum(x)
[1] 18.58872
> mean(x)
[1] 0.9294361
> length(x)
[1] 20
> median(x)
[1] 0.5970693
> var(x)
[1] 1.102911
> quantile(x,probs=0.75)
75%
1.402682
> s<-summary(x)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.01892 0.18790 0.59710 0.92940 1.40300 4.38400
80
> length(s)
[1] 6
#presentando un componente de s:
> s[1]
Min.
0.01892
Transformando a s en un vector:
> c<-as.vector(s)
> c
[1] 0.01892 0.18790 0.59710 0.92940 1.40300 4.38400
81
signif: Redondea los valores en su primer argumento al nmero especificado de
dgitos significativos.
trunc: Toma un nico argumento numrico `x' y devuelve un vector numrico que
contiene los enteros truncando los valores en `x' hacia 0.
ceiling(x)
floor(x)
round(x, digits = 0)
signif(x, digits = 6)
trunc(x)
zapsmall(x, digits= getOption("digits"))
Argumentos:
x: Un vector numrico.
Ejemplos:
82
[1] -1 0 1 2 3 4 5
> floor(a)
[1] -2 -1 0 1 2 3 4
> round(a)
[1] -2 0 0 2 2 4 4
> signif(a)
[1] -1.5 -0.5 0.5 1.5 2.5 3.5 4.5
> trunc(a)
[1] -1 0 0 1 2 3 4
> zapsmall(a)
[1] -1.5 -0.5 0.5 1.5 2.5 3.5 4.5
> a<-rexp(6)
> a
[1] 0.9239737 0.1208308 0.2554847 0.1632143 0.1176684 0.7598348
> round(a)
[1] 1 0 0 0 0 1
> ceiling(a)
[1] 1 1 1 1 1 1
> floor(a)
[1] 0 0 0 0 0 0
> round(a,digits=3)
[1] 0.924 0.121 0.255 0.163 0.118 0.760
> signif(a,digits=3)
[1] 0.924 0.121 0.255 0.163 0.118 0.760
> trunc(a)
[1] 0 0 0 0 0 0
> zapsmall(a)
[1] 0.9239737 0.1208308 0.2554847 0.1632143 0.1176684 0.7598348
83
Distribucin Densidad Funcin Acumulada
Donde:
x, q: Es un vector de cuantiles.
p: Vector de probabilidades.
84
log, log.p: Argumentos lgicos; si son TRUE, las probabilidades p son dadas como
log(p).
85
df: En las distribuciones t y Ji son los grados de libertad.
Detalles:
(a ) (b)
2n / 2 ( n / 2)
86
La distribucin Ji cuadrado con df=n grados de libertad y parmetro de no
( / 2)
r
centralidad ncp= tiene densidad f ( x) = e /2
dchisq ( x , df + 2r ) para x 0.
r=0 r!
p( x) =
m n m+n para max(0,k-n) x min(m,k)
x k x k
87
La distribucin t no central con parmetros (df, ncp) es definida como la
distribucin de T ( df , ncp ) =
U + ncp , donde U y X(df) son variables aleatorias
X ( df ) / ( df )
nmero de fallas las cuales ocurren en una secuencia de intentos bernoullis antes de
que un nmero de xitos objetivo sea alcanzado. Una distribucin binomial negativa
se deriva como una mezcla de distribuciones poisson con media distribuda como una
gamma con parmetro de escala (1 - prob)/prob y de forma size (esta
definicin permite valores no enteros para size ). En este modelo
prob=scale/(1+scale) y la media es size*(1 - prob)/prob).
88
Distribucin Cuantiles Nmeros Aleatorios
Gamma qgamma(p; shape; scale=1; lower.tail = TRUE; rgamma(n; shape; scale=1)
log.p = FALSE)
JI cuadrado qchisq(p; df; ncp=0; lower.tail = TRUE; log.p rchisq(n; df; ncp=0)
= FALSE)
Exponencial qexp(p; rate = 1; lower.tail = TRUE; log.p = rexp(n; rate = 1)
FALSE)
F qf(p; df1; df2;lower.tail = TRUE; log.p = rf(n; df1; df2)
FALSE)
Hipergeom. qhyper(p; m; n; k; lower.tail = TRUE; log.p = rhyper(nn; m; n; k)
FALSE)
t qt(p; df;lower.tail = TRUE; log.p = FALSE) rt(n; df)
Donde:
El lenguaje permite la construccin de condiciones para el control del flujo como cualquier
lenguaje de programacin. Son las construcciones de flujo de control bsicos del lenguaje
R. Son similares a los argumentos de control de cualquier lenguaje algortmico:
if(cond) expr
89
if(cond) cons.expr else alt.expr
for(var in seq) expr
while(cond) expr
repeat expr
break
next
if....else
> if(expresion 1) {
...comandos R... }
else {
...comandos R... }
Cuidado:
En lenguajes vectorizados se pueden cometer errores que son difciles de detectar. Por
ejemplo supongamos que tenemos la variable sexo codificada como (1, 2) y supongamos
que deseamos recodificarla a (1, 0). La siguiente instruccin, que en su estructura es similar
a la que utilizan muchos lenguajes, produce un error:
90
Una solucin es la siguiente:
> sexo<-ifelse(sexo==2,0,1)
if(...){
.
.
.
}
else{
.
.
.
}
Ejemplo:
Supongamos que se lanza un dado cargado de forma que los pares son dos veces ms
probables que los impares (de donde probabilidad de cada impar es 1/9 y de cada par es
2/9). Simulemos 100 lanzamiento de dicho dado:
91
#Creacin de una funcin
#para simular el resultado
#del lanzamiento de un dado
#cargado con prob(par):2(impar)
lanzamiento1<-function(n=1){
#generar un numero entre
#0 y 1 (las cdf observadas):
F<-runif(n)
#Definir las cdf:
F1<-1/9
F2<-3/9
F3<-4/9
F4<-6/9
F5<-7/9
F6<-1
#Determinar el resultado
#con base en el valor
#cdf observado:
if(F<=F1)result<-1 else
if(F<=F2)result<-2 else
if(F<=F3)result<-3 else
if(F<=F4)result<-4 else
if(F<=F5)result<-5 else
if(F<=F6) result<-6
res<-c(F,result)
}
#Generar resultados en 1000
#lanzamientos:
> muestra<-matrix(rep(1,1000),ncol=1)
> result<-t(apply(muestra,1,lanzamiento1))
> result
[,1] [,2]
[1,] 0.709534370 5
[2,] 0.164301291 2
92
[3,] 0.088355489 1
[4,] 0.244265059 2
[5,] 0.197429391 2
[6,] 0.491711938 4
[7,] 0.739780114 5
[8,] 0.078908737 1
[9,] 0.389658087 3
[10,] 0.957607416 6
.
.
.
[992,] 0.091973664 1
[993,] 0.020980510 1
[994,] 0.128269766 2
[995,] 0.854701702 6
[996,] 0.127352686 2
[997,] 0.478872951 4
[998,] 0.290334604 2
[999,] 0.442169692 3
[1000,] 0.716538823 5
Funcin ifelse
93
ifelse devuelve un valor con la misma forma que el argumento `test' el cual es llenado
con elementos seleccionados bien sea del argumento `yes' o del argumento `no'
dependiendo de si el elemento de `test' es `TRUE' O `FALSE'. si los argumentos `yes' `no'
son muy cortos, entonces sus elementos son reciclados.
Argumentos:
Ejemplos:
x <- c(6:-4)
>sqrt(x)#Produce advertencia
94
[9] NA NA NA
Warning message:
NaNs produced in: sqrt(x)
Generar 100 observaciones de una distribucin normal estndar y determinar cuntas estn
dentro de dos desviaciones estndar de la muestra:
x<-rnorm(100)
media<-mean(x)
desv.est<-sqrt(var(x))
desv<-abs(x-media)
cuenta<-ifelse(desv<(2*desv.est),1,0)
cuenta
[1] 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[38] 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[75] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1
sum(cuenta)
[1] 95
mean(cuenta)
[1] 0.95
for
nombre es una variable de control del loop. expresin1 es un vector, por ejemplo del
tipo 1:20; y expresin2 usualmente es un conjunto agrupado de instrucciones a ser
repetidas a medida que cambie la variable que controla el loop.
95
En lenguajes vectorizados, como el R, el uso de loops no es recomendado y en versiones
viejas del programa se presentaban grandes problemas con su uso. Uno de los problemas
que se presenta es que el programa no libera memoria sino cuando se regresa al prompt. De
esta forma cualquier operacin iterativa mucha memoria puede ser utilizada (no
necesariamente por un nmero grande de iteraciones, con nmeros tan pequeos como 10
puede ocurrir). Esto causa que el computador se quede sin memoria o que se presente un
uso intensivo del disco duro. Otro sntoma, cuando se trabaja en estaciones con posibilidad
de realizar mltiples tareas simultneamente o con varios usuarios, es que el sistema se
vuelva en extremo lento. Algunos remedios pueden ser los siguientes:
1. Evite las iteraciones tanto como sea posible utilizando los arreglos y las operaciones
sobre listas (ejemplos: apply, lapply; adems de las operaciones matriciales
corrientes).
x<-rnorm(100000)
media.1<-function(x){
temp<-0
for(i in 1:length(x)){ temp<-temp[i]
media<-temp/length(x)
media}
}
media.2<-function(x) sum(x)/length(x)
media.3<-function(x) mean(x)
#Determinacin del tiempo de
#uso de la cpu o procesamiento:
system.time(media.1(x))
[1] 0.45 0.00 0.45 NA NA
system.time(media.2(x))
[1] 0 0 0 NA NA
system.time(media.3(x))
96
[1] 0.01 0.00 0.01 NA NA
El tiempo gastado por el programa para calcular la media es 10 veces mayor utilizando el
for que utilizando la funcin mean() o con sum() .
>repeat expresion
y el comando
#iniciar un contador en 0
k<-0
97
#los parmetros
t<-2
a<-2
b<-0.5
gamma<-0.9
#inicializar la probabilidad
#buscada, con un valor de cero.
p.est.n<-0
nsim<-1000
ksim<-100
while(p.est.n<gamma){
k<-k+1
conta<-0
#Repetir nsim veces la generacin de
#ksim valores aleatorios de tau para el valor
#actual de k:
for(i in 1:nsim){
tau.obs<-c(rep(0,ksim))
}
#Generar ksim valores de tau que
#corresponde a la suma de k weibulls(a,b)
#y guardarlos en el vector tau.obs previamente
#inicializado con ceros:
for(j in 1:ksim){
98
T<-rweibull(k,shape=a,scale=b)
tau.obs[j]<-sum(T)
}
#Conteo por cada muestra de tamao ksim
#de los valores generados de tau mayores
#que el valor t considerado, y almacenamiento
#de estos conteos en un vector ("conta" cuyo
#primer valor ser siempre 0 para poder usar
#luego la funcin append) cuyos elementos
# se van incrementado hasta que el valor de k
# es tal que la propocin muestral "p.est.n" de
# valores de (tau >t) es mayor o igual a gamma:
cont<-length(tau.obs[tau.obs>t])
conta<-append(conta,cont)
}
p.est.n<-sum(conta)/(ksim*nsim)
res<-list(nro.reserv=k-1,p.est.n=p.est.n)
}
> res
$nro.reserv
[1] 6
$p.est.n
[1] 0.97
La funcin stop() sirve para abortar un procedimiento para el que se cumpla alguna
condicin particular. Detiene la ejecucin de la expresin actual, imprime el mensaje dado
como argumento, y luego ejecuta una accin de error.
99
stop(message = NULL, call. = TRUE)
Argumentos:
call.: Argumento lgico que indica si la llamada ser parte del mensaje de error.
Ejemplo:
3.3. Objetos en R
100
append(x, values, after=length(x))
Argumentos:
after: Un subndice, despus del cual los valores van a ser agregados.
Valor: Esta funcin genera un vector que contiene los valores en `x' con los
elementos de `values' agregados despus del elemento de `x' especificado.
Ejemplos:
> a<-c(rnorm(10))
> a
[,1]
[1,] -1.2961701
[2,] -0.9220065
[3,] -1.1227425
[4,] -3.1331096
[5,] -1.3215306
[6,] 0.4399376
[7,] -1.6406378
[8,] -0.6781794
[9,] 2.1854698
[10,] -0.8711059
> b<-c(rexp(10))
> b
[,1]
[1,] 0.6752021
[2,] 0.9485898
101
[3,] 3.8524993
[4,] 1.8882795
[5,] 1.1236463
[6,] 1.3654229
[7,] 0.7593380
[8,] 0.3170737
[9,] 1.9335677
[10,] 1.1592543
#Generar valores de
#una variable aleatoria poisson
#de lambda=1 hasta hallar el primero
#que sea mayor o igual a 2:
> t<-rpois(1,1)
> t
[1] 1
> p<-t
> while(p<2){
+ p<-rpois(1,1)
+ t<-append(t,p)
+
> x<-length(t)
> x
[1] 19
> t
[1] 1 0 1 1 0 1 0 1 0 1 0 0 1 1 0 1 0 1 2
102
#generados hasta hallar el primer
#valor mayor o igual a 2:
#definir un valor arbitrario para
#el vector x para poder invocar
#posteriormente a la funcin append
x<--100
for(i in 1:1000){
t<-rpois(1,1)
p<-t
while(p<2){
p<-rpois(1,1)
t<-append(t,p)
}
x<-append(x,length(t))
}
#Eliminar el primer elemento
#del vector de conteos que fuera
#definido arbitrariamente
x<-x[-1]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 18 20 21 22
269 186 139 109 74 51 47 25 33 19 10 14 8 5 3 3 1 1 1 1
27
1
#Construccin de un diagrama de
#barras para la distribucin de
#frecuencias de x:
103
La distribucin de frecuencias de la variable x del ltimo experimento est representada en
la figura.3.1.
> matrix(1:16,nrow=4,ncol=4)
104
crea una matrix de 4 4 con los enteros desde el 1 hasta el 16. Si queremos llenar la
matriz por filas, usamos la opcin byrow=T en matrix . En el ejemplo
anterior pudimos haber escrito
> matrix(1:16,ncol=4,byrow=T)
as.matrix(x)
is.matrix(x)
Argumentos:
105
ncol: El nmero deseado de columnas.
byrow: Argumento lgico. Si es FALSE (valor por defecto), la matriz es llenada por
columnas (es decir los objetos en `data' son colocados en secuencia llenando la
primera columna, luego la siguiente, etc.) de lo contrario la matriz es llenada por
filas.
x: Un objeto R.
Detalles:
Ejemplos:
is.matrix(as.matrix(1:10))
[1] TRUE
data(warpbreaks)
106
> warpbreaks
breaks wool tension
1 26 A L
2 30 A L
3 54 A L
4 25 A L
5 70 A L
6 52 A L
7 51 A L
8 26 A L
9 67 A L
10 18 A M
11 21 A M
12 29 A M
13 17 A M
14 12 A M
15 18 A M
16 35 A M
17 30 A M
18 36 A M
19 36 A H
20 21 A H
21 24 A H
22 18 A H
23 10 A H
24 43 A H
25 28 A H
26 15 A H
27 26 A H
28 27 B L
29 14 B L
30 29 B L
31 19 B L
32 29 B L
33 31 B L
34 41 B L
35 20 B L
36 44 B L
37 42 B M
107
38 26 B M
39 19 B M
40 16 B M
41 39 B M
42 28 B M
43 21 B M
44 39 B M
45 29 B M
46 20 B H
47 21 B H
48 24 B H
49 17 B H
50 13 B H
51 15 B H
52 15 B H
53 16 B H
54 28 B H
> a<-matrix(as.matrix(warpbreaks),ncol=3)
> a
[,1] [,2] [,3]
[1,] "26" "A" "L"
[2,] "30" "A" "L"
[3,] "54" "A" "L"
[4,] "25" "A" "L"
108
[5,] "70" "A" "L"
[6,] "52" "A" "L"
[7,] "51" "A" "L"
[8,] "26" "A" "L"
[9,] "67" "A" "L"
[10,] "18" "A" "M"
[11,] "21" "A" "M"
[12,] "29" "A" "M"
[13,] "17" "A" "M"
[14,] "12" "A" "M"
[15,] "18" "A" "M"
[16,] "35" "A" "M"
[17,] "30" "A" "M"
[18,] "36" "A" "M"
[19,] "36" "A" "H"
[20,] "21" "A" "H"
[21,] "24" "A" "H"
[22,] "18" "A" "H"
[23,] "10" "A" "H"
[24,] "43" "A" "H"
[25,] "28" "A" "H"
[26,] "15" "A" "H"
[27,] "26" "A" "H"
[28,] "27" "B" "L"
[29,] "14" "B" "L"
[30,] "29" "B" "L"
[31,] "19" "B" "L"
[32,] "29" "B" "L"
[33,] "31" "B" "L"
[34,] "41" "B" "L"
[35,] "20" "B" "L"
[36,] "44" "B" "L"
[37,] "42" "B" "M"
[38,] "26" "B" "M"
[39,] "19" "B" "M"
[40,] "16" "B" "M"
[41,] "39" "B" "M"
[42,] "28" "B" "M"
[43,] "21" "B" "M"
109
[44,] "39" "B" "M"
[45,] "29" "B" "M"
[46,] "20" "B" "H"
[47,] "21" "B" "H"
[48,] "24" "B" "H"
[49,] "17" "B" "H"
[50,] "13" "B" "H"
[51,] "15" "B" "H"
[52,] "15" "B" "H"
[53,] "16" "B" "H"
[54,] "28" "B" "H"
Permite construir una matriz convirtiendo todas las variables en un data frame a un modo
numrico y entonces pegarlos juntos como las columnas de una matriz. Los factores y los
factores ordenados son reemplazados por sus cdigos.
data.matrix(frame)
Argumentos:
frame: Un data frame cuyos componentes son bien sea vectores lgicos, factores o
vectores numricos.
Ejemplo:
> data.matrix(warpbreaks)
breaks wool tension
1 26 1 2
110
2 30 1 2
3 54 1 2
4 25 1 2
5 70 1 2
6 52 1 2
7 51 1 2
8 26 1 2
9 67 1 2
10 18 1 3
11 21 1 3
12 29 1 3
13 17 1 3
14 12 1 3
15 18 1 3
16 35 1 3
17 30 1 3
18 36 1 3
19 36 1 1
20 21 1 1
21 24 1 1
22 18 1 1
23 10 1 1
24 43 1 1
25 28 1 1
26 15 1 1
27 26 1 1
28 27 2 2
29 14 2 2
30 29 2 2
31 19 2 2
32 29 2 2
33 31 2 2
34 41 2 2
35 20 2 2
36 44 2 2
37 42 2 3
38 26 2 3
39 19 2 3
40 16 2 3
111
41 39 2 3
42 28 2 3
43 21 2 3
44 39 2 3
45 29 2 3
46 20 2 1
47 21 2 1
48 24 2 1
49 17 2 1
50 13 2 1
51 15 2 1
52 15 2 1
53 16 2 1
54 28 2 1
Otro objeto con el que trabaja R es el objeto lista , es el ms general y flexible para
guardar datos. Una lista es una coleccin ordenada de componentes. Estos componentes
pueden ser de diversas clases. Podemos tener una lista con dos componentes: un vector de
caracteres y una matriz de nmeros. Se puede crear una lista con la funcin list().
Existe una serie de funciones en R que permiten construir listas, convertir toda clase de
objetos R en listas y para chequear si lo son.
list(...)
pairlist(...)
as.list(x, ...)
as.list.default(x, ...)
as.pairlist(x)
is.list(x)
is.pairlist(x)
112
alist(...)
Argumentos:
...: Objetos.
Detalles:
La mayora de las listas en R internamente son vectores genricos, mientras que las
listas de pares punteadas tradicionales (como en LISP) estn an disponibles.
as.list intenta forzar su argumento al tipo lista. Para funciones, sta devuelve la
concatenacin de la lista de los argumentos formales y el cuerpo de la funcin. Para
expresiones, la lista de llamadas componentes es devuelta.
113
is.list devuelve un `TRUE' si y slo s su argumento es un `list' o un `pairlist' de
longitud mayor que 0, mientras que is.pairlist slo retorna un `TRUE' en el
ltimo caso.
Ejemplos:
nos crea una lista, llamada x , que tiene componentes a y b. a es un vector de nmeros
y b es un vector de caracteres. Observe que los componentes tienen un nmero diferente
de componentes. Si queremos hacer referencia al componente a del objeto x escribimos
x$a.
> x$a
data(cars)
#Crear una estructura
#para graficacin
pts <- list(x=cars[,1], y=cars[,2])
#Listar Argumentos
> f <- function(x,y)sin(x)*exp(-y)
114
>list(f)
[[1]]
function(x,y)sin(x)*exp(-y)
> t<-pairlist(f)
>t
[[1]]
function(x,y)sin(x)*exp(-y)
$y
[[3]]
sin(x) * exp(-y)
$cantidad
[1] 100 140 50
> m<-pairlist(frutas=a,cantidad=b)
> m
$frutas
[1] "manzanas" "naranjas" "peras"
115
$cantidad
[1] 100 140 50
> n[1]
$frutas
[1] "manzanas" "naranjas" "peras"
> as.list(c(a,b))
[[1]]
[1] "manzanas"
[[2]]
[1] "naranjas"
[[3]]
[1] "peras"
[[4]]
[1] "100"
[[5]]
[1] "140"
[[6]]
[1] "50"
> as.pairlist(c(a,b))
[[1]]
[1] "manzanas"
[[2]]
[1] "naranjas"
116
[[3]]
[1] "peras"
[[4]]
[1] "100"
[[5]]
[1] "140"
[[6]]
[1] "50"
> alist(c("manzanas","naranjas","peras"))
[[1]]
c("manzanas", "naranjas", "peras")
> list(c("manzanas","naranjas","peras"))
[[1]]
[1] "manzanas" "naranjas" "peras"
Muchas funciones en R cuando son ejecutadas entregan un objeto. Este objeto debe ser
manipulado en la forma descrita para obtener los resultados deseados.
Dada una estructura `x' tipo lista, esta funcin la simplifica para producir un vector que
contiene todos los componentes atmicos que ocurren en `x'.
Argumentos:
117
recursive: Argumento lgico. Debera unlisting ser aplicado para listar las
componentes de `x'?
Detalles:
`x' puede ser un vector, pero entonces unlist no hace nada til, ni siquiera quita
los nombres.
Donde es posible los elementos de la lista son forzados a un modo comn durante el
unlisting, y as a menudo terminan como un vector de caracteres.
Una lista es un vector genrico, y el vector simplificado debe an ser una lista (y debe
ser incambiable). Elementos no vectoriales de la lista (tales como nombres, frmulas)
no son forzados, y as una lista contiene uno o ms de estos restos de una lista.
Ejemplos:
>a<-c("manzanas","naranjas","peras")
>b<-c(100,140,50)
118
> n<-list(frutas=a,cantidad=b)
#Descomponiendo la lista
#note que en este caso la funcin
#forza a todos los elementos
#a ser caracteres
> unlist(n)
frutas1 frutas2 frutas3 cantidad1 cantidad2 cantidad3
"manzanas" "naranjas" "peras" "100" "140" "50"
#Otro ejemplo:
> tiempo1<-rexp(10)
> tiempo2<-rexp(10,rate=0.5)
> tiempos<-list(llegadas=tiempo1,servicio=tiempo2)
> tiempos
$llegadas
[1] 0.03234987 0.48611757 0.13446453 1.10649004 0.33979095 1.34478218
[7] 0.12969581 1.43734645 4.08248358 0.32642360
$servicio
[1] 3.19001640 0.19896770 1.13467186 14.93080135 3.84831055 0.23845463
[7] 0.14711193 0.89396062 0.34205063 0.08852118
> unlist(tiempos)
llegadas1 llegadas2 llegadas3 llegadas4 llegadas5 llegadas6
0.03234987 0.48611757 0.13446453 1.10649004 0.33979095 1.34478218
llegadas7 llegadas8 llegadas9 llegadas10 servicio1 servicio2
0.12969581 1.43734645 4.08248358 0.32642360 3.19001640 0.19896770
servicio3 servicio4 servicio5 servicio6 servicio7 servicio8
1.13467186 14.93080135 3.84831055 0.23845463 0.14711193 0.89396062
servicio9 servicio10
0.34205063 0.08852118
119
3.3.6 Funcin data.frame
row.names(x)
row.names(x) <- names
print(x, ..., digits = NULL, quote = FALSE, right = TRUE)
plot (x, ...)
Argumentos:
row.names: Un vector de caracteres dando los nombres de las filas para el data
frame.
check.rows: Argumento lgico. Si es `TRUE' entonces las filas son revisadas para
verificar la consistencia de la longitud y los nombres.
120
check.names: rgumento lgico. Si es `TRUE' entonces los nombres de las variables
en el data frame son revisados para asegurar que son nombres de variables
sintcticamente vlidos. Si es necesario ellos son ajustados (por medio de
`make.names') para que lo sean.
Detalles:
Si una lista, data frame o una matriz es pasada a data.frame esto resulta como si
cada columna hubiese sido pasada como un argumento separado, con la excepcin de
matrices de la clase `model.matrix'.
Valor:
121
`as.data.frame' es una funcin genrica con muchos mtodos. Intenta forzar
su argumento para que sea un data frame.
`row.names' puede ser usado para ajustar y retroalimentar los nombres de fila de
un data frame, similarmente a `rownames' para arreglos (y es una funcin genrica
que llama a `rownames' para algn argumento de array .
Ejemplos:
10 1 10 A
122
[1] 1 1 1 1 1 1 1 1 1 1
#manipulacin de datos
#en variables numricas del
#dataframe
> mean(d$x)
[1] 1
> mean(d$y)
[1] 5.5
123
3.3.7 Removiendo Objetos
Si objetos viejos no son removidos, eventualmente, el sistema podra copar el disco duro
con estos objetos y colapsar. Por esto es necesario hacer una labor de limpieza
regularmente. Dentro de una sesin R se deben eliminar los objetos que no se utilizarn
nuevamente. Para hacer esto se usa la funcin rm() . El argumentos de esta funcin es la
lista de objetos, separados por comas, que se quieren eliminar. Si se quiere saber que
objetos hay en el sistema se usa la funcin objects() ls(), cuyo resultado es una
lista de los objetos presentes.
124
Captulo 4: Creacin de Nuevas Funciones
en R
Una de las mayores ventajas del programa R es la facilidad que le deja al usuario de crear
nuevas funciones que se integran automticamente al sistema y que pueden seguir siendo
usadas posteriormente. En R se dispone de function, return las cuales
proporcionan los mecanismos de base para definir nuevas funciones en lenguaje R.
Argumentos:
arglist: Vaco o uno o mas nombres separados por comas indicando los argumentos
de la funcin o trminos del tipo nombre=expresin.
Detalles
En R los nombres en una lista de argumentos no pueden estar entre comillas ni ser
nombres estndar.
Si `value' es una serie de expresiones, el valor devuelto es una lista de las expresiones
evaluadas, con los conjuntos de nombres para las expresiones donde stas son los
nombres de objetos R.
125
Ver tambin: args y body para accesar a los argumentos y al cuerpo de una funcin.
> mi.funcion<-function(argumento1,argumento2,...)
...Instrucciones en R...
Si slo tenemos una lnea de instrucciones las llaves no son necesarias. Por ejemplo si
queremos crear una funcin que nos entregue el coeficiente de kurtosis, podemos entrar el
siguiente comando.
> kurtosis<-function(x)
> mean(((x-mean(x))/sqrt(var(x)))^4)-3
As mismo si queremos definir una funcin que calcule el coeficiente de asimetra podemos
entrar el siguiente comando
> asimetria<-function(x)
mean(((x-mean(x))/sqrt(var(x)))^3)
Las anteriores funciones quedan integradas al R y pueden seguir siendo utilizadas sin
necesidad de definirlas. Si queremos ver cmo est definida una funcin damos su nombre
simplemente sin parntesis.
En caso de tener ms de una lnea las llaves son necesarias para distinguir la funcin de los
otros comandos. Una vez la funcin es definida pasa a ser parte integral del R y puede
llamarse en otras ocasiones.
126
Por ejemplo, para calcular la media geomtrica de un vector x podemos definir la siguiente
funcin:
> media.geometrica(y)
Otro ejemplo es la siguiente funcin que permite hacer un rpido anlisis exploratorio
grfico de una variable:
> forma.aed<-function(x){
par(mfrow=c(2,2))
hist(x)
boxplot(x)
dic<-summary(x)[5]-summary(x)[2]
plot(density(x,width=2*dic), xlab="x", ylab=" ", type="l")
qqnorm(x)
qqline(x)}
Esta es una funcin que produce cuatro grficas: un histograma, una caja de Tukey, una
estimacin de la densidad y un grfico q-q (cuantil vs. cuantil), y le adiciona una lnea que
pasa por el primer y tercer cuartil.
127
reservas.weibull<-function(a,b,t,gamma,nsim,ksim){
k<-0
p.est.n<-0
while(p.est.n<gamma){
k<-k+1
conta<-0
for(i in 1:nsim){
tau.obs<-c(rep(0,ksim))
for(j in 1:ksim){
T<-rweibull(k,shape=a,scale=b)
tau.obs[j]<-sum(T)
}
cont<-length(tau.obs[tau.obs>t])
conta<-append(conta,cont)
}
p.est.n<-sum(conta)/(ksim*nsim)
res<-list(nro.reserv=k-1,p.est.n=p.est.n)
}
res
}
> reservas.weibull(2,0.5,2,0.9,1000,100)
$nro.reserv
[1] 6
$p.est.n
[1] 0.97237
Una funcin para el ejemplo previo donde se simul los valores de una variable aletatoria X
que contaba el nmero de variables poisson ( ) a generar hasta obtener un nmero de
eventos mayor o igual a cierto valor:
128
geometrica<-function(lambda,nsim){
x<--100
for(i in 1:nsim){
t<-rpois(1,lambda)
p<-t
while(p<2){
p<-rpois(1,1)
t<-append(t,p)
}
x<-append(x,length(t))
}
x<-x[-1]
x
}
#Una aplicacin:
res<-geometrica(1,1000)
Utilice nombres completos tanto para definir funciones como para los argumentos.
Aunque el nombre de los argumentos puede ser abreviado, el nombre completo puede
dar mayor claridad. Existen muchas funciones en R, por lo tanto la seleccin de un
buen nombre es importante.
129
Trate de pensar en trminos de todo el problema. Qu es lo que se pretende
conseguir al final?. No trate de escribir las instrucciones secuencialmente como se
hace en un programa de Fortran.
Trate con la situacin ms general, si es posible. Por ejemplo, qu hacer con NA's
(datos faltantes), con datos de tipo caracter, listas, argumentos de longitud 0. De otra
parte, recuerde que es fcil complicarse demasiado. Un programa corto es preferible
si funciona bien el 90% de las veces a un programa extremadamente largo que
considera todos los casos posibles.
Las funciones cat() y readline() son de gran utilidad cuando trabajamos con
funciones. La funcin cat() permite imprimir en pantalla valores que tienen variables y
mensajes. Esto es til en el momento de depurar una funcin. Un ejemplo sencillo es el
siguiente:
y <- NULL
for(i in 1:3){
y <- y+i
130
cat("i es ",i,"\n")
}
i es 1
i es 2
i es 3
Ejemplo:
> ejemplo()
Normal o Uniforme?Normal
> ejemplo()
131
Normal o Uniforme?Uniforme
Cuando se requiere el uso del R para ayudar a resolver ciertos problemas, como puede ser
el caso de simulaciones, a veces aparece un problema con la memoria disponible. El
problema es grave cuando se utilizan 'loops', por ejemplo for, while y repeat, ya que el
programa no libera memoria hasta que no se termina y vuelve a aparecer el prompt. En este
caso lo mejor es vectorizar. Soluciones, al menos parciales pueden ser:
4. Puede ser aconsejable que los clculos mas complejos sean codificados en C o
FORTRAN
132
Captulo 5: Matrices
R es un programa con una gran base de funciones que permiten resolver problemas de
lgebra lineal. Aqu mencionamos unas cuantas:
> A<-matrix(1:20,ncol=4,byrow=T)
> A
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 5 6 7 8
[3,] 9 10 11 12
[4,] 13 14 15 16
[5,] 17 18 19 20
> B<-matrix(2:21,ncol=4,byrow=T)
> B
[,1] [,2] [,3] [,4]
[1,] 2 3 4 5
[2,] 6 7 8 9
[3,] 10 11 12 13
[4,] 14 15 16 17
[5,] 18 19 20 21
> c<-A*B
> c
133
[,1] [,2] [,3] [,4]
[1,] 2 6 12 20
[2,] 30 42 56 72
[3,] 90 110 132 156
[4,] 182 210 240 272
[5,] 306 342 380 420
> d<-A%*%t(B)
> d
[,1] [,2] [,3] [,4] [,5]
[1,] 40 80 120 160 200
[2,] 96 200 304 408 512
[3,] 152 320 488 656 824
[4,] 208 440 672 904 1136
[5,] 264 560 856 1152 1448
> B<-matrix(c(1,2,8,3),ncol=2)
> B
[,1] [,2]
[1,] 1 8
[2,] 2 3
> t(B)
[,1] [,2]
[1,] 1 2
[2,] 8 3
>
134
5.3. Productos cruzados
crossprod(): Dadas las matrices `x' y `y' como argumentos crossprod retorna la
matriz del producto cruzado, es decir XTY. Si slo se da un argumento, digamos X,
entonces devuelve XTX.
> A
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 2 4 5
[3,] 3 5 2
> crossprod(A)
[,1] [,2] [,3]
[1,] 14 25 19
[2,] 25 45 36
[3,] 19 36 38
>
> t(A)%*%A
[,1] [,2] [,3]
[1,] 14 25 19
[2,] 25 45 36
[3,] 19 36 38
>
> A
[,1] [,2] [,3]
135
[1,] 1 2 3
[2,] 2 4 5
[3,] 3 5 2
> desc<-svd(A)
desc
$d [1] 9.51206040 2.55323549 0.04117509
$u
[,1] [,2] [,3]
[1,] -0.3789216 -0.3931549 -0.83776349
[2,] -0.6934136 -0.4788893 0.53837038
[3,] -0.6128589 0.7849168 -0.09115742
$v
[,1] [,2] [,3]
[1,] -0.3789216 0.3931549 -0.83776349
[2,] -0.6934136 0.4788893 0.53837038
[3,] -0.6128589 -0.7849168 -0.09115742
U<-desc$u
D<-diag(desc$d)
V<-desc$v
U%*%D%*%t(V)
5.5. Descomposicin QR
136
qr(x, tol=1e-07) qr.coef(qr, y) qr.qy(qr, y) qr.qty(qr, y)
qr.resid(qr, y) qr.fitted(qr, y, k = qr$rank) qr.solve(a, b, tol =1e-7)
is.qr(x)
as.qr(x)
Argumentos:
tol: La tolerancia para detectar dependencias lineales entre las columnas de `x'.
Detalles
137
is.qr devuelve un `TRUE' si `x' es una lista con componentes denominados `qr',
`rank' y `qraux' y `FALSE' en caso contrario.
qr: Una matriz con la misma dimensin de `x'. El tringulo superior contiene el R de
la descomposicin y el tringulo superior contiene informacin del Q de la
descomposicin.
rank: El rango de `x' calculado por la descomposicin. Siempre esl rango completo
en el caso complejo.
Nota:
El caso complejo usa pivoteo sobre columna y no intenta detectar matrices deficientes
en rango.
138
Ver tambin: qr.Q, qr.R, qr.X para reconstruccin de las matrices. solve.qr,
lsfit, eigen, svd.
Ejemplos:
A<-cbind(c(1,2,3),c(2,4,5),c(3,5,2))
> A
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 2 4 5
[3,] 3 5 2
descQR<-qr(A)
descQR
$qr
[,1] [,2] [,3]
[1,] -3.7416574 -6.6815310 -5.0779636
[2,] 0.5345225 -0.5976143 -3.4661630
[3,] 0.8017837 -0.8244771 -0.4472136
$rank
[1] 3
$qraux
[1] 1.2672612 1.5658953 0.4472136
$pivot
[1] 1 2 3
Q<-qr.Q(descQR)
139
Q
[,1] [,2] [,3]
[1,] -0.2672612 -0.3585686 -8.944272e-01
[2,] -0.5345225 -0.7171372 4.472136e-01
[3,] -0.8017837 0.5976143 -5.551115e-16
R<-qr.R(descQR)
R
[,1] [,2] [,3]
[1,] -3.741657 -6.6815310 -5.0779636
[2,] 0.000000 -0.5976143 -3.4661630
[3,] 0.000000 0.0000000 -0.4472136
X<-qr.X(descQR)
X
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 2 4 5
[3,] 3 5 2
#Resolviendo un sistema de
#ecuaciones de la forma Ax=y:
y<-c(-1,-1,3.5)
x<-qr.solve(A,y,tol = 1e-10)
x
[1] 1.0 0.5 -1.0
#o bien:
x<-qr.coef(descQR,y)
140
x
[1] 1.0 0.5 -1.0
#Otro ejemplo:
y<-c(-1,-1,3.2)
x<-qr.coef(descQR,y)
x
[1] 0.4 0.8 -1.0
#o bien
x<-qr.solve(descQR, y)
x
[1] 0.4 0.8 -1.0
residuos<-qr.resid(descQR,y)
residuos
[1] 0 0 0
qr.fitted(descQR,y)
[1] -1.0 -1.0 3.2
cbind(): Esta funcin junta dos matrices por filas (o sea, una al lado de la otra)
> A<-matrix(c(1,3,5,7),ncol=2)
> A
[,1] [,2]
[1,] 1 5
[2,] 3 7
> B<-matrix(c(0,3,2,1,4,7),nrow=2)
141
> B
[,1] [,2] [,3]
[1,] 0 2 4
[2,] 3 1 7
> C<-cbind(A,B)
> C
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 0 2 4
[2,] 3 7 3 1 7
>
rbind(): Junta dos matrices por columna (una matriz sobre la otra)
> A<-matrix(c(1,3,5,7),ncol=2)
> A
[,1] [,2]
[1,] 1 5
[2,] 3 7
> B<-matrix(c(0,3,2,1,4,7),ncol=2)
> B
[,1] [,2]
[1,] 0 1
[2,] 3 4
[3,] 2 7
> C<-rbind(A,B)
> C
[,1] [,2]
[1,] 1 5
[2,] 3 7
[3,] 0 1
[4,] 3 4
[5,] 2 7
>
142
5.7. Descomposicin de Cholesky
> A<-matrix(c(5,2,3,2,4,2,3,2,7),ncol=3)
> A
[,1] [,2] [,3]
[1,] 5 2 3
[2,] 2 4 2
[3,] 3 2 7
> B<-chol(A)
> B
[,1] [,2] [,3]
[1,] 2.236068 0.8944272 1.3416408
[2,] 0.000000 1.7888544 0.4472136
[3,] 0.000000 0.0000000 2.2360680
> t(B)%*%B
[,1] [,2] [,3]
[1,] 5 2 3
[2,] 2 4 2
[3,] 3 2 7
>
143
Argumentos:
values: Un vector con los p valores propios de `x', ordenados en orden decreciente,
de acuerdo a `Mod(values)' si son complejos.
> A<-matrix(c(1,2,3,2,4,5,3,5,2),ncol=3)
> A
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 2 4 5
[3,] 3 5 2
> eigen(A)
$values
[1] 9.51206040 0.04117509 -2.55323549
$vectors
[,1] [,2] [,3]
144
[1,] 0.3789216 -0.83776349 0.3931549
[2,] 0.6934136 0.53837038 0.4788893
[3,] 0.6128589 -0.09115742 -0.7849168
> diag(c(1,2,3,4))
[,1] [,2] [,3] [,4]
[1,] 1 0 0 0
[2,] 0 2 0 0
[3,] 0 0 3 0
[4,] 0 0 0 4
> A<-matrix(c(1,2,3,2,4,5,3,5,2),ncol=3)
> A
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 2 4 5
[3,] 3 5 2
> diag(A)
[1] 1 4 2
> diag(diag(A))
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 4 0
[3,] 0 0 2
>
145
5.10. Producto Kronecker
X: Un vector o arreglo.
Y: Un vector o arreglo.
> A<-matrix(c(1,2,3,2,4,5,3,5,2),ncol=3)
> A
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 2 4 5
[3,] 3 5 2
> B<-matrix(c(1,2,2,3),ncol=2)
> B
[,1] [,2]
[1,] 1 2
146
[2,] 2 3
>
> kronecker(A,B)
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 2 2 4 3 6
[2,] 2 3 4 6 6 9
[3,] 2 4 4 8 5 10
[4,] 4 6 8 12 10 15
[5,] 3 6 5 10 2 4
[6,] 6 9 10 15 4 6
> kronecker(B,A)
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 2 3 2 4 6
[2,] 2 4 5 4 8 10
[3,] 3 5 2 6 10 4
[4,] 2 4 6 3 6 9
[5,] 4 8 10 6 12 15
[6,] 6 10 4 9 15 6
>
> kronecker(c(1,2,3),c(5,6))
[1] 5 6 10 12 15 18
> kronecker(c(5,6),c(1,2,3))
[1] 5 10 15 6 12 18
147
Argumentos:
b: Un vetor numrico o matriz dando el (los) lado (s) derecho del sistema lineal. Si
se omite, se asume la matriz identidad y por tanto solve devolver la inversa de `a'.
tol: La tolerancia para detectar las dependencias lineales en las columnas de `a'.
> A<-matrix(c(1,2,3,2,4,5,3,5,2),ncol=3)
> A
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 2 4 5
[3,] 3 5 2
> solve(A)
[,1] [,2] [,3]
[1,] 17 -11 2.000000e+00
[2,] -11 7 -1.000000e+00
[3,] 2 -1 1.117140e-15
>
> b<-c(2,1,3)
> solve(A,b)
[1] 29 -18 3
>
148
> sort(c(-1,5,-2,4,3,9))
[1] -2 -1 3 4 5 9
Las siguientes funciones simplifican los clculos que operan de forma iterada sobre
columnas o filas de una matriz. Si tenemos arreglos tridimensionales opera sobre las
matrices en caso requerido.
149
Funcin Argumentos Lo que hace
devuelve un arreglo del modo escalar
Por ejemplo si deseamos calcular las medias de las columnas de una matriz X damos el
comando
medias.col<-apply(X,2,mean)
Otros ejemplos:
150
b<-array(apply(a,2,mvrnorm,mu,Sigma),dim=c(10,2,3))
b
, , 1
[,1] [,2]
[1,] -0.9546754 -0.9788744
[2,] 0.3951823 -0.1284428
[3,] 1.0079476 -0.5692264
[4,] 0.1308736 0.4990434
[5,] 0.6154087 0.8054497
[6,] 0.8264678 -0.6473254
[7,] -0.4329034 0.8565902
[8,] 0.3916516 0.7230044
[9,] -0.8908572 0.5820368
[10,] -0.8976308 -0.6085847
, , 2
[,1] [,2]
[1,] 0.03365421 0.01812461
[2,] -0.66313500 2.31526069
[3,] -0.92103077 2.21952089
[4,] -0.97599197 1.39551295
[5,] -0.55824010 0.15656623
[6,] 0.77337990 0.52407043
[7,] -1.62980628 0.26459324
[8,] -1.01363258 -1.74454949
[9,] -0.32201918 -0.07920861
[10,] -1.40875243 -0.77490633
, , 3
[,1] [,2]
[1,] -0.9856771 -1.69944802
151
[2,] 0.6159202 1.01835201
[3,] 0.8225232 0.83393529
[4,] 0.7533535 0.01518407
[5,] 0.5899308 -0.46316405
[6,] 1.6388345 -1.30981318
[7,] 1.4050816 -0.35261864
[8,] -0.3563772 -0.94868464
[9,] -1.6126299 1.67723448
[10,] 0.4840092 -1.00325728
#estimacin de localizacin y
#matriz de covarianza clsicas
c<-apply(b, c(3, 2), mean)
d<-apply(b, c(3), var)
c
[,1] [,2]
[1,] 0.01914649 0.05336708
[2,] -0.66855742 0.42949846
[3,] 0.33549690 -0.22322799
d
[,1] [,2] [,3]
[1,] 0.56654836 0.49486624 1.0488130
[2,] 0.02954414 0.07806947 -0.2243212
[3,] 0.02954414 0.07806947 -0.2243212
[4,] 0.50585323 1.60101998 1.2107389
apply(b[,,1],2,mean)
[1] 0.01914649 0.05336708
var(b[,,1])
[,1] [,2]
[1,] 0.56654836 0.02954414
[2,] 0.02954414 0.50585323
152
Ejemplo: Datos Antropomtricos
153
2 21.7 8.5 6.1 3.2 2.6 0
3 25.4 9.6 5.5 4.0 3.1 1
4 25.0 10.1 5.3 3.5 2.7 1
5 22.0 8.5 5.7 3.1 2.7 0
6 25.9 9.3 6.1 4.3 3.3 1
7 22.2 8.6 5.2 3.9 2.9 0
8 21.7 8.4 5.0 3.2 2.3 0
9 25.5 9.2 6.1 3.3 3.2 1
10 24.4 9.4 4.7 3.6 2.8 1
Si queremos trabajar con los hombres y mujeres separadamente podemos usar los
siguientes comandos
154
lo cual genera dos matrices hombres.pies y mujeres.pies. Para propsitos
ilustrativos vamos a seleccionar las tres primeras variables: largo del pie, ancho del pie y
ancho del taln. Procedemos as:
> hombres.pies<-hombres.pies[,1:3]
> mujeres.pies<-mujeres.pies[,1:3]
> hombres.pies
V1 V2 V3
1 24.2 9.4 5.5
3 25.4 9.6 5.5
4 25.0 10.1 5.3
6 25.9 9.3 6.1
9 25.5 9.2 6.1
10 24.4 9.4 4.7
> mujeres.pies
V1 V2 V3
2 21.7 8.5 6.1
5 22.0 8.5 5.7
7 22.2 8.6 5.2
8 21.7 8.4 5.0
>
> dispersion.hombres<-var(hombres.pies)
> dispersion.hombres
V1 V2 V3
V1 0.4386667 -0.030 0.2613333
V2 -0.0300000 0.104 -0.0680000
V3 0.2613333 -0.068 0.2786667
> dispersion.mujeres<-var(mujeres.pies)
> dispersion.mujeres
155
V1 V2 V3
V1 0.06000000 0.016666667 -0.030000000
V2 0.01666667 0.006666667 0.006666667
V3 -0.03000000 0.006666667 0.246666667
> correlacion.hombres<-cor(hombres.pies)
> correlacion.hombres
V1 V2 V3
V1 1.0000000 -0.1404550 0.7474549
V2 -0.1404550 1.0000000 -0.3994383
V3 0.7474549 -0.3994383 1.0000000
> correlacion.mujeres<-cor(mujeres.pies)
> correlacion.mujeres
V1 V2 V3
V1 1.0000000 0.8333333 -0.2465985
V2 0.8333333 1.0000000 0.1643990
V3 -0.2465985 0.1643990 1.0000000
Argumentos:
156
x: Un arreglo de dos o ms dimensiones con valores numricos, complejos, enteros,
o lgicos, o un data frame.
na.rm: Argumento lgico para especificar si se omiten los valores faltantes de los
clculos.
dims: Cules dimensiones son consideradas como rows o columns para la suma
total. Para `col*', la suma o la media es sobre la dimensin total `dims+1, ...'; para
`row*' es sobre las dimensiones `1:dims'.
Ejemplos:
157
3 3
##Caso complejo:
> rowSums(x)
[1] 7-3i 6-3i NA NA 5-3i 6-3i 7-3i 8-3i
> colSums(x)
x1 x2
NA NA
> rowMeans(x)
[1] 3.5-1.5i 3.0-1.5i NA NA 2.5-1.5i 3.0-1.5i 3.5-1.5i 4.0-1.5i
> colMeans(x)
x1 x2
NA NA
158
Parte II
Grficos
159
Captulo 6: Introduccin
Una de las ventajas mayores del programa R es su capacidad de producir grficos de alta
calidad. Posee un gran nmero de funciones que son fciles de usar y de modificar para
ajustarlas a nuestras necesidades.
show()
160
6.3. Grficos Unidimensionales
barplot(Estaturas)
barplot(Estaturas,amplitud, nombres, space=.2, inside=TRUE,beside=FALSE,
horiz=FALSE, legend, angle,density, col, blocks=TRUE)
boxplot(..., rango, amplitud, varwidth=FALSE,notch=FALSE, names,
plot=TRUE)
hist(x, nclass, breaks, plot=TRUE, angle,density, col, inside)
lines(x, y, type="l")
points(x, y, type="p"))
plot(x, y, type="p", lty=1:5, pch=, col=1:4)
points(x, y, type="p", lty=1:5, pch=, col=1:4)
lines(x,y, type="l", lty=1:5, pch=, col=1:4)
plot(x, y, type="p", log="")
abline(coef)
abline(a, b)
abline(reg)
abline(h=a)
abline(v=a)
qqplot(x, y, plot=TRUE)
qqnorm(x, datax=FALSE, plot=TRUE)
161
6.6. Mltiples Grficos por Pgina (Ejemplos)
162
6.7. Funcin persp
persp(x, ...)
persp.default(x = seq(0, 1, len = nrow(z)),
y = seq(0, 1, len = ncol(z)),
z, xlim = range(x), ylim = range(y),
zlim = range(z, na.rm = TRUE), xlab = NULL,ylab =
NULL, zlab = NULL, main = NULL, sub = NULL, theta = 0,
phi = 15, r = sqrt(3), d = 1,
scale = TRUE, expand = 1, col = NULL, border = NULL,
ltheta = -135, lphi = 0, shade = NA,
box = TRUE, axes = TRUE, nticks = 5, ticktype = "simple",...)
Argumentos:
x, y: Ubicacin de las lineas de la rejilla sobre la cual los valores en 'z' son medidos.
stas deben estar en orden ascendente. Por defecto, se usan valores igualmente
espaciados en el intervalo de 0 a 1. Si x es una lista, sus componentes x$x y x$y
son usados para x e y respectivamente.
z: Una matriz que contiene los valores a ser graficados (valores 'NA' son
permitidos). Notar que 'x' puede ser usada en ves de 'z' por conveniencia.
163
xlab, ylab, zlab: Ttulos para los ejes. Estos deben ser cadenas de caracteres; no se
permiten expresiones.
theta, phi: ngulos que definen la direccin de las vistas. 'theta' da la direccin
azimutal y 'phi' la colatitud.
164
ltheta, lphi: Si se especifican valores finitos para estos, la superficie es sombreada
como si fuera iluminada desde la direccin especificada por el azimut 'ltheta' y la
colatitud 'lphi'.
axes: Agrega ticks y etiquetas a la caja. Por defecto es 'TRUE'. Si 'box' es 'FALSE'
las etiquetas y los ticks no son dibujados.
ticktype: Caracter: simple dibuja un flecha paralela al eje para indicar la direccin
de aumento; detailed dibuja los ticks normales como en grficos 2D
nticks: El nmero aproximado de marcas ticks a dibujar en los ejes. No tiene efecto
si 'ticktype' es simple.
x<-seq(-4,4,len=50)
y<-seq(-4,4,len=50)
normal.bivariada<-function(x,y,rho,mu1,sigma1,mu2,sigma2){
165
1/(2*pi*sigma1*sigma2*sqrt(1-rho^2))*exp(-1/(2*(1-rho^2))*(((x-
mu1)/sigma1)^2-2*rho*((x-mu1)/sigma1)*((y-mu2)/sigma2)+((y-
mu2)/sigma2)^2))
}
nf<-layout(matrix(c(1,2,3,4),ncol=2,byrow=T),
widths=c(rep(10,4)),heights=c(rep(10,4)),respect=T)
f<-outer(x,y,normal.bivariada,rho=0.85,mu1=0,sigma1=1,mu2=0,sigma2=1)
par(mar=c(1,1,4,1))
persp(x,y,f,theta = 30, phi = 30, col = "lightblue",xlab = "X", ylab =
"Y", zlab ="Z",main="rho=0.85",cex.main=0.8)
f<-outer(x,y,normal.bivariada,rho=0.5,mu1=0.5,sigma1=1,mu2=0,sigma2=1)
par(mar=c(1,1,4,1))
persp(x,y,f,theta = 30, phi = 30, col = "lightblue",xlab = "X", ylab =
"Y", zlab ="Z",main="rho=0.5",cex.main=0.8)
f<-outer(x,y,normal.bivariada,rho=0.0,mu1=0,sigma1=1,mu2=0,sigma2=1)
par(mar=c(1,1,4,1))
persp(x,y,f,theta = 30, phi = 30, col = "lightblue",xlab = "X", ylab =
"Y", zlab ="Z",main="rho=0.0",cex.main=0.8)
f<-outer(x,y,normal.bivariada,rho=-0.85,mu1=0,sigma1=1,mu2=0,sigma2=1)
par(mar=c(1,1,4,1))
persp(x,y,f,theta = 30, phi = 30, col = "lightblue",xlab = "X", ylab =
"Y", zlab ="Z",main="rho=-0.85",cex.main=0.8)
par(oma=c(1,1,1,1),new=T,font=2,cex=1)
mtext(outer=T,"Distribucin Normal
Bivariada",side=3,cex=0.8)
166
Figura 6.1: visualizacin de las superficies normales bivariadas para unos
parmetros especficos es posible gracias a la funcin `persp'.
Esta funcin permite realizar grficos de contornos, tales como los contornos de
verosimilitud en dos parmetros o tambin en la graficacin de regiones de confianza,
mapas topogrficos, etc. Dichos contornos pueden ser agregados a un grfico previo, por
ejemplo a un grfico de dispersin:
167
method = "flattest",vfont = c("sans serif", "plain"),axes = TRUE,
frame.plot = axes, col= par("fg"), lty = par("lty"), lwd = par("lwd"),
add = FALSE, ...)
Argumentos:
x,y: Ubicacin de las lineas de la rejilla sobre la cual los valores en 'z' son medidos.
stas deben estar en orden ascendente. Por defecto, se usan valores igualmente
espaciados en el intervalo de 0 a 1. Si x es una lista, sus componentes x$x y $x$y
son usados para x e y respectivamente. Si la lista tiene componente 'z' sta es usada
para 'z'.
z: Una matriz que contiene los valores a ser graficados (son permitidos valores
'NA'). Notar que 'x' puede ser usada en ves de 'z' por conveniencia.
levels: Vector numrico que da los niveles en los cuales se desea dibujar las lineas
de contorno.
method: cadena de caracteres que especifica dnde se ubicarn las etiquetas. Los
valores posibles son (entre comillas) simple, edge y flattest (por defecto). El
168
primero dibuja la etiqueta en el borde del grfico, sobreponindola a la linea de
contorno; el segundo dibuja la etiqueta en el borde del grfico , incrustado en la linea
de contorno, sin superponerlas; y el tercero dibuja sobre la seccin ms plana del
contorno, incrustando la etiqueta en la linea de contorno sin superposicin. El
segundo y tercer mtodo pueden no dibujar un etiqueta en cada linea de contorno.
axes, frame.plot: Argumento lgico para indicar si ejes o una caja deberan ser
dibujados.
169
Ejemplo: Mapa topogrfico (ejemplo disponible en el Help de R, paquete: base):
data("volcano")
rx <- range(x <- 10*1:nrow(volcano))
ry <- range(y <- 10*1:ncol(volcano))
ry <- ry + c(-1,1) * (diff(rx) - diff(ry))/2
opar <- par(pty = "s")
plot(x = 0, y = 0,type = "n", xlim = rx, ylim = ry,xlab = "", ylab = "")
u <- par("usr")
rect(u[1], u[3], u[2], u[4], border = "black")
contour(x, y, volcano,lty = "solid", add = TRUE,vfont = c("sans serif",
"plain"))
title("Mapa topogrfico de Maunga Whau", font = 4)
abline(h = 200*0:4, v = 200*0:4,lty = 2, lwd = 0.1)
par(opar)
Figura 6.2: Aqu observamos una aplicacin no estadstica pero bastante til de
la funcin `contour' en el trazo de mapas topogrficos.
170
6.9. Funcin image
Esta funcin crea un grid de rectngulos en escala de gris o coloreados con los colores
correspondientes a los valores en `z'. Puede usarse para presentar imgenes
de datos aka tridimensionales o espaciales.
Argumentos:
x,y: Ubicaciones de las lneas del grid en las cules los valores en `z' son medidos.
Estos deben estar en orden ascendente. Por defecto, son usados valores igualmente
espaciados de 0 a 1. Si `x' es una lista, sus componentes `x$x' y `x$y' son usados para
`x' e `y', respectivamente. Si la lista tiene componente `z' sta es usada para `z'.
z: Una matriz que contiene los valores a ser graficados (valores faltantes son
permitidos). Notar que `x' puede usarse en vez de `z' por conveniencia.
zlim: Los valores `z' mnimo y mximo para los cuales los colores van a ser
graficados. Cada uno de los colores dados ser usado para colorear un intervalo
igualmente espaciado de este rango. Los puntos medios de los intervalos cubren el
rango, de modo que los valores por fuera del rango sern graficados.
171
xlim, ylim: Rangos para los valores `x' y `y' graficados, por defecto es el rango de
valores finitos de `x' y `y'.
col: Una lista de colores como los generados por las funciones `rainbow',
`heat.colors', `topo.colors', `terrain.colors' o similares.
xaxs, yaxs: Estilo de los ejes `x' y `y'. Por defecto es `"i"' el cual es apropiado para
imgenes. Ver `par'.
xlab, ylab: Cadena de caracteres dando las etiquetas para los ejes `x' y `y'. Por
defecto usa `call names' de `x' o `y', o `""' si no fue especificado.
breaks: un conjunto de puntos de corte para los colores: deben darse uno o ms
puntos de corte que colores.
Detalles: La longitud de `x' debera ser igual a `nrow(x)+1' o `nrow(x)'. En el primer caso
`x' especifica los lmites entre celdas; en el segundo caso, `x' especifica los puntos medios
172
de las celdas. Un razonamiento similar se aplica a `y'. Probablemente slo tenga sentido
especificar los puntos medios de un grid igualmente espaciado. Si se especifica slo una
fila o columna y la longitud de `x' o `y', el rea de usuario completa es llenada en la
direccin especificada.
Si `breaks' es especificado entonces `zlim' no es usado y el algoritmo utiliza `cut', as\'\i\ los
intervalos son cerrados a la derecha y abiertos a la izquierda excepto para el intrvalo
msinferior.
Ejemplos:
data(volcano)
x <- 10*(1:nrow(volcano))
y <- 10*(1:ncol(volcano))
image(x, y, volcano, col = terrain.colors(100), axes = FALSE)
contour(x, y,volcano,levels=seq(90, 200, by=5),add = TRUE,col = "peru")
axis(1, at = seq(100, 800, by = 100))
173
axis(2, at =seq(100, 600, by = 100))
box()
title(main = "Maunga Whau Volcano\nMapa Topogrfico",cex.main=0.9)
174
6.10. Funcin matplot
La funcin matplot grafica las columnas de una matriz contra las columnas de otra, tal que
la primera columna de x es graficada contra la primera columna de y, la segunda columna
de x contra la segunda de y, etc. Sin embargo si una matriz tiene pocas columnas, stas son
recicladas. El grfico se obtiene como sigue:
Argumentos:
type: Un vector para indicar el tipo de grfico para cada columna de y (como se vi
con la funcin plot), por defecto es p.
lty,lwd: Vectores para indicar los tipos y anchos de lneas para cada columna de y.
pch: Caracter o vector de caracteres o enteros para definir los plotting characters,
por cada columna de y second, etc. The default is the digits (1 through 9, 0).
col: Vector de colores, aunque si no se especifica los colores son usados cclicamente.
175
cex: Vector de dimensiones del factor de expansin de caracteres, es usado
cclicamente.
matplot: doing 5 plots with col= ("1" "2" "2" "4" "4") pch=("1" "2"
"3" "4" "5") ...
aux<-cbind(x2,x3)
#Grafiquemos las dos series en el mismo plano:
matplot(x1,aux,type="l",col=1:2,lty=1:2,xlab="tiempo",
ylab="",yaxt="n",main="Grfica de dos series
simultneas\nmediante matplot")
legend(locator(1),c("serie 1","serie 2"),col=1:2,bty="n",lty=1:2)
176
Figura 6.4: Podemos graficar varias curvas en un mismo plano utilizando la
funcin matplot y adicionalmente agregar leyendas mediante la funcin
legend
> par(mfrow=c(2,2))
Con el anterior comando estamos indicando que hasta cuatro grficas van a aparecer en la
pantalla o en la hoja.
Ejemplo:
Consideremos el conjunto de datos que hace referencia a las pruebas del ICFES. Si estamos
interesados en una comparacin por sexos podemos pensar en un anlisis grfico como el
siguiente. Para obtenerlo asumamos que tenemos nuestro archivo de datos en formato
177
ASCII guardado en el subdirectorio \it datos del disco duro. Una vez estamos en R
corremos los siguientes comandos:
> icfes<-scan(c:/datos/icfes.dat,
type=list( ,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ))
> win.graph()
> par(mfrow=c(2,2))
> boxplot(split(icfes[[3]],split[[1]]))
> boxplot(split(icfes[[4]],split[[1]]))
> boxplot(split(icfes[[5]],split[[1]]))
> boxplot(split(icfes[[6]],split[[1]]))
Para crear el archivo con el grfico, el R posee la funcin postscript() , esta funcin
crea un archivo para ser impreso posteriormente en una impresora con lenguaje postscript.
178
Captulo 7: Grficos para una variable
Los siguientes son algunas funciones que permiten graficar una variable: boxplot(),
hist(), stem(), qqnorm().
Como argumentos esta funcin recibe un vector con datos. Adems, opcionalmente, puede
entrarse como argumento el nmero de barras a ser graficadas o en su defecto el nmero de
clases se determina con la frmula de Sturges.
En R el comando bsico con el cual se obtiene este tipo de grfico es hist, veamos:
hist(x, ...)
hist.default(x, breaks, freq = NULL, probability = !freq,
include.lowest = TRUE,
right = TRUE, col = NULL, border = par("fg"),
main = paste("Histogram of" , xname),
xlim = range(breaks), ylim = NULL,
xlab = xname, ylab,
axes = TRUE, plot = TRUE, labels = FALSE,
nclass = NULL, ...)
179
x: Vector de valores para el que se construye el histograma.
breaks: Puede ser un valor con el cual se indica el nmero aproximado de clases o
un vector cuyos elementos indican los puntos lmites entre las clases o intervalos.
col: Para definir el color de las barras. Por defecto, NULL produce barras sin
fondo.
180
plot: Argumento lgico. Por defecto es TRUE, y el resultado es el grfico del
histograma; si se especifica como FALSE el resultado es una lista de conteos por
cada intervalo.
hist(datos)
hist(datos,nclass=5)
maraton<-scan()
1: 10253 10302 10307 10309 10349 10353 10409 10442 10447 10452 10504 10517
13: 10530 10540 10549 10549 10606 10612 10646 10648 10655 10707 10726 10731
25: 10737 10743 10808 10833 10843 10920 10938 10949 10954 10956 10958 11004
37: 11009 11024 11037 11045 11046 11049 11104 11127 11205 11207 11215 11226
49: 11233 11239 11307 11330 11342 11351 11405 11413 11438 11453 11500 11501
61: 11502 11503 11527 11544 11549 11559 11612 11617 11635 11655 11731 11735
73: 11746 11800 11814 11828 11832 11841 11909 11926 11937 11940 11947 11952
85: 12005 12044 12113 12209 12230 12258 12309 12327 12341 12413 12433 12440
97: 12447 12530 12600 12617 12640 12700 12706 12727 12840 12851 12851 12937
109: 13019 13040 13110 13114 13122 13155 13205 13210 13220 13228 13307 13316
121: 13335 13420 13425 13435 13435 13448 13456 13536 13608 13612 13620 13646
133: 13705 13730 13730 13730 13747 13810 13850 13854 13901 13905 13907 13912
145: 13920 14000 14010 14025 14152 14208 14230 14344 14400 14455 14509 14552
157: 14652 15009 15026 15242 15406 15409 15528 15549 15644 15758 15837 15916
169: 15926 15948 20055 20416 20520 20600 20732 20748 20916 21149 21714 23256
181
181:
Read 180 items
horas<-maraton%/%10000
min<-(maraton-horas*10000)%/%100
seg<-maraton-horas*10000-min*100
Tiempos<-horas+min/60+seg/3600
> Tiempos
[1] 1.048056 1.050556 1.051944 1.052500 1.063611 1.064722 1.069167 1.078333
[9] 1.079722 1.081111 1.084444 1.088056 1.091667 1.094444 1.096944 1.096944
[17] 1.101667 1.103333 1.112778 1.113333 1.115278 1.118611 1.123889 1.125278
[25] 1.126944 1.128611 1.135556 1.142500 1.145278 1.155556 1.160556 1.163611
[33] 1.165000 1.165556 1.166111 1.167778 1.169167 1.173333 1.176944 1.179167
[41] 1.179444 1.180278 1.184444 1.190833 1.201389 1.201944 1.204167 1.207222
[49] 1.209167 1.210833 1.218611 1.225000 1.228333 1.230833 1.234722 1.236944
[57] 1.243889 1.248056 1.250000 1.250278 1.250556 1.250833 1.257500 1.262222
[65] 1.263611 1.266389 1.270000 1.271389 1.276389 1.281944 1.291944 1.293056
[73] 1.296111 1.300000 1.303889 1.307778 1.308889 1.311389 1.319167 1.323889
[81] 1.326944 1.327778 1.329722 1.331111 1.334722 1.345556 1.353611 1.369167
[89] 1.375000 1.382778 1.385833 1.390833 1.394722 1.403611 1.409167 1.411111
[97] 1.413056 1.425000 1.433333 1.438056 1.444444 1.450000 1.451667 1.457500
[105] 1.477778 1.480833 1.480833 1.493611 1.505278 1.511111 1.519444 1.520556
[113] 1.522778 1.531944 1.534722 1.536111 1.538889 1.541111 1.551944 1.554444
[121] 1.559722 1.572222 1.573611 1.576389 1.576389 1.580000 1.582222 1.593333
[129] 1.602222 1.603333 1.605556 1.612778 1.618056 1.625000 1.625000 1.625000
[137] 1.629722 1.636111 1.647222 1.648333 1.650278 1.651389 1.651944 1.653333
[145] 1.655556 1.666667 1.669444 1.673611 1.697778 1.702222 1.708333 1.728889
[153] 1.733333 1.748611 1.752500 1.764444 1.781111 1.835833 1.840556 1.878333
[161] 1.901667 1.902500 1.924444 1.930278 1.945556 1.966111 1.976944 1.987778
[169] 1.990556 1.996667 2.015278 2.071111 2.088889 2.100000 2.125556 2.130000
[177] 2.154444 2.196944 2.287222 2.548889
par(mfrow=c(2,2))
hist(Tiempos,nclass=2,main="",xlab='Tiempos-horas',ylab='frecuencias')
mtext("(A)",side=1,line=4,font=1)
hist(Tiempos,nclass=4,main="",xlab='Tiempos-horas',ylab='frecuencias')
mtext("(B)",side=1,line=4,font=1)
hist(Tiempos,nclass=8,main="",xlab='Tiempos-horas',ylab='frecuencias')
mtext("(C)",side=1,line=4,font=1)
hist(Tiempos,nclass=16,main="",xlab='Tiempos-horas',ylab='frecuencias')
mtext("(D)",side=1,line=4,font=1)
182
puntos<-c(quantile(Tiempos,probs=c(0,0.5,1)))
puntos2<-c(quantile(Tiempos,probs=c(0,0.25,0.5,0.75,1)))
puntos3<-c(quantile(Tiempos,probs=seq(0,1,by=0.10)))
puntos4<-c(quantile(Tiempos,probs=seq(0,1,by=0.05)))
puntos
0% 50% 100%
1.048056 1.384306 2.548889
puntos2
0% 25% 50% 75% 100%
1.048056 1.201806 1.384306 1.625000 2.548889
puntos3
0% 10% 20% 30% 40%
1.048056 1.111833 1.168889 1.233556 1.294889
50% 60% 70% 80% 90%
1.384306 1.498278 1.580667 1.653778 1.904694
100%
2.548889
puntos4
0% 5% 10% 15% 20% 25% 30% 35%
1.048056 1.081042 1.111833 1.141458 1.168889 1.201806 1.233556 1.260569
40% 45% 50% 55% 60% 65% 70% 75%
1.294889 1.327403 1.384306 1.435458 1.498278 1.539667 1.580667 1.625000
80% 85% 90% 95% 100%
1.653778 1.735625 1.904694 2.018069 2.548889
hist(Tiempos,breaks=puntos,freq=FALSE,ylim=c(0,2),labels=TRUE,main="",
ylab="densidad")
mtext("(A)",side=1,line=4,font=1)
hist(Tiempos,breaks=puntos2,freq=FALSE,ylim=c(0,2),labels=TRUE,main="",
ylab="densidad")
mtext("(B)",side=1,line=4,font=1)
hist(Tiempos,breaks=puntos3,freq=FALSE,ylim=c(0,2),main="",
ylab="densidad")
mtext("(C)",side=1,line=4,font=1)
hist(Tiempos,breaks=puntos4,freq=FALSE,ylim=c(0,2),main="",
ylab="densidad")
mtext("(D)",side=1,line=4,font=1)
183
Nota: En estos histogramas, las alturas corresponden a las intensidades (frec.
relativa/long. intervalo). Por tanto, el rea de cada rectngulo da cuenta de las frecuencias
relativas. Para el caso (A) ambos intervalos tienen igual rea y cada uno contiene 50 \% de
los datos. esto puede verificarse as:
Figura 7.1: Se muestra la distribucin del tiempo utilizado por los atletas masculinos
clasificados en el grupo lite en la media maratn de CONAVI. El histograma A tiene solo 2
barras. El grfico B, con 4 barras,y el C, con 8 barras, muestra ms claramente la asimetra
(este es el que la mayora de los programas produce por defecto, ya que la regla de Sturges,
para este conjunto de datos aproxima a 8 barras). Si consideramos ms barras por ejemplo 16,
como tenemos en D, se refina ms la informacin y empezamos a notar multimodalidad.
184
Figura 7.2: La seleccin de histogramas con barras de amplitud variable no es recomendada
por diversos autores, pero si lo hacemos con cuidado podemos obtener grficos muy
ilustrativos. Se seleccionaron amplitudes de tal forma que cada barra posea el mismo nmero
de observaciones. El histograma A tiene barras que contienen el 50% de las observaciones, el
B con 25%, el C con 10% y el D con 5%. La multimodalidad es ms clara.
boxplot(x, ...)
boxplot.default(x,...,range=1.5,width=NULL,varwidth=FALSE,notch=FALSE,
names, boxwex = 0.8, data = parent.frame(), plot = TRUE, border =
par("fg"), col=NULL, log = "", pars =NULL,horizontal=FALSE,add= FALSE)
boxplot.formula(formula, data = NULL, subset, na.action, ...)
Argumentos:
185
x, ...: Los datos que van a ser graficados con el boxplot. Puede ser un conjunto de
vectores separados, cada uno correspondiendo a un boxplot componente o una lista
que contiene a tales vectores. Alternativamente, una especifiacn de la forma x ~ g
puede ser dada para indicar que las observaciones en el vector "x van a ser
agrupadas de acuerdo a los niveles del factor g. En este caso, el argumento data
puede usarse para par valores para la variables en la especificacin.`NA's son
permitidos en los datos.
varwidth: Si es TRUE, las cajas son dibujadas con anchos proporcionales a las
races cuadradas del nmero de observaciones en los grupos.
notch: Si es TRUE, una cua es dibujada a cada lado de las cajas. Cuando las
cuas de dos grficos de caja no se traslapan, entonces las medianas son
significativamente diferentes a un nivel del 5%.
boxwex: Un factor de escala a ser aplicado a todas las cajas. Cuando slo hay unos
pocos grupos, la apariencia del grfico puede mejorarse haciendo las cajas ms
angostas.
186
data: data.frame, list, o environment en el cual los nombres de las variables
son evaluados cuando x es una frmula.
border: Un vector opcional de colores para las lneas de las cajas y debe ser de
longitud igual al nmero de grficos.
col: Si se especifica, los colores que contiene sern usados en el cuerpo de las cajas.
pars: Los parmetros grficos pueden ser pasados como argumentos para el boxplot.
data: Un data.frame (o lista) del cual las variables en frmula sern tomadas.
187
na.action: Una funcin la cual indica lo que debera pasar cuando los datos
contienen NA's.
viajes97<-matrix(scan('a:/pasaje97.txt'),ncol=4,byrow=T)
viajes98<-matrix(scan('a:/pasaje98.txt'),ncol=4,byrow=T)
viajes99<-matrix(scan('a:/pasaje99.txt'),ncol=4,byrow=T)
pasajeros.viaj97<-matrix((viajes97[,4]/viajes97[,3]),ncol=1)
pasajeros.viaj98<-matrix((viajes98[,4]/viajes98[,3]),ncol=1)
pasajeros.viaj99<-matrix((viajes99[,4]/viajes99[,3]),ncol=1)
anos<-
c(rep(97,nrow(viajes97)),rep(98,nrow(viajes98)),rep(99,nrow(viajes99)))
pasajeros.viaje<-
rbind(pasajeros.viaj97,pasajeros.viaj98,pasajeros.viaj99)
boxplot(split(pasajeros.viaje,anos),
main='Promedio de pasajeros transportados\nporviajes- Ao',
xlab='aos', ylab='nmero por viaje')
#otraforma:
pasajeros97<-cbind(rep(97,nrow(viajes97)),pasajeros.viaj97)
pasajeros98<-cbind(rep(98,nrow(viajes98)),pasajeros.viaj98)
pasajeros99<-cbind(rep(99,nrow(viajes99)),pasajeros.viaj99)
pasajeros<-rbind(pasajeros97,pasajeros98,pasajeros99)
boxplot(pasajeros[,2]~pasajeros[,1], main='Promedio de pasajeros
transportados\npor viajes - Ao', xlab='aos',ylab='nmero por viaje')
188
Figura 7.3: Podemos comparar las distribuciones del nmero de pasajeros por
viaje durante tres aos. Se puede apreciar simultneamente la tendencia y la
dispersin.
Nos permite obtener el grfico de tallo y hoja. Este grfico fue propuesto por Tukey (1977)
y a pesar de no ser un grfico para presentacin definitiva se utiliza a la vez que el analista
recoge la informacin ve la distribucin de los mismos. Estos grficos son fciles de
realizar a mano y se usan como una forma rpida y no pulida de mirar los datos.
Qu nos muestra?
1. El centro de la distribucin.
189
Simtrica Si las porciones a cada lado del centro son imgenes espejos de las otras.
Sesgada a la izquierda Si la cola izquierda (los valores menores) es mucho ms larga que
los de la derecha (los valores mayores)
Outliers Observaciones individuales que caen muy por fuera del patrn general de
los datos.
190
7 67
7 11
6 8
6 00
5 5666677789999
5 000000011233344444
4 5555555666777788889999
4 00334
3 88
----+----+----+----+--
Esta es una funcin genrica que por defecto produce un Q-Q Plot Normal para los valores
en `y'. Adicionalmente, la funcin qqline agrega una lnea al anterior grfico cuando es
normal, la cual pasa a travs del primer y tercer cuartil. La funcin qqplot produce un
Q-Q Plot de dons conjuntos de datos. En cualquiera de las tres anteriores funciones pueden
especificarse parmetros grficos (ver par).
qqnorm(y, ...)
qqnorm(y, ylim, main = "Normal Q-Q Plot", xlab ="Theoretical Quantiles",
ylab = "Sample Quantiles", plot.it =TRUE, ...)
qqline(y, ...)
qqplot(x, y, plot.it = TRUE, xlab =deparse(substitute(x)), ylab =
deparse(substitute(y)), ...)
Argumentos:
191
xlab, ylab, main: Etiquetas de ejes y ttulo del grfico.
Ver: par
nf<-layout(rbind(c(0,1,1,0),c(0,2,2,0)))
y <- rt(200, df = 5)
qqnorm(y)
qqline(y, col = 2)
qqplot(y, rt(300, df = 5),main="Q-QPlot")
192
Figura 7.4: Grficos obtenidos mediante las funciones qqnorm,
qqline, qqplot
193
Captulo 8: Grficos Multivariables
Las matrices de dispersin proporcionan un mtodo simple de presentar las relaciones entre
pares de variables, y es la versin mltiple de plot(). Consiste en una matriz donde cada
entrada presenta un grfico de dispersin sencillo. Un inconveniente es que si tenemos
muchas variables el tamao de cada entrada se reduce demasiado impidiendo ver con
claridad las relaciones entre los pares de variables.
pairs(x, ...)
pairs.default(x, labels = colnames(x), panel = points, ...,
lower.panel = panel, upper.panel = panel,
diag.panel = NULL, text.panel = textPanel,
label.pos = 0.5 + has.diag/3, cex.labels = NULL,
font.labels = 1, row1attop = TRUE)
Por ejemplo:
pies<-matrix(scan("c:/graficosr/graficos/dedos.dat"),ncol=6,byrow=T)
#x1:longitud max de la huella #x2:amplitud max de la huella
#x3:amplitud max del talon #x4:longitud max del dedo mayor
#x5:amplitud max del dedo mayor #x6:sexo 1: hombre, 0: mujer
194
pairs(pies,labels=c("x1","x2","x3","x4","x5","x6"), main='Matriz
de dispersin\n \npara medidas de pies,cex.main=0.8)
Figura 8.1: Esta grfica corresponde a los cruces de las variables medidas en los pies de varias personas.
195
labels: Un vector para identificar los nombres de las columnas. Por defecto toma los
nombres de columnas de la matriz x.
...: Indica que es posible agregar otros parmetros grficos, tales como pch y col, con
los cuales puede especificarse un vector de smbolos y colores a ser usados en los
scatterplots.
196
row1attop: Parmetro lgico con el cual se especifica si el grfico para especificar
si el diseo lucir como una matriz con su primera fila en la parte superior o como un
grfico con fila uno en la base. Por defecto es lo primero.
Autores:
plot(x, ...)
plot(x, y, xlim=range(x), ylim=range(y), type="p",main, xlab, ylab, ...)
plot(y ~ x, ...)
Donde:
197
xlim, ylim: Los rangos para los ejes x e y respectivamente.
preciosr9<-matrix(scan("c:/graficosr/graficos/r9.txt"),ncol=13,byrow=T)
ano<-preciosr9[1,]
valor<-preciosr9[2,]
plot(ano,valor,main='Precio de Oferta Renault 9 vs.
Ao',xlab='ao',ylab='valor',pch=19)
198
Figura 8.2: Esta grfica presenta informacin sobre el precio de oferta de
carros Renault 9 vs. el ao del carro aparecidos en los avisos clasificados de un
peridico local.
199
stars(x, full = TRUE, scale = TRUE, radius = TRUE, labels =
dimnames(x)[[1]], locations = NULL, xlim = NULL, ylim = NULL,
len= 1, colors = NULL, key.loc = NULL, key.labels = NULL, key.xpd =
TRUE, draw.segments = FALSE, axes = FALSE, cex = 0.8, lwd = 0.25,...)
labels: Un vector de caracteres para etiquetar cada grfico. Por defecto se tiene
especificado que use los nombres de las filas de la matriz de datos.
200
ylim: Es un vector con el rango de coordenadas y a graficar.
colors: Vector de valores enteros, cada uno de los cuales especifica un color para
uno de los segmentos. Es ignorado si draw.segments = FALSE
key.loc: Es un vector con las coordenadas x e y para ubicar la unidad que da las
claves que identifican las variables en cada start plot.
201
Ejemplos:
datos.Hombres<-matrix(scan('a:/Acoplah.dat'),ncol=12,byrow=T)
datos.Mujeres<-matrix(scan('a:/Acoplam.dat'),ncol=12,byrow=T)
datos<-rbind(datos.Hombres,datos.Mujeres)
nombres1<-c(paste("hombre",1:100,sep=""))
nombres2<-c(paste("mujer",1:100,sep=""))
rownames(datos.Hombres)<-nombres1
rownames(datos.Mujeres)<-nombres2
stars(datos.Hombres[1:12,2:12],key.loc=c(11,3),key.labels =
abbreviate(colnames(datos.Hombres)[2:12]), main='Stars Plots-Datos
antropomtricos (hombres)\nPoblacin laboral Colombiana')
stars(datos.Mujeres[1:12,2:12],key.loc=c(11,3),key.labels =
abbreviate(colnames(datos.Mujeres)[2:12]), main='Stars Plots-Datos
antropomtricos (mujeres)\nPoblacin laboral Colombiana')
stars(datos.Hombres[1:12,2:12],key.loc=c(11,3),key.labels =
abbreviate(colnames(datos.Hombres)[2:12]), main='Stars Plots-Datos
antropomtricos (hombres)\nPoblacin laboral Colombiana',
draw.segments=TRUE,len=0.8)
202
Nota: El argumento key.labels = abbreviate(colnames(datos.Hombres)[2:12]), indica
utilizar en el diagrama de claves los nombres de las columnas 2 a 12 de la matriz
datos.hombres. pero abrevindolos, de lo contrario las claves apareceran completas, pero
por su extensin esto resultara inadecuado. Algo similar puede hacerse con las etiquetas de
las observaciones (nombres de filas de la matriz), pero de la siguiente forma: labels =
abbreviate(case.names(datos.Hombres))
Figura 8.3: En este grfico se presentan los primeros 12 datos antropomtricos de la base de
datos de hombres. Observe que los hombres 3 y 6 presentan un comportamiento que sobresale
respecto al resto (el nmero 3 tiene medidas mayores y el 6 tiene medidas ms pequeas).
203
Figura 8.4: En este grfico se presentan los primeros 12 datos antropomtricos de la base de
datos de mujeres. Observe que las mujer 2 y 4 presenta un comportamiento que sobresale
respecto al resto (tienen medidas ms pequeas) y que en las variables pliegue cutneo
subescapular (PICS) y en pliegue cutneo triceps (PICT) parece mayor variabilidad (en la
parte inferior de las estrellas observe cmo varel patrn).
Figura 8.5: En este grfico se presentan los mismos 12 datos antropomtricos de la base de
datos de hombres, pero con una modificacin, los grficos presentan sectores circulares de
radios proporcionales a los valores de cada variable en el respectivo sujeto, adems que cada
sector ha sido coloreado. Esto fue posible especificando el argumento draw.segments=TRUE.
204
8.4. Grficas Trellis (de Rejilla)
Las grficas Trellis (de rejilla) son grficas que contienen uno o ms paneles, arreglados en
forma de rejilla o matriz triangular. Cada panel presenta un grfico con un subconjunto de
los datos. Todos los paneles presentan el mismo tipo de grfico. Los subconjuntos de datos
son escogidos con algn criterio uniforme, condicionando en variables continuas o
discretas, proporcionando una serie de vistas en forma de coordenadas.
La funcin coplot permite obtener este tipo de grficos, sus argumentos son:
formula: Para definir la forma del grfico condicional como y~x|a, indicando que
se graficar y versus x condicionados a la variable a. Si la frmula es de la forma
y~x|a*b entonces los grficos de y versus x sern condicionados sobre las
variables a y b. x y y deben ser numricas pero a y b pueden no serlo.
data: Un marco de datos que contiene los valores para cualquiera de las variables en
la frmula, aunque por defecto coplot usa los datos del ambiente en el cual ha sido
invocado.
205
given.values: Corresponde a un valor o lista de dos valores los cuales determinan
cmo los condicionamientos sobre a y b van a darse. Si slo se condiciona sobre una
variable, entonces este argumento generalmente corresponde a una matriz con dos
columnas, con cada fila dando un intervalo sobre el cual se condiciona, pero tambin
puede ser un vector de nmeros o un conjunto de niveles de un factor cuando la
variable sobre la que se condiciona es un factor. En caso de slo una variable
condicionante, el resultado de co.intervals(..) puede ser usado directamente como el
valor de este argumento.
rows: Los paneles del grfico son puestos en un arreglo de filas por columnas. Este
argumento da el nmero de filas en el arreglo.
col: Para especificar un vector de colores a ser usados para los puntos. Si es muy
corto los valores son reciclados.
206
number: Nmero entero, para indicar el nmero de intervalos de la variable
condicionante. Puede ser de longitud dos para la direccin x y y.
datos.icfes<-read.table('c:/graficos/icfes.dat')
sexo<-as.factor(datos.icfes[,1])
conoc.mat<-datos.icfes[,10]
apt.mat<-datos.icfes[,9]
electiva<-as.factor(datos.icfes[,12])
apt.verbal<-datos.icfes[,7]
fisica<-datos.icfes[,5]
coplot(conoc.mat ~ apt.mat | sexo*electiva,
panel=function(x,y,...) panel.smooth(x,y, span= .8, ...))
207
Figura 8.6: Hay paneles vacos indicando que las mujeres no tomaron las
electivas correspondientes. En cuanto a la influencia del sexo y la electiva sobre
los resultados en matemtica no parecen ser determinantes.
208
Figura 8.7: A mayor aptitud matemtica y verbal mejores resultados en fsica y
en matemticas. tambin quien tiene buenos resultados en matemticas logra
buenos resultados en fsica.
209
Parte III
Estadstica en R
210
Captulo 9: Modelos Estadsticos en R
R posee una amplia gama de funciones que nos permiten resolver asuntos de una forma
eficiente y elegante. Usualmente los resultados de las funciones no son extensos. Realmente
el programa trata de no llenar la pantalla de resultados, sino que el usuario pide lo que
necesita. A veces la combinacin de varias funciones produce resultados excelentes. R es
bastante flexible para la creacin de modelos altamente complejos.
9.1.1 mean():
mean(x, ...)
mean.default(x, trim = 0, na.rm = FALSE)
Argumentos:
211
trim: Fraccin de recorte (de 0 a 0.5) de cada extremo de `x' antes de calcular la
media.
na.rm: Un valor lgivo para indicar si valores `NA' deberan ser ignorados para los
clculos.
Ejemplo:
9.1.2 weighted.mean():
weighted.mean(x, w, na.rm=FALSE)
Argumentos:
x: Vector num\'rico.
212
na.rm: Un valor lgivo para indicar si valores `NA' deberan ser ignorados para los
clculos. si no se especifican, entonces a todos los valores se les da el mismo peso.
Ejemplo
var calcula la matriz de varianzas y covarianzas de una matriz de datos, cor y cov
calculan respectivamente, la correlacin y la covarianza entre dos vectores `x' y `y'
Argumentos:
213
use: Una cadena de caracteres opcional para indicar el mtodo para calcular
covarianzas en la presencia de valores faltantes. Debe ser una abreviacin de las
siguientes cadenas all.obs, `"complete.obs"' o pairwise.complete.obs.
Ejemplos:
x<-rnorm(10)
y<-rnorm(10)
y
[1] -0.9546754 0.3951823 1.0079476 0.1308736 0.6154087 0.8264678
[7] -0.4329034 0.3916516 -0.8908572 -0.8976308
var(x)
[1] 0.5058532
var(x,y)
[1] 0.02954414
cov(x,y)
[1] 0.02954414
cor(x,y)
[1] 0.05518748
library(mass)
#Generando una matriz de datos normales bivariados:
x<-matrix(mvrnorm(10,mu=c(0,0),Sigma=matrix(c(1,0,0,1),ncol=2)),ncol=2)
> x
[,1] [,2]
214
[1,] 0.03365421 0.01812461
[2,] -0.66313500 2.31526069
[3,] -0.92103077 2.21952089
[4,] -0.97599197 1.39551295
[5,] -0.55824010 0.15656623
[6,] 0.77337990 0.52407043
[7,] -1.62980628 0.26459324
[8,] -1.01363258 -1.74454949
[9,] -0.32201918 -0.07920861
[10,] -1.40875243 -0.77490633
var(x)
[,1] [,2]
[1,] 0.49486624 0.07806947
[2,] 0.07806947 1.60101998
cov(x)
[,1] [,2]
[1,] 0.49486624 0.07806947
[2,] 0.07806947 1.60101998
cor(x)
[,1] [,2]
[1,] 1.00000000 0.08770795
[2,] 0.08770795 1.00000000
cov(x,y)
[,1]
[1,] 0.1037037
[2,] 0.4147815
9.1.4 median():
median(x, na.rm=FALSE)
215
Ejemplo:
library(mass)
x<-matrix(mvrnorm(10,mu=c(0,0),Sigma=matrix(c(1,0,0,1),
ncol=2)),ncol=2)
apply(x,2,median)
apply(x,1,median)
[1] 0.02588941 0.82606284 0.64924506 0.20976049 -0.20083693 0.648725
[7] -0.68260652 -1.37909104 -0.20061389 -1.09182938
Toman varios vectores como argumentos y retornan un slo vector dando el mximo y el
mnimo paralelo respectivamente, de los primeros elementos de todos los argumentos, el
segundo elemento de todos los argumentos, etc. Si los vectores no son de igual longitud, el
ms corto es reciclado.
Ejemplo:
library(mass)
x<-matrix(mvrnorm(10,mu=c(0,0),Sigma=matrix(c(1,0,0,1),ncol=2)),ncol=2)
min(x)
[1] -1.744549
max(x)
216
[1] 2.315261
apply(x,1,min)
[1] 0.01812461 -0.66313500 -0.92103077 -0.97599197 -0.55824010 0.52407043
[7] -1.62980628 -1.74454949 -0.32201918 -1.40875243
pmin(x[,1],x[,2])
[1] 0.01812461 -0.66313500 -0.92103077 -0.97599197 -0.55824010 0.52407043
[7] -1.62980628 -1.74454949 -0.32201918 -1.40875243
apply(x,2,max)
[1] 0.7733799 2.3152607
pmax(x[1,],x[2,])
[1] 0.03365421 2.31526069
9.1.7 quantile():
Argumentos:
x: Un vector numrico.
217
quantile(x,p) como funcin de p interpola linealmente los puntos ((i-1)/(n-
1),ox[i]) , donde ox<-order(x) (los estadsticos de orden) y n<-length(x).
De donde quantile(x, p)=(1-f)*ox[i]+f*ox[i+1], donde r<-1+(n-
1)*p, i<-floor(r),f <-r-i y ox[n+1]:= ox[n]
Ejemplos:
9.1.8 range():
Devuelve un vector con los valores mnimo y mximo de todos los argumentos dados.
Ejemplos:
9.1.9 rank():
218
Ejemplos:
9.1.10 summary():
Con esto obtenemos varias estadsticas de resumen sobre una variable, como lo son los
cuartiles, etc.
summary(x)
Min. 1st Qu. Median Mean 3rd Qu. Max.
-0.6718 -0.3072 0.6527 0.4333 1.2390 1.2540
> cerveza.dat<-read.table('c:/datos/cerveza.dat')
GRAFICOS
1) HISTOGRAMAS
> hist(cerveza.dat[,2])
> hist(cerveza.dat[,2],col='grey',ylab='Frecuencia',x
lab='% de Alcohol',main=)
219
> title(main='Distribucin del Contenido de Alcohol \n
en Diferentes Cervezas')
2) GRAFICO DE CAJA
> boxplot(cerveza.dat[,2],col='grey',y
lab='% de Alcohol',main=)
> title(main='Distribucin del Contenido de Alcohol \n
en Diferentes Cervezas')
> boxplot(split(cerveza.dat[,2],cerveza.dat[,1]),col='grey',
ylab='% de Alcohol',main=)
> title(main='Distribucin del Contenido de Alcohol \n en
Diferentes Cervezas por Pases')
3) GRAFICO DE DISPERSION
> plot(cerveza.dat[,2],cerveza.dat[,3],col='grey',x
lab='% de Alcohol',ylab='Caloras',main=)
> plot(cerveza.dat[,2],cerveza.dat[,3],xlab='% de Alcohol',
ylab='Caloras',main=)
> title(main='Contenido de Alcohol vs. Caloras \n
en Diferentes Cervezas')
4) MEDIDAS DE RESUMEN
> calcule.todo(cerveza.dat[,2])
Estadisticas Basicas
Medidas de Localizacion
Media= 5.012704
Mediana= 4.96
220
Minimo= 2
Percentil 5%= 4.092
Percentil 10%= 4.27
Primer Cuartil= 4.655
Tercer Cuartil= 5.245
Percentil 90%= 5.906
Percentil 95%= 6.322
Maximo= 9.5
Medidas de Dispersion
Medidas de Forma
Sesgo= 1.073347
Kurtosis= 7.841771
Prueba de Normalidad Shapiro-Francia: W= 0.8573725
Rechace normalidad si W<0.947 Nivel:5%
>
9.2. Frmulas en R
Una frmula en R es una expresin simblica que define la forma estructural del modelo y
es utilizada en funciones que ajustan modelos. Un ejemplo de una frmula es el siguiente:
221
precio ~ modelo + tipo
Una frmula puede llegar a ser bastante compleja. En la frmula arriba hemos includo la
variable tipo que es categrica.Los siguientes tipos de datos pueden aparecer en una
frmula:
precio ~ modelo*tipo
222
es equivalente al modelo
Trminos encajados surgen cuando los niveles de un factor dentro de un nivel de algn otro
factor o combinacin de factores. Por ejemplo si tenemos datos geogrficos y tenemos el
factor departamento y el factor municipio . Obviamente los niveles de municipio dependen
del departamento. En este caso el efecto principal carece de sentido, el modelo debe ajustar
un efecto principal para departamento y luego mirar los coeficientes para municipio dentro
de cada nivel de departamento. La frmula ser:
y ~ model
formula(x, ...)
as.formula(object, env=parent.frame())
I(x)
Argumentos:
223
x, object: Un objeto.
Detalles:
Los modelos a justar por funciones como lm y glm son especificados en una
forma simblica compacta. El operador ~ es bsico en la formacin de tales modelos.
Una expresin de la forma y ~ model es interpretado como una especificacin de
que la respuesta `y' es modelada por un predictor lineal especificado simblicamente
por `model'. Tal modelo consiste de una serie de trminos separados por operadores
`+'. Los trminos en s mismos consisten de nombres de variables y factores
separados por operadores `:'. Tal trmino es interpretado como la interaccin de
todas las variables y factores que aparecen en el trmino.
Adems de `+' y `:', otros operadores son tiles en frmulas de modelos. El operador
`*' denota cruce de factores. `a*b' es interpretado como `a+b+a:b'. El operador `^'
indica cruzar al grado especificado. Por ejemplo (a+b+c)^2 es idntico a
(a+b+c)*(a+b+c) en cambio expande a una frmula que contiene los efectos
principales para `a', `b' y `c' junto con sus interacciones de segundo orden. El
operador `%in%' indica que los trminos a su izquierda estn anidados con aquellos a
su derecha. Por ejemplo a+b%in%a expande a la frmula a+a:b. El operador `-'
remueve los trminos especificados, de modo que (a+b+c)^2-a:b es idntico a
a+b+c+b:c+a:c. Puede usarse tambin para remover el trmino intercepto: y~x-
1 es una recta que pasa por el origen. Un modelo sin intercepto puede especificarse
tambin como y~x+0 o 0+y~x.
224
Mientras las frmulas slo involucren variables y nombres de factores, pueden
tambin incluir expresiones aritmticas. La frmula log(y)~a+log(x) es
bastante legal. Cuando tales expresiones aritmticas incluyen operadores que son
tambin usados simblicamente en la frmula del modelo, puede haber confusin
entre el operador aritmtico y el simblico.
Para evitar esta confucin, la funcin I() puede usarse para encerrar entre parntesis
aquellas porciones de una frmula de modelo donde los operadores son usados en su
sentido aritmtico. Por ejemplo, en la frmula y~a+I(b+c) el trmino `b+c' ser
interpretado como la suma de `b' y `c'.
Valor: Todas las funciones anteriores producen un objeto de clase `formula' que
contiene una frmula de modelo simblica.
Ambientes: Un objeto frmula tiene una ambiente asociado, y ste ambiente es usado por
model.frame para evaluar las variables que no son halladas en el argumento data
suministrado. Las frmulas creadas con as.formula sern usadas en el argumento env
por su ambiente. Frmulas preexistentes estraidas con as.formula slo tendrn su
ambiente cambiado si env es dado explcitamente.
Ejemplos:
> fo
y ~ x1 * x2
> typeof(fo)
[1] "language"
225
> terms(fo)
y ~ x1 + x2 + x1:x2
attr(,"variables")
list(y, x1, x2)
attr(,"factors")
x1 x2 x1:x2
y 0 0 0
x1 1 0 1
x2 0 1 1
attr(,"term.labels")
[1] "x1" "x2" "x1:x2"
attr(,"order")
[1] 1 1 2
attr(,"intercept")
[1] 1
attr(,"response")
[1] 1
attr(,".Environment")
<environment: R_GlobalEnv>
> environment(fo)
<environment: R_GlobalEnv>
> environment(as.formula("y~x"))
<environment: R_GlobalEnv>
> environment(as.formula("y~x",env=new.env()))
<environment: 01C8BCA4>
>
#definiendo frmula:
226
y ~ x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + x10 + x11 +
x12 + x13 + x14 + x15 + x16 + x17 + x18 + x19 + x20 + x21 +
x22 + x23 + x24 + x25
227
dos muestras para proporciones
power.t.test(ctest) Clculos de potencia para
pruebas t de una y dos muestras
print.pairwise.htest(ctest) Mtodo de impresin para
pruebas pareadas
print.power.htest(ctest) Mtodo de impresin para objeto de
clculo de potencia
prop.test(ctest) Prueba de igualdad o proporciones dadas
prop.trend.test(ctest) Prueba para tendencia en proporciones
quade.test(ctest) Quade Test
shapiro.test(ctest) Test Shapiro-Wilk
t.test(ctest) test t de Student
var.test(ctest) Prueba F para comparar dos varianzas
wilcox.test(ctest) Pruebas de suma de rango de Wilcoxon k y
rango con signo
shapiro.test(x)
Argumentos:
228
method: Cadena de caracteres Shapiro-Wilk normality test
Referencias:
Patrick Royston (1982) An Extension of Shapiro and Wilk's W Test for Normality to
Large Samples. Applied Statistics, 31, 115-124.
Patrick Royston (1982) Algorithm AS 181: The W Test for Normality. Applied
Statistics, 31, 176-180.
Patrick Royston (1995) A Remark on Algorithm AS 181: The W Test for Normality.
Applied Statistics, 44, 547-551.
Ejemplo
library(ctest)
shapiro.test(rnorm(100, mean = 2, sd = 4))
Shapiro-Wilk normality test
data: rnorm(100, mean = 2, sd = 4)
W = 0.9797, p-value = 0.1265
shapiro.test(rexp(100))
Shapiro-Wilk normality test
data: rexp(100)
W = 0.8524, p-value = 1.458e-08
229
Siguiendo la filosofa del programa, el usuario puede crear sus propias funciones, basadas
en las que el programa provee de tal forma que los resultados que realmente se desean sean
los que se obtengan. Entre las funciones que trae el programa tenemos
1. lm(),
2. lm.influence(),
3 lm.object(),
4. mlm.object(),
5. ls.diag(),
6. ls.summary(),
7. ls.print(),
8. lsfit(),
9. poly(),q
10. stepwise(),
11. hat().
Es usada para ajustar modelos lineales. Puede usarse para realizar regresiones, anlisis de
varianza de un solo estrato, y anlisis de covarianza (aunque aov puede dar una interface
ms conveniente para estas).
Argumentos:
230
data: Marco de datos opcional que contiene las variables en el modelo. por defecto
las variables son tomadas de `environment(formula)' , tpicamente el
ambiente del cual lm es llamada.
na.action: Una funcin que indica lo que debera hacerse cuando hay datos faltantes
`NA's. El valor por defecto es el ajustado por `na.action'.
231
offset: Puede usarse para especificar una componente conocida anterior a ser
incluida en el predictor lineal durante el ajuste. Un trmino `offset' puede ser
incluido en la frmula en vez o tambin, y si ambos son especificados su suma es
usada.
Las funciones summary y anova son usadas para obtener e imprimir un resumen y una
tabla de anlisis de varianzas de los resultados. Las funciones genricas extractoras
coefficients, effects, fitted.values y residuals extraen varias
caractersticas tiles de los valores retornados por lm.
Un objeto de clase lm es una lista con los siguientes componentes, entre otros:
232
fitted.values: Los valores ajustados.
xlevels: Slo si son relevante, un registro de los niveles de los factores usados en el
ajuste.
Nota: los offsets especificados por `offset' no sern incluidas las predicciones por
predict.lm mientras aquellas especificadas por un trmino offset en formula si ser
incluido.
233
Ver tambin: summary.lm, anova.lm, coefficients, effects, residuals,
fitted.values, predict.lm (para prediccin e intervalos de prediccin),
lm.influence (para diagnsticos de regresin) y glm (para modelos lineales
generalizados).
Argumentos
x: Una matriz cuyas filas corresponden a los casos y las columnas a las variables.
y: Las respuestas. Puede ser una matriz de valores si se quiere mltiple ajuste en el
lado izquiedo.
Detalles: Las observaciones con campos faltantes son omitidas antes del anlisis.
234
Valor: Una lista con los siguientes componentes:
ls.diag(ls.out)
Argumentos:
235
stud.res: Residuaes estudentizados.
Como un ejemplo de lsfit() tenemos el siguiente programa que hace referencia a los precios
de oferta de carros Renault que aparecen en el apndice. Dediquemos un momento a
plantear el modelo que podra explicar el precio de oferta de carros Renault. Una variable
que explica el precio de oferta es el ao del carro. Obviamente esperamos que un carro
viejo sea ms barato que un carro ms nuevo, asimismo el modelo o tipo del carro, si es R4
esperamos tenga un menor valor que un R12 del mismo ao. Preguntas interesantes pueden
ser: Cul es el cambio en el precio de oferta entre dos carros de aos consecutivos? La
diferencia en precios entre R4 y R12 se conserva para diferentes aos? etc. Dado que en el
conjunto de datos tenemos una variable alfanumrica no podemos utilizarla directamente en
la funcin lsfit(). Podemos crear una funcin como la siguiente que nos crea una variable
binaria a partir de una variable alfanumrica y luego la usamos con apply() para resolver
este inconveniencia:
> binaria<-function(a,texto,b)
> if(a==texto) b<-0
236
> else b<-1
> modelo<-matrix(renault$modelo,ncol=1)
> tipo<-apply(modelo,1,binaria,r4,tipo)
> renault.reg<-lsfit(cbind(renault$ano,tipo),
renault$precio,intercept=T)
$coef:
Intercept tipo
-9.846147 0.1618658 1.527716
$residuals:
[1] 0.08755707 -0.09804023 -0.41497986
[4] -0.15311409 0.71554359 -0.16751679
[7] 0.35367782 0.50195977 -0.35191948
[10] -0.27005371 -0.20311409 -0.03083053
[13] -0.18336745 0.49290101 0.23103524
[16] -0.38336745 0.19290101 -0.15963592
[19] -0.15963592
$intercept:
[1] T
$qr:
$qr$qt:
[1] -14.91890517 -2.85727082 3.22552976
[4] -0.10954689 0.76553080 -0.12202358
[7] 0.40302303 0.54039095 -0.30450028
[10] -0.22199251 -0.15954689 -0.16348059
[13] -0.31344951 0.36153495 0.09902718
[16] -0.51344951 0.06153495 -0.28843397
[19] -0.28843397
237
$qr$qr:
Intercept tipo
[1,] -4.3588989 -339.99411760 -1.83532587
[2,] 0.2294157 -21.58703314 0.41691695
[3,] 0.2294157 0.07846199 2.11134062
[4,] 0.2294157 0.03213788 0.15397011
[5,] 0.2294157 -0.43110317 0.27275040
[6,] 0.2294157 -0.10683443 0.18960420
[7,] 0.2294157 -0.38477907 0.26087237
[8,] 0.2294157 0.40273073 0.05894589
[9,] 0.2294157 -0.24580675 0.22523828
Intercept tipo
[10,] 0.2294157 -0.29213086 0.2371163
[11,] 0.2294157 0.03213788 0.1539701
[12,] 0.2294157 0.03213788 -0.3196626
[13,] 0.2294157 -0.15315854 -0.2721505
[14,] 0.2294157 -0.06051033 -0.2959066
[15,] 0.2294157 -0.01418622 -0.3077846
[16,] 0.2294157 -0.15315854 -0.2721505
[17,] 0.2294157 -0.06051033 -0.2959066
[18,] 0.2294157 -0.24580675 -0.2483944
Intercept tipo
[19,] 0.2294157 -0.2458068 -0.2483944
$qr$qraux:
[1] 1.229416 1.402731 1.142092
$qr$rank:
[1] 3
$qr$pivot:
[1] 1 2 3
$qr$tol:
[1] 1e-007
238
Un resumen mejor del objeto anterior se obtiene con la funcin print.ls()
> print.ls(renault.reg)
> renault_diagnosticos<-ls.summary(renault.reg)
> renault_diagnostico
$std.dev:
[1] 0.3476825
$hat:
[1] 0.17611290 0.27887709 0.10152271
[4] 0.09402316 0.26428336 0.09827966
[7] 0.22719096 0.27887709 0.14266893
[10] 0.16638374 0.09402316 0.14677342
[13] 0.12670704 0.12782183 0.13506803
[16] 0.12670704 0.12782183 0.14342902
[19] 0.14342902
$std.res:
[1] 0.27744351 -0.33206026 -1.25918828
239
[4] -0.46267263 2.39937436 -0.50738731
[7] 1.15714808 1.70012741 -1.09316629
[10] -0.85071535 -0.61376018 -0.09599883
[13] -0.56436423 1.51800887 0.71450367
[16] -1.17991973 0.59408571 -0.49609647
[19] -0.49609647
$stud.res:
[1] 0.26928206 -0.32262958 -1.28450956
[4] -0.45100806 2.90355461 -0.49527634
[7] 1.17044941 1.81858216 -1.10034238
[10] -0.84298733 -0.60139245 -0.09297725
[13] -0.55196483 1.58865147 0.70312350
[16] -1.19565489 0.58167223 -0.48408083
[19] -0.48408083
$cooks:
[1] 0.0054846808 0.0142139930 0.0597195059
[4] 0.0074053247 0.6893408505 0.0093529744
[7] 0.1312125795 0.3726020444 0.0662875629
[10] 0.0481495248 0.0130314846 0.0005284375
[13] 0.0154041759 0.1125711756 0.0265740826
[16] 0.0673324542 0.0172415693 0.0137367722
[19] 0.0137367722
$dfits:
[1] 0.12449994 -0.20063466 -0.43178286
[4] -0.14529249 1.74024190 -0.16350968
[7] 0.63461754 1.13092734 -0.44886760
[10] -0.37661135 -0.19373890 -0.03856277
[13] -0.21024796 0.60817498 0.27785417
[16] -0.45543482 0.22267848 -0.19808643
[19] -0.19808643
$correlation:
240
Intercept tipo
Intercept 1.0000000 -0.9967344 -0.2444971
-0.9967344 1.0000000 0.1937247
tipo -0.2444971 0.1937247 1.0000000
$std.err:
[,1]
Intercept 1.29820431
0.01641709
tipo 0.16467379
$cov.unscaled:
Intercept
Intercept 13.9418531 -0.175732854
-0.1757329 0.002229598
tipo -0.4323900 0.004332514
tipo
Intercept -0.432389977
0.004332514
tipo 0.224327954
win.graph()
titulo<-Grafico QQ de los Residuales Studentizados
qqnorm(renault\_diagnosticos\$stud.res, main=titulo,
xlab=Grafico QQ con la Normal,
ylab=Residuales Studentizados)
241
step(object,scope,scale=0,direction=c("both","backward","forward"),
trace=1,keep=NULL,steps=1000,k=2,...)
Argumentos:
scale: Usada en la definicin del estadstico AIC para seleccionar los modelos,
actualmente, slo para los modelos lm.aov y glm.
keep: Una funcin filtro cuya entrada es un objeto modelo ajustado y el estadstico
AIC asociado, y cuya salida es arbitraria. Tpicamente este argumento selecciona un
subconjunto de las componentes del objeto y las retorna. El valor por defecto es no
guardar nada.
242
steps: El nmero mximo de pasos a ser considerado. Por defecto es 1000.
Hay un problema potencial al usar ajustes glm con una variable de escala, ya que en ese
caso el deviance no est relacionado simplemente al log de verosimilitud maximizado. La
funcin extractAIC.glm hace el ajuste apropiado para una familia gaussiana, pero
pueden ser necesarias correciones para otros casos.
Los modelos ajustados deben ser aplicados al mismo conjunto de datos. Esto puede ser un
problema si hay valores faltantes y el valor por defecto de R, `na.action = na.omit' es usado.
Se sugiere remover antes las observaciones con valores faltantes.
Esta funcin tiene una implementacin mnima. Usar la funcin stepAIC de la librera
MASS para un rango de objetos ms amplio.
Autor: B. D. Ripley.
243
Ver tambin: `stepAIC' (en librera MASS), `add1', `drop1'
data(swiss)
summary(lm1 <- lm(Fertility ~ ., data = swiss))
Call:
lm(formula = Fertility ~ ., data = swiss)
Residuals:
Min 1Q Median 3Q Max
-15.2743 -5.2617 0.5032 4.1198 15.3213
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 66.91518 10.70604 6.250 1.91e-07 ***
Agriculture -0.17211 0.07030 -2.448 0.01873 *
Examination -0.25801 0.25388 -1.016 0.31546
Education -0.87094 0.18303 -4.758 2.43e-05 ***
Catholic 0.10412 0.03526 2.953 0.00519 **
Infant.Mortality 1.07705 0.38172 2.822 0.00734 **
---
Signif. codes: 0 `***' 0.001 `**' 0.01 `*' 0.05 `.' 0.1 ` ' 1
244
Df Sum of Sq RSS AIC
- Examination 1 53.0 2158.1 189.9
<none> 2105.0 190.7
- Agriculture 1 307.7 2412.8 195.1
- Infant.Mortality 1 408.8 2513.8 197.0
- Catholic 1 447.7 2552.8 197.8
- Education 1 1162.6 3267.6 209.4
Call:
lm(formula = Fertility ~ Agriculture + Education + Catholic +
Infant.Mortality, data = swiss)
Residuals:
Min 1Q Median 3Q Max
-14.6765 -6.0522 0.7514 3.1664 16.1422
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 62.10131 9.60489 6.466 8.49e-08 ***
Agriculture -0.15462 0.06819 -2.267 0.02857 *
Education -0.98026 0.14814 -6.617 5.14e-08 ***
Catholic 0.12467 0.02889 4.315 9.50e-05 ***
Infant.Mortality 1.07844 0.38187 2.824 0.00722 **
---
245
Signif. codes: 0 `***' 0.001 `**' 0.01 `*' 0.05 `.' 0.1 ` ' 1
slm1$anova
Step Df Deviance Resid. Df Resid. Dev AIC
1 NA NA 41 2105.043 190.6913
2 - Examination 1 53.02656 42 2158.069 189.8606
influence.measures(lm.obj)
rstandard(lm.obj,
infl = lm.influence(lm.obj),
res = weighted.residuals(lm.obj),
sd = sqrt(deviance(lm.obj)/df.residual(lm.obj)))
rstudent (lm.obj, infl = ..., res = ...)
dffits (lm.obj, infl = ..., res = ...)
dfbetas (lm.obj, infl = ...)
covratio (lm.obj, infl = ..., res = ...)
cooks.distance(lm.obj, infl = ..., res = ..., sd = ...)
Argumentos:
246
infl: Estructura de influencia como la retornada por la funcin lm.influence.
x: X o la matriz de diseo.
Los argumentos opcionales `infl', `res' y `sd' estn all para el uso de estas funciones de uso
directo, cuando por ejemplo, las medidas subyacentes de influencia bsicas (de
lm.influence) ya estn disponibles.
Referencias.
Belsley, D. A., Kuh, E. and Welsch, R. E. (1980) Regression Diagnostics. New York:
Wiley.
247
Cook, R. D. and Weisberg, S. (1982) Residuals and Influence in Regression. London:
Chapman and Hall.
Ejemplo:
data(LifeCycleSavings)
#ajustando un modelo:
lm.SR <- lm(sr ~ pop15 + pop75 + dpi + ddpi, data = LifeCycleSavings)
#obteniendo slo las observaciones potencialmente
#influyentes:
summary(inflm.SR <- influence.measures(lm.SR))
Potentially influential observations of
lm(formula = sr ~ pop15 + pop75 + dpi + ddpi, data = LifeCycleSavings) :
dfb.1_ dfb.pp15 dfb.pp75 dfb.dpi dfb.ddpi dffit cov.r cook.d
Chile -0.20 0.13 0.22 -0.02 0.12 -0.46 0.65_* 0.04
United States 0.07 -0.07 0.04 -0.23 -0.03 -0.25 1.66_* 0.01
Zambia 0.16 -0.08 -0.34 0.09 0.23 0.75 0.51_* 0.10
Libya 0.55 -0.48 -0.38 -0.02 -1.02_* -1.16_* 2.09_* 0.27
hat
Chile 0.04
United States 0.33_*
Zambia 0.06
Libya 0.53_*
#o bien:
which(apply(inflm.SR$is.inf, 1, any))
Chile United States Zambia Libya
7 44 46 49
248
Greece Guatamala Honduras Iceland India
1.1396174 1.0852720 1.1855450 0.8658808 1.2024438
Ireland Italy Japan Korea Luxembourg
1.2680432 1.1624611 1.0845999 0.8695843 1.1961844
Malta Norway Netherlands New Zealand Nicaragua
1.1282611 1.1680616 1.2285315 1.1336998 1.1742677
Panama Paraguay Peru Philippines Portugal
1.0667255 0.8732040 0.8312741 0.8177726 1.2331038
South Africa South Rhodesia Spain Sweden Switzerland
1.1945449 1.3130954 1.2081541 1.0864869 1.1471125
Turkey Tunisia United Kingdom United States Venezuela
1.1003557 1.1314365 1.1886236 1.6554816 1.0945955
Zambia Jamaica Uruguay Libya Malaysia
0.5116454 1.1995171 1.1872025 2.0905736 1.1126445
En el paquete nls se halla la funcin nls que permite hallar estimaciones de los
parmetros en modelos no lineales.
Argumentos:
249
control: Una lista opcional de ajustes de control.
trace: Argumento lgico para solicitar traza de las iteraciones. Por defecto es
`FALSE'.
m: Un objeto `nlsModel'.
Ejemplos:
library(nls)
data( DNase )
250
DNase1 <- DNase[ DNase$Run == 1, ]
## Usando un modelo de autoarranque
fm1DNase1<- nls( density ~ SSlogis( log(conc), Asym, xmid, scal ),
DNase1 )
>fm1DNase1
Nonlinear regression model
model: density ~ SSlogis(log(conc), Asym, xmid, scal)
data: DNase1
Asym xmid scal
2.345180 1.483090 1.041455
residual sum-of-squares: 0.004789569
summary( fm1DNase1 )
Parameters:
Estimate Std. Error t value Pr(>|t|)
Asym 2.34518 0.07815 30.01 2.16e-13 ***
xmid 1.48309 0.08135 18.23 1.22e-10 ***
scal 1.04146 0.03227 32.27 8.50e-14 ***
---
Signif. codes: 0 `***' 0.001 `**' 0.01 `*' 0.05 `.' 0.1 ` ' 1
251
alg = "plinear", trace = TRUE )
0.7139315 : 0.000000 1.000000 1.453853
0.1445295 : 1.640243 1.390186 2.461754
0.008302152 : 1.620899 1.054228 2.478388
0.004794192 : 1.485226 1.043709 2.347334
0.004789569 : 1.483130 1.041468 2.345218
0.004789569 : 1.483090 1.041455 2.345180
Parameters:
Estimate Std. Error t value Pr(>|t|)
xmid 1.48309 0.08135 18.23 1.22e-10 ***
scal 1.04145 0.03227 32.27 8.50e-14 ***
.lin 2.34518 0.07815 30.01 2.16e-13 ***
---
Signif. codes: 0 `***' 0.001 `**' 0.01 `*' 0.05 `.' 0.1 ` ' 1
252
0.005663523 : 2.294087 1.412198 1.020463
0.004791528 : 2.341429 1.479688 1.040758
0.004789569 : 2.345135 1.483047 1.041439
0.004789569 : 2.345179 1.483089 1.041454
>
> summary( fm3DNase1 )
Parameters:
Estimate Std. Error t value Pr(>|t|)
Asym 2.34518 0.07815 30.01 2.16e-13 ***
xmid 1.48309 0.08135 18.23 1.22e-10 ***
scal 1.04145 0.03227 32.27 8.50e-14 ***
---
Signif. codes: 0 `***' 0.001 `**' 0.01 `*' 0.05 `.' 0.1 ` ' 1
El anlisis multivariable trata con datos que contienen observaciones con dos o ms
variables obtenidas por cada sujeto. Vamos a suponer que nuestra matriz de datos se llama
DATOS y que es numrica. Cada fila representa las variables observadas a cada sujeto y
cada columna representa el conjunto de observaciones para una variable.
253
9.6.1 Discriminacin, Funcin: lda
Argumentos:
data: Data frame dese el cual se toman las variables especificadas en frmula.
254
prior: Las probabilidades previas de los miembros de clase. Si no se especifican, las
proporciones de clase para el conjunto de entrenamiento son usadas. Si son dadas,
deben ser especificadas en el orden de los niveles de factor.
tol: Una tolerancia para determinar si una matriz es singular. Rechazar variables y
combinaciones lineales de variables de varianza unitaria cuyas varianza es menor que
`tol2'.
subset: Un vector ndice que especifica los casos a ser usados en la muestra de
entrenamiento. Este argumento debe ser un nombre del vector.
na.action: Una funcin para especificar la accin a tomar con valores `NA's.
Esta funcin puede ser llamada dando un frmula y un data frame opcional, o una matriz y
un factor de agrupamiento como los primeros dos argumentos. Los otros argumentos son
255
opcionales, pero `subset=' y `na.action=', si son requeridos, deben ser nombrados
completamente.
svd: Los valores singulares, los cuales dan la razn de las desviaciones estndar
entre y dentro de los grupos en las variables discriminantes lineales. Sus cuadrados
son los estadsticos F cannicos.
Ejemplos:
library(mass)
data(iris3)
Iris <- data.frame(rbind(iris3[,,1], iris3[,,2], iris3[,,3]),
256
Sp = rep(c("s","c","v"), rep(50,3)))
train <- sample(1:150, 75)
table(Iris$Sp[train])
>z
Call:
lda.formula(Sp ~ ., data = Iris, prior = c(1, 1, 1)/3, subset = train)
Group means:
Sepal.L. Sepal.W. Petal.L. Petal.W.
c 5.970370 2.777778 4.329630 1.318519
s 4.959091 3.295455 1.472727 0.250000
v 6.719231 3.061538 5.684615 2.053846
Proportion of trace:
LD1 LD2
0.9892 0.0108
257
9.6.2 Funcin mahalanobis
Devuelve las distancias de Mahalanobis de todas las filas en una matriz de datos `x' y el
vector mu=`center' con respecto a Sigma=`cov'. Para un vector `y' est definida como
D2=(y-mu)tSigma-1(y - mu).
Argumentos:
Ejemplo:
library(mass)
mu<-c(0,0)
Sigma<-matrix(c(1,0,0,1),ncol=2)
X<-mvrnorm(5,mu,Sigma)
X
[,1] [,2]
[1,] -0.6473254 -0.9788744
[2,] 0.8565902 -0.1284428
[3,] 0.7230044 -0.5692264
258
[4,] 0.5820368 0.4990434
[5,] -0.6085847 0.8054497
T2<-mahalanobis(X,center=mu,cov=Sigma)
T2
[1] 1.3772253 0.7502443 0.8467540 0.5878112 1.0191247
mu<-c(0,0,0)
Sigma<-matrix(c(1,0,0,0,1,0,0,0,1),ncol=3)
X<-mvrnorm(100,mu,Sigma)
Sx <- cov(X)
Sx
[,1] [,2] [,3]
[1,] 0.73037799 0.05741202 -0.1222489
[2,] 0.05741202 1.09179799 0.1149610
[3,] -0.12224895 0.11496101 1.0579335
centro<-apply(X,2,mean)
centro
[1] -0.02902490 -0.07151261 0.01496225
D2<-mahalanobis(X,centro,Sx)
qqplot(qchisq(ppoints(100), df=3), D2,
main = expression("Q-Q plot de las distancias de Mahalanobis" * ~D^2 *
" vs. cuantiles" * ~ chi[3]^2),xlab=expression("Cuantil"*~chi[3]^2),
ylab=expression(D^2),cex.main=0.8,cex.lab=0.7,cex=0.7,pch=20,cex.axis=0.7)
abline(0, 1, col = 'gray',lty=2)
259
2
Figura 9.1: Grfico que nos permite evaluar el supuesto de multinormalidad
Esta funcin proporciona una lista que contiene estimaciones de la matriz de covarianza
ponderada y la media de los datos , y opcionalmente, la matriz de correlacin ponderada.
Argumentos:
x: Una matriz o data frame. Las filas son las observaciones y las columnas las
variables.
wt: Un vector de pesos no nulo y no negativos para cada una de las observaciones.
Debe tener longitud igual al nmero de filas de `x'.
260
cor: Un argumento lgico para indicar si tambin deber retornarse la matriz de
correlacin estimada ponderada.
Detalles: La matriz de covarianza es dividida por uno menos la suma de los cuadrados de
los pesos, as si los pesos son (1/n), la estimacin usual insesgada de la matriz de
covarianza con divisor (n-1) es retornada.
Valor: Esta funcin arroja una lista con las siguientes componentes:
wt: Los pesos usados en la estimacin. Slo los devuelve cuando sean
especificados.
261
Esta funcin est disponible en el paquete mva, y permite realizar un anlisis de
componentes principales sobre una matriz de datos dada y devuelve los resultados como un
objeto de clase `prcomp'.
Argumentos:
retx: Argumento lgico para indicar si deben retornarse las variables rotadas.
center: Argumento lgico para indicar si las variables deben ser desviadas para
centrarlas en cero. Alternativamente, puede ser un vector de longitud igual al nmero
de columnas de la matriz de datos. El valor es pasado a `scale'.
scale: Argumento lgico para indicar si las variables deberan ser escaladas para
que tengan varianza unitaria antes de que se realice el anlisis. El valor por defecto
es `FALSE' . Tambin puede proporcionarse un vector de longitud igual al nmero
de columnas de la matriz de datos. El valor es pasado a `scale'.
tol: Un valor para indicar la cantidad por debajo de la cual las componentes deberan
ser omitidas. Las componentes son omitidas si sus desviaciones estndar son
menores o iguales a `tol' por la desviacin estndar de la primera componente. Otros
ajustes pueden ser tol = 0' o `tol =sqrt(.Machine$double.eps)', lo cual podra omitir
componentes constantes.
262
para estos objetos imprime los resultado en un buen formato y el mtodo `plot' produce un
scree plot.
Valor: La funcin devuelve una lista de clase `'prcomp, que contiene los siguientes
componentes:
sdev: Las desviaciones estndar de las componentes principales, es decir, las races
cuadradas de los valores propios de la matriz de covarianza/correlacin.
rotation: La matriz de los loadings de las variables (es decir, una matriz cuyas
columnas son los vectores propios). La funcin princomp devuelve esto en el
elemento `loadings'.
x: Si `retx' es TRUE son devueltos los datos rotados (Los datos multiplicados por la
matriz de rotacin).
Referencias:
Ejemplos:
263
##USArrests varan por orden de magnitud, por
##tanto, escalar los datos resulta apropiado.
data(USArrests)
USArrests
Murder Assault UrbanPop Rape
Alabama 13.2 236 58 21.2
Alaska 10.0 263 48 44.5
Arizona 8.1 294 80 31.0
Arkansas 8.8 190 50 19.5
California 9.0 276 91 40.6
Colorado 7.9 204 78 38.7
Connecticut 3.3 110 77 11.1
Delaware 5.9 238 72 15.8
Florida 15.4 335 80 31.9
Georgia 17.4 211 60 25.8
Hawaii 5.3 46 83 20.2
Idaho 2.6 120 54 14.2
Illinois 10.4 249 83 24.0
Indiana 7.2 113 65 21.0
Iowa 2.2 56 57 11.3
Kansas 6.0 115 66 18.0
Kentucky 9.7 109 52 16.3
Louisiana 15.4 249 66 22.2
Maine 2.1 83 51 7.8
Maryland 11.3 300 67 27.8
Massachusetts 4.4 149 85 16.3
Michigan 12.1 255 74 35.1
Minnesota 2.7 72 66 14.9
Mississippi 16.1 259 44 17.1
Missouri 9.0 178 70 28.2
Montana 6.0 109 53 16.4
Nebraska 4.3 102 62 16.5
Nevada 12.2 252 81 46.0
New Hampshire 2.1 57 56 9.5
New Jersey 7.4 159 89 18.8
New Mexico 11.4 285 70 32.1
New York 11.1 254 86 26.1
North Carolina 13.0 337 45 16.1
264
North Dakota 0.8 45 44 7.3
Ohio 7.3 120 75 21.4
Oklahoma 6.6 151 68 20.0
Oregon 4.9 159 67 29.3
Pennsylvania 6.3 106 72 14.9
Rhode Island 3.4 174 87 8.3
South Carolina 14.4 279 48 22.5
South Dakota 3.8 86 45 12.8
Tennessee 13.2 188 59 26.9
Texas 12.7 201 80 25.5
Utah 3.2 120 80 22.9
Vermont 2.2 48 32 11.2
Virginia 8.5 156 63 20.7
Washington 4.0 145 73 26.2
West Virginia 5.7 81 39 9.3
Wisconsin 2.6 53 66 10.8
Wyoming 6.8 161 60 15.6
library(mva)
prcomp(USArrests) # inapropiado
Standard deviations:
[1] 83.732400 14.212402 6.489426 2.482790
Rotation:
PC1 PC2 PC3 PC4
Murder -0.04170432 -0.04482166 0.07989066 0.99492173
Assault -0.99522128 -0.05876003 -0.06756974 -0.03893830
UrbanPop -0.04633575 0.97685748 -0.20054629 0.05816914
Rape -0.07515550 0.20071807 0.97408059 -0.07232502
Rotation:
PC1 PC2 PC3 PC4
Murder -0.5358995 -0.4181809 0.3412327 -0.64922780
Assault -0.5831836 -0.1879856 0.2681484 0.74340748
UrbanPop -0.2781909 0.8728062 0.3780158 -0.13387773
265
Rape -0.5434321 0.1673186 -0.8177779 -0.08902432
plot(prcomp(USArrests))
Esta funcin (disponible en librera mva) produce un biplot de los reultados del anlisis de
componentes principales realizado con la funcin princomp.
Argumentos:
scale: Las variables son escaladas por `lambdascale' y las observaciones son
escaladas por `lambda(1-scale)', donde lambda son los valores singulares calculados por
princomp. Normalmente 0 scale 1, y una advertencia se exhibir si `scale'
especificado est por fuera de rango.
266
la misma cantidad . Luego los productos internos de las covarianzas aproximadas de
las variables y las distancias entre la distancia de Mahalanobis aproximada de las
observaciones.
Referencias:
biplot(x, ...)
biplot.default(x, y, var.axes = TRUE, col, cex = rep(par("cex"), 2),
xlabs = NULL, ylabs = NULL, expand = 1,
xlim = NULL, ylim = NULL, arrow.len = 0.1, ...)
Argumentos:
267
x: Para `biplot', es un objeto ajustado. Para `biplot.default' es el primer conjunto de
puntos o una matriz de dos columnas, usualmente asociada con las observaciones.
col: Un vector de longitus 2 dando los colores para el primer y segundo conjunto de
puntos respectivamente (y de los correspondientes ejes). Si slo se especifica un
coloreste ser usado en ambos conjuntos.
cex: Factor de expacin de caracter usado para etiquetar los puntos. Las estiquetas
pueden ser de diferentes tamaos para los dos conjuntos proporcionando un vector de
longitud 2.
arrow.len: Las longitudes de las puntas de flechas sobre los ejes en `var.axes'
Pueden suprimirse las puntas de flecha mediante `arrow.len = 0'.
268
xlim, ylim, ...: Parmetros grficos.
Referencias:
Ejemplo:
data(USArrests)
library(mva)
biplot(princomp(USArrests),cex=0.5,expand = 2.5,xlim=c(-0.6,0.4))
269
Figura 9.2: Grfico Biplot de los datos en data(USArrest), en el anlisis de
componentes principales
Argumentos:
270
npcs: El nmero de componentes principales a graficar.
Ejemplo:
library(mva)
data(USArrests)
(pc.cr <- princomp(USArrests, cor = TRUE))
screeplot(pc.cr,type="lines")
Permite realizar anlisis de factor mediante mxima verosimilitud, sobre una matriz de
covarianza o una matriz de datos. Disponible en le paquete mva.
271
factanal(x, factors, data, covmat = NULL,
n.obs = NA, subset, na.action,
start = NULL, scores = c("none", "regression", "Bartlett"),
rotation = "varimax", control = NULL, ...)
Argumentos:
x: Una frmula o una matriz numrica o un objeto que puede ser forzado a ser una
matriz numrica. factors: The number of factors to be fitted.
covmat: Una matriz de covarianza, o una lista de covarianzas como la producida por
`cov.wt'.
subset: Una especificacin de los casos a usar, si `x' es usado como una matriz o
frmula.
start: `NULL' o matriz de valores iniciales, con cada columna dando un conjunto
inicial de unicidades.
272
rotation: Caracter. `'none o el nombre de una funcin a usar para rotar los factores:
ser llamada con el primer argumento la matriz de loadings.
3. lower: El lmite inferior para las unicidades durante la optimizacin. Debe ser
positivo, por defecto es 0.005.
Las unicidades estn restringidas al intervalo entre cero y 1, pero valores cercanos a cero
son problemticos por lo que la optimizacin se hace con un valor frontera de
273
`control$lower'. Los scores pueden producirse si de da una matriz de datos. El primer
mtodo usado es el mtodo de regresin de Thomson (1951), el segundo es del mtodo de
mnimos cuadrados ponderados de Bartlett (1937). Ambo se estiman los scores f no
observados.
loadings: Una matriz de loadings, una columna por factor. Los factores se ordenan
en forma decreciente de las sumas de los cuadrados de los loadings, y dando el sigo
que har que la suma de los loadings sea positiva.
274
call: Coincide la llamada?.
Autor: B. D. Ripley
Ejemplos:
library(mva)
#Rotacin varimax
factanal(m1, factors=3)
Call:
factanal(x = m1, factors = 3)
275
Uniquenesses:
v1 v2 v3 v4 v5 v6
0.005 0.101 0.005 0.224 0.084 0.005
Loadings:
Factor1 Factor2 Factor3
v1 0.184 0.943 0.268
v2 0.236 0.904 0.161
v3 0.210 0.234 0.947
v4 0.243 0.178 0.828
v5 0.881 0.240 0.286
v6 0.959 0.191 0.196
The degrees of freedom for the model is 0 and the fit was 0.4755
#Rotacin promax
factanal(m1, factors=3, rotation="promax")
Call:
factanal(x = m1, factors = 3, rotation = "promax")
Uniquenesses:
v1 v2 v3 v4 v5 v6
0.005 0.101 0.005 0.224 0.084 0.005
Loadings:
Factor1 Factor2 Factor3
v1 0.984
v2 0.951
v3 1.003
v4 0.867
v5 0.910
v6 1.033
276
Factor1 Factor2 Factor3
SS loadings 1.903 1.876 1.772
The degrees of freedom for the model is 0 and the fit was 0.4755
Esta funcin permite calcular las correlaciones cannicas entre dos matrices de datos. Est
disponible en el paquete mva. El anlisis de correlacin cannica busca combinaciones
lineales de las variables `y' las cuales son bien explicadas (lo cual es medido por las
correlaciones) por combinaciones lineales de las variables `x'. La relacin es simtrica en
cuanto a que `tambin son explicadas'.
Argumentos:
277
Valor: Una lista que contiene las siguientes componentes:
Referencias:
Hotelling H. (1936). Relations between two sets of variables. Biometrika, 28, 321-
327.
Ejemplo:
data(LifeCycleSavings)
LifeCycleSavings
sr pop15 pop75 dpi ddpi
Australia 11.43 29.35 2.87 2329.68 2.87
Austria 12.07 23.32 4.41 1507.99 3.93
Belgium 13.17 23.80 4.43 2108.47 3.82
Bolivia 5.75 41.89 1.67 189.13 0.22
Brazil 12.88 42.19 0.83 728.47 4.56
Canada 8.79 31.72 2.85 2982.88 2.43
Chile 0.60 39.74 1.34 662.86 2.67
278
China 11.90 44.75 0.67 289.52 6.51
Colombia 4.98 46.64 1.06 276.65 3.08
Costa Rica 10.78 47.64 1.14 471.24 2.80
Denmark 16.85 24.42 3.93 2496.53 3.99
Ecuador 3.59 46.31 1.19 287.77 2.19
Finland 11.24 27.84 2.37 1681.25 4.32
France 12.64 25.06 4.70 2213.82 4.52
Germany 12.55 23.31 3.35 2457.12 3.44
Greece 10.67 25.62 3.10 870.85 6.28
Guatamala 3.01 46.05 0.87 289.71 1.48
Honduras 7.70 47.32 0.58 232.44 3.19
Iceland 1.27 34.03 3.08 1900.10 1.12
India 9.00 41.31 0.96 88.94 1.54
Ireland 11.34 31.16 4.19 1139.95 2.99
Italy 14.28 24.52 3.48 1390.00 3.54
Japan 21.10 27.01 1.91 1257.28 8.21
Korea 3.98 41.74 0.91 207.68 5.81
Luxembourg 10.35 21.80 3.73 2449.39 1.57
Malta 15.48 32.54 2.47 601.05 8.12
Norway 10.25 25.95 3.67 2231.03 3.62
Netherlands 14.65 24.71 3.25 1740.70 7.66
New Zealand 10.67 32.61 3.17 1487.52 1.76
Nicaragua 7.30 45.04 1.21 325.54 2.48
Panama 4.44 43.56 1.20 568.56 3.61
Paraguay 2.02 41.18 1.05 220.56 1.03
Peru 12.70 44.19 1.28 400.06 0.67
Philippines 12.78 46.26 1.12 152.01 2.00
Portugal 12.49 28.96 2.85 579.51 7.48
South Africa 11.14 31.94 2.28 651.11 2.19
South Rhodesia 13.30 31.92 1.52 250.96 2.00
Spain 11.77 27.74 2.87 768.79 4.35
Sweden 6.86 21.44 4.54 3299.49 3.01
Switzerland 14.13 23.49 3.73 2630.96 2.70
Turkey 5.13 43.42 1.08 389.66 2.96
Tunisia 2.81 46.12 1.21 249.87 1.13
United Kingdom 7.81 23.27 4.46 1813.93 2.01
United States 7.56 29.81 3.43 4001.89 2.45
Venezuela 9.22 46.40 0.90 813.39 0.53
Zambia 18.56 45.25 0.56 138.33 5.14
279
Jamaica 7.72 41.12 1.73 380.47 10.23
Uruguay 9.24 28.13 2.72 766.54 1.88
Libya 8.89 43.69 2.07 123.58 16.71
Malaysia 4.71 47.20 0.66 242.69 5.08
$cor
[1] 0.8247966 0.3652762
$xcoef
[,1] [,2]
pop15 -0.009110856 -0.03622206
pop75 0.048647514 -0.26031158
$ycoef
[,1] [,2] [,3]
sr 0.0084710221 3.337936e-02 -5.157130e-03
dpi 0.0001307398 -7.588232e-05 4.543705e-06
ddpi 0.0041706000 -1.226790e-02 5.188324e-02
$xcenter
pop15 pop75
35.0896 2.2930
$ycenter
sr dpi ddpi
9.6710 1106.7584 3.7576
280
9.6.10 Funcin dist
Esta funcin calcula y devuelve la matriz de distancias usndo la medida de distancia para
calcular distancias entre las filas de una matriz de datos. Debe llamarse desde el paquete
mva.
Argumentos:
x: Una matriz o data frame.
sustraccin ambigua.
281
Son permitidos valores faltantes, que son omitidos de los clculos las filas donde ocurren.
si alguna columna es omitida en los clculos con Euclidean, Manhattan o Canberra, la suma
es escalada proporcionalmente al nmero de columnas usadas. Las funciones
as.matrix.dist() y as.dist() se usan para convertir objetos de clase dist y
matrices de distancias convencionales.
Ejemplos:
library(mva)
x <- matrix(rnorm(100), nrow=5)
dist(x)
1 2 3 4
2 6.160498
3 6.626156 5.465186
4 7.123074 6.998268 6.137816
5 6.157322 6.196263 6.196402 6.013627
dist(x, diag = TRUE)
1 2 3 4 5
1 0.000000
2 6.160498 0.000000
3 6.626156 5.465186 0.000000
4 7.123074 6.998268 6.137816 0.000000
5 6.157322 6.196263 6.196402 6.013627 0
dist(x, upper = TRUE)
1 2 3 4 5
282
1 6.160498 6.626156 7.123074 6.157322
2 6.160498 5.465186 6.998268 6.196263
3 6.626156 5.465186 6.137816 6.196402
4 7.123074 6.998268 6.137816 6.013627
5 6.157322 6.196263 6.196402 6.013627
m <- as.matrix(dist(x))
m
1 2 3 4 5
1 0.000000 6.160498 6.626156 7.123074 6.157322
2 6.160498 0.000000 5.465186 6.998268 6.196263
3 6.626156 5.465186 0.000000 6.137816 6.196402
4 7.123074 6.998268 6.137816 0.000000 6.013627
5 6.157322 6.196263 6.196402 6.013627 0.000000
d <- as.dist(m)
d
1 2 3 4
2 6.160498
3 6.626156 5.465186
4 7.123074 6.998268 6.137816
5 6.157322 6.196263 6.196402 6.013627
print(d, digits = 3)
1 2 3 4
2 6.16
3 6.63 5.47
4 7.12 7.00 6.14
5 6.16 6.20 6.20 6.01
283
Argumentos:
x: Una matrix de datos numrica o un objeto que puede ser forzado a matriz, tal
como un data frame con todas las columnas numricas.
centers: Puede ser el nmero de clusters o un conjunto de los centros de los clusters
iniciales. Si es lo primero, un conjunto aleatorio de filas en `x' son elegidas como los
centros iniciales.
Detalles: Los datos dados por `x' son clustered por el algoritmo k-means basado en el
algoritmo de Hartigan and Wong (1979) . Cuando este finaliza, todos los centros de cluster
estn en la media de sus conjuntos Voronoi (los conjuntos de puntos que estn ms cerca al
centro del cluster).
284
Referencias: Hartigan, J.A. and Wong, M.A. (1979). A K-means clustering algorithm.
Applied Statistics 28, 100-108.
Ejemplos:
$centers
[,1] [,2]
1 0.97672987 0.91615525
2 -0.05270322 0.03347406
$withinss
[1] 10.69373 7.91773
$size
[1] 52 48
data(LifeCycleSavings)
cl <- kmeans(LifeCycleSavings,2 , 20)
cl
$cluster
[1] 1 1 1 2 2 1 2 2 2 2 1 2 1 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 2 2 2 2 2 2 2 2 2
[39] 1 1 2 2 1 1 2 2 2 2 2 2
285
$centers
sr pop15 pop75 dpi ddpi
1 10.920556 26.13611 3.636111 2262.3750 3.264444
2 8.968125 40.12594 1.537500 456.7241 4.035000
$withinss
[1] 7789032 2763898
$size
[1] 18 32
plot((LifeCycleSavings), col = cl$cluster,pch=cl$cluster)
data(USArrests)
cl <- kmeans(USArrests, 3, 20)
plot(USArrests, col = cl$cluster,pch=cl$cluster)
pairs(USArrests)
Figura 9.4: Clusters con kmeans aplicados sobre datos simulados bivariados
286
Figura 9.5: Grfico de clusters de los datos en data(USArrest), en
el anlisis con kmeans
Esta funcin (del paquete mva) realiza anlisis de clustering jerrquico sobre un conjunto
de disimilaridades para los n objetos a ser clustered. Inicialmente cada objeto es asignado a
su propio cluster y luego el algoritmo procede iterativamente, en cada etapa juntando los
dos cluster ms similares, continuando hasta que haya un slo cluster. En cada etapa las
distancias entre clusters son recalculadas por la frmula actualizada de disimilaridad de
Lance-Williams de acuerdo al mtodo particular de clustering que se est usando.
287
main = "Cluster Dendrogram",
sub = NULL, xlab = NULL, ylab = "Height", ...)
plclust(tree, hang = 0.1, unit = FALSE, level = FALSE, hmin = 0,
square = TRUE, labels = NULL, plot. = TRUE,
axes = TRUE, frame.plot = FALSE, ann = TRUE,
main = "", sub = NULL, xlab = NULL, ylab = "Height")
Argumentos:
method: El mtodo de aglomeracin a ser usado. Este podra ser uno de los
siguientes `ward', `single', `complete', `average', `mcquitty', `median' o `centroid'.
hang: La fraccin de la altura del grfico par la cual las etiquetas deberan colgar
por debajo del resto del grfico. Un valor negativo har que las etiquetas cuelguen
debajo de cero.
labels: Un vector de caracteres para las etiquetas de las hojas del rbol. Por defecto
toma los nombres de las filas o los nmeros de las filas de los datos originales. Si
`labels=FALSE' no se colocan etiquetas.
main, sub, xlab, ylab: Cadena de caracteres para `title'. `sub' and `xlab'.
288
...: Argumentos grficos adicionales. Ver par en ayuda del R.
Detalles:
El algoritmo usado en hclust ordena los sub rboles de modo que el cluster ms
apretado est a la izquierda (el ms reciente, anexo al sub rbol de la izquierda es un valor
inferior que el ltimo anexo al sub rbol derecho). Las observaciones individuales son los
clusters ms apretados posibles y las uniones incluyen dos observaciones colocadas en
orden segn el nmero de su la secuencia de observacin.
289
Valor: La funcin produce un objeto de clase hclust que describe el rbol producido por el
proceso de clustering. Es una lista con los siguientes componentes:
merge: Una matriz de n-1 por 2 . La fila de esta componente describe lasuniones de
clusters en el paso i del clustering. Si un elemento j en la fila es negativo, la
observacin -j fue unida en esta etapa. Si j es positiva entonces la unin fue con el
cluster formado en la etapa j anterior del algoritmo. As, entradas negativas en
`merge' indican aglomeraciones de individuos, y entradas positicas indican
aglomeraciones de no individuos.
labels: Las etiquetas para cada uno de los objetos que estn siendo clustered.
290
Hay un mtodo `print' y `plot' para los objetos `hclust' . La funcin plclust()
bsicamente es la misma que el mtodo plot, `plot.hclust', principalmente para
compatibilidad con S-plus.
Autor: Esta funcin est basada en el cdigo fortran contribuido a STATLIB por F.
Murtagh.
Referencias:
291
9.6.13 Funcin cutree
Disponible en el paquete mva, permite cortar un rbol obtenido previamente con la fucnn
hclust, en varios grupos bien sea mediante la indicacin del nmero de grupos deseados
o la altura del corte.
Argumentos:
h: Un nmero o vector con las alturas en donde el rbol deber ser cortado.
Al menos uno de k' o `h' debe ser especificado. Si ambos son dados k' es considerado por
encima de `h'.
Valor: Esta funcin devuelve un vector con los miembros de grupo si `k' o `h' son un
escalar, de otra forma devuelve una matriz con miembros de grupo, donde cada columna
corresponde a los elementos de `k' o `h' , respectivamente (los cuales son usados como
nombres de columna).
Ejemplos:
292
Loading required package: mva
[1] TRUE
data(USArrests)
hc <- hclust(dist(USArrests), "ave")
plot(hc,cex=0.5,main="Dendrograma Cluster data USArrest\nmediante mtodo
'average' ")
plot(hc, hang = -1,cex=0.5,main="Dendrograma Cluster data USArrest\nmediante
mtodo 'average' ")
## Clusters usando el mtodo centroide y la
##distancia euclidiana cuadrada. Corte del rbol
##en 10 clusters y reconstruccin de la parte
##superior del rbol desde los centros de clusters.
hc <- hclust(dist(USArrests)^2, "cen")
memb <- cutree(hc, k = 10)
cent <- NULL
for(k in 1:10)
cent <- rbind(cent, colMeans(USArrests[memb == k, , drop = FALSE]))
cent
Murder Assault UrbanPop Rape
[1,] 11.471429 247.57143 74.28571 27.20000
[2,] 13.500000 267.00000 46.66667 28.03333
[3,] 9.950000 288.75000 77.00000 32.87500
[4,] 11.500000 195.33333 66.16667 27.43333
[5,] 5.590000 112.40000 65.60000 17.27000
[6,] 15.400000 335.00000 80.00000 31.90000
[7,] 5.300000 46.00000 83.00000 20.20000
[8,] 2.688889 64.55556 50.66667 10.54444
[9,] 5.750000 156.75000 74.00000 19.40000
[10,] 13.000000 337.00000 45.00000 16.10000
hc1 <- hclust(dist(cent)^2, method = "cen", members = table(memb))
opar <- par(mfrow = c(1, 2))
plot(hc, labels = FALSE, hang = -1, main = "rbol original")
plot(hc1, labels = FALSE, hang = -1, main = "Reinicio desde clusters 10 ")
par(opar)
##Obteniendo varios agrupamientos simultneamente:
hc <- hclust(dist(USArrests))
cutree(hc, k=1:5)#k = 1 es trivial
1 2 3 4 5
Alabama 1 1 1 1 1
293
Alaska 1 1 1 1 1
Arizona 1 1 1 1 1
Arkansas 1 2 2 2 2
California 1 1 1 1 1
Colorado 1 2 2 2 2
Connecticut 1 2 3 3 3
Delaware 1 1 1 1 1
Florida 1 1 1 4 4
Georgia 1 2 2 2 2
Hawaii 1 2 3 3 5
Idaho 1 2 3 3 3
Illinois 1 1 1 1 1
Indiana 1 2 3 3 3
Iowa 1 2 3 3 5
Kansas 1 2 3 3 3
Kentucky 1 2 3 3 3
Louisiana 1 1 1 1 1
Maine 1 2 3 3 5
Maryland 1 1 1 1 1
Massachusetts 1 2 2 2 2
Michigan 1 1 1 1 1
Minnesota 1 2 3 3 5
Mississippi 1 1 1 1 1
Missouri 1 2 2 2 2
Montana 1 2 3 3 3
Nebraska 1 2 3 3 3
Nevada 1 1 1 1 1
New Hampshire 1 2 3 3 5
New Jersey 1 2 2 2 2
New Mexico 1 1 1 1 1
New York 1 1 1 1 1
North Carolina 1 1 1 4 4
North Dakota 1 2 3 3 5
Ohio 1 2 3 3 3
Oklahoma 1 2 2 2 2
Oregon 1 2 2 2 2
Pennsylvania 1 2 3 3 3
Rhode Island 1 2 2 2 2
South Carolina 1 1 1 1 1
294
South Dakota 1 2 3 3 5
Tennessee 1 2 2 2 2
Texas 1 2 2 2 2
Utah 1 2 3 3 3
Vermont 1 2 3 3 5
Virginia 1 2 2 2 2
Washington 1 2 2 2 2
West Virginia 1 2 3 3 5
Wisconsin 1 2 3 3 5
Wyoming 1 2 2 2 2
#Cortando el rbol en la altura 250:
cutree(hc, h=250)
Alabama Alaska Arizona Arkansas California
1 1 1 2 1
Colorado Connecticut Delaware Florida Georgia
2 2 1 1 2
Hawaii Idaho Illinois Indiana Iowa
2 2 1 2 2
Kansas Kentucky Louisiana Maine Maryland
2 2 1 2 1
Massachusetts Michigan Minnesota Mississippi Missouri
2 1 2 1 2
Montana Nebraska Nevada New Hampshire New Jersey
2 2 1 2 2
New Mexico New York North Carolina North Dakota Ohio
1 1 1 2 2
Oklahoma Oregon Pennsylvania Rhode Island South Carolina
2 2 2 2 1
South Dakota Tennessee Texas Utah Vermont
2 2 2 2 2
Virginia Washington West Virginia Wisconsin Wyoming
2 2 2 2 2
## Comparando los agrupamientos en 2 y 4:
g24 <- cutree(hc, k = c(2,4))
g24
2 4
Alabama 1 1
Alaska 1 1
Arizona 1 1
295
Arkansas 2 2
California 1 1
Colorado 2 2
Connecticut 2 3
Delaware 1 1
Florida 1 4
Georgia 2 2
Hawaii 2 3
Idaho 2 3
Illinois 1 1
Indiana 2 3
Iowa 2 3
Kansas 2 3
Kentucky 2 3
Louisiana 1 1
Maine 2 3
Maryland 1 1
Massachusetts 2 2
Michigan 1 1
Minnesota 2 3
Mississippi 1 1
Missouri 2 2
Montana 2 3
Nebraska 2 3
Nevada 1 1
New Hampshire 2 3
New Jersey 2 2
New Mexico 1 1
New York 1 1
North Carolina 1 4
North Dakota 2 3
Ohio 2 3
Oklahoma 2 2
Oregon 2 2
Pennsylvania 2 3
Rhode Island 2 2
South Carolina 1 1
South Dakota 2 3
Tennessee 2 2
296
Texas 2 2
Utah 2 3
Vermont 2 3
Virginia 2 2
Washington 2 2
West Virginia 2 3
Wisconsin 2 3
Wyoming 2 2
table(g24[,"2"], g24[,"4"])
1 2 3 4
1 14 0 0 2
2 0 14 20 0
297
Figura 9.7: Efecto del argumento hang=-1, en el plot del dendrograma: Observe
la organizacin de las etiquetas debajo de cada rama
298
A continuacin presentamos un conjunto de funciones para realizar pruebas corrientes en
anlisis multivariable.
d2.T2<-function(X, Y, alpha)
{
n1 <- nrow(X)
n2 <- nrow(Y)
if(ncol(X) != ncol(Y))
byrow = T)
cat("\n")
cat("Vector de Medias de la Primera Muestra",
"\n")
cat("======================================",
"\n")
cat(media.x, "\n")
media.y <- matrix(apply(Y, 2, mean), ncol = 1,
byrow = T)
cat("\n")
cat("Vector de Medias de la Segunda Muestra",
"\n")
cat("======================================",
"\n")
cat(media.y, "\n")
cat("\n")
dif <- media.x - media.y
t2.c <- (n1 * n2)/(n1 + n2) * t(dif) %*% solve(
cov.p) %*% dif
cat("T2 calculado", "\n")
cat("============", "\n")
cat(t2.c, "\n")
cat("\n")
t2.critico <- (d * (n1 + n2 - 2))/(n1 + n2 - d -
1) * qf(1-alpha, d, n1 + n2 - d - 1)
cat("T2 critico a un nivel ", alpha, "\n")
cat("==============================", "\n")
299
cat(t2.critico, "\n")
cat("\n")
decision <- "Rechazamos Ho"
if(t2.c < t2.critico)
decision <- "No rechazamos Ho"
cat("============DECISION==================",
"\n")
cat(decision, "\n")
cat("======================================",
"\n")
invisible()
}
# Analisis de Perfiles
# ====================
perfiles.grafico<-function(X,Y){
n1 <- nrow(X)
n2 <- nrow(Y)
if(ncol(X) != ncol(Y))
stop("El numero de variables es diferente!!!"
)
d <- ncol(X)
win.graph()
media.x <- matrix(apply(X, 2, mean), ncol = 1,
byrow = T)
media.y <- matrix(apply(Y, 2, mean), ncol = 1,
byrow = T)
variables<-1:d
x<-cbind(media.x,media.y)
x1<-min(x)
x2<-max(x)
plot(variables,media.x,type="l",ylim=c(x1,x2))
title(main="Grafico de Perfiles",sub="variables")
par(new=T)
plot(variables,media.y,type="l",ylab="",xlab=" ")
}
300
perfiles.paralelo<-function(X,Y,alpha){
n1 <- nrow(X)
n2 <- nrow(Y)
if(ncol(X) != ncol(Y))
stop("El numero de variables es diferente!!!"
)
d <- ncol(X)
q<-d-1
cov.p <- ((n1 - 1) * var(X) + (n2 - 1) * var(Y))/(
n1 + n2 - 2)
cat("Matriz de Covarianzas Mezcladas", "\n")
cat("===============================", "\n")
cat(cov.p, "\n")
c1<-cbind(matrix(rep(1,d-1),ncol=1),as.matrix(diag(rep(-1,d-1))))
n1 <- nrow(X)
n2 <- nrow(Y)
if(ncol(X) != ncol(Y))
stop("El numero de variables es diferente!!!"
)
d <- ncol(X)
cat("\n")
cat("Vector de Medias de la Primera Muestra",
"\n")
cat("======================================",
"\n")
media.x <- matrix(apply(X, 2, mean), ncol = 1,
byrow = T)
cat(media.x, "\n")
media.y <- matrix(apply(Y, 2, mean), ncol = 1,
byrow = T)
cat("\n")
cat("Vector de Medias de la Segunda Muestra",
"\n")
cat("======================================",
"\n")
cat(media.y, "\n")
301
cat("\n")
dif <- media.x - media.y
t2.c <- (n1 * n2)/(n1 + n2) * t(c1%*%dif) %*% solve(
c1%*%cov.p%*%t(c1)) %*% c1%*%dif
cat("T2 calculado", "\n")
cat("============", "\n")
cat(t2.c, "\n")
cat("\n")
t2.critico <- (q * (n1 + n2 - 2))/(n1 + n2 - q -
1) * qf(1-alpha, q, n1 + n2 - q - 1)
cat("T2 critico a un nivel ", alpha, "\n")
cat("==============================", "\n")
cat(t2.critico, "\n")
cat("\n")
decision <- "Rechazamos Ho:Perfiles paralelos"
if(t2.c < t2.critico)
decision <- "No rechazamos Ho:Perfiles paralelos"
cat("============DECISION==================",
"\n")
cat(decision, "\n")
cat("======================================",
"\n")
invisible()
}
perfiles.iguales<-function(X,Y,alpha){
n1 <- nrow(X)
n2 <- nrow(Y)
if(ncol(X) != ncol(Y))
stop("El numero de variables es diferente!!!"
)
d <- ncol(X)
q<-d-1
cov.p <- ((n1 - 1) * var(X) + (n2 - 1) * var(Y))/(
n1 + n2 - 2)
cat("Matriz de Covarianzas Mezcladas", "\n")
cat("===============================", "\n")
cat(cov.p, "\n")
302
c1<-matrix(rep(1/d,d),nrow=1)
media.x <- matrix(apply(X, 2, mean), ncol = 1,
byrow = T)
cat("\n")
cat("Vector de Medias de la Primera Muestra",
"\n")
cat("======================================",
"\n")
cat(media.x, "\n")
media.y <- matrix(apply(Y, 2, mean), ncol = 1,
byrow = T)
cat("\n")
cat("Vector de Medias de la Segunda Muestra",
"\n")
cat("======================================",
"\n")
cat(media.y, "\n")
cat("\n")
dif <- media.x - media.y
t2.c <- (n1 * n2)/(n1 + n2) * t(c1%*%dif) %*% solve(
c1%*%cov.p%*%t(c1)) %*% c1%*%dif
cat("T2 calculado", "\n")
cat("============", "\n")
cat(t2.c, "\n")
cat("\n")
t2.critico <- (1*(n1 + n2 - 2))/(n1 + n2 - 1-
1) * qf(1-alpha, 1, n1 + n2 - q - 1)
cat("T2 critico a un nivel ", alpha, "\n")
cat("==============================", "\n")
cat(t2.critico, "\n")
cat("\n")
decision <- "Rechazamos Ho:Igual Nivel"
if(t2.c < t2.critico)
decision <- "No rechazamos Ho:Igual Nivel"
cat("============DECISION==================",
"\n")
cat(decision, "\n")
cat("======================================",
303
"\n")
invisible()
}
perfiles.promedio<-function(X,Y,alpha){
n1 <- nrow(X)
n2 <- nrow(Y)
if(ncol(X) != ncol(Y))
stop("El numero de variables es diferente!!!"
)
d <- ncol(X)
q<-d-1
cov.p <- ((n1 - 1) * var(X) + (n2 - 1) * var(Y))/(
n1 + n2 - 2)
cat("Matriz de Covarianzas Mezcladas", "\n")
cat("===============================", "\n")
cat(cov.p, "\n")
c1<-cbind(matrix(rep(1,d-1),ncol=1),as.matrix(diag(rep(-1,d-1))))
media.x <- matrix(apply(X, 2, mean), ncol = 1,
byrow = T)
cat("\n")
cat("Vector de Medias de la Primera Muestra",
"\n")
cat("======================================",
"\n")
cat(media.x, "\n")
media.y <- matrix(apply(Y, 2, mean), ncol = 1,
byrow = T)
cat("\n")
cat("Vector de Medias de la Segunda Muestra",
"\n")
cat("======================================",
"\n")
cat(media.y, "\n")
cat("\n")
dif <- media.x + media.y
t2.c <- (n1 * n2)/(n1 + n2) * t(c1%*%dif) %*% solve(
304
c1%*%cov.p%*%t(c1)) %*% c1%*%dif
cat("T2 calculado", "\n")
cat("============", "\n")
cat(t2.c, "\n")
cat("\n")
t2.critico <- (q * (n1 + n2 - 2))/(n1 + n2 - q -
1) * qf(1-alpha, q, n1 + n2 - q - 1)
cat("T2 critico a un nivel ", alpha, "\n")
cat("==============================", "\n")
cat(t2.critico, "\n")
cat("\n")
decision <- "Rechazamos Ho:Promedios Iguales"
if(t2.c < t2.critico)
decision <- "No rechazamos Ho:Promedios Iguales"
cat("============DECISION==================",
"\n")
cat(decision, "\n")
cat("======================================",
"\n")
invisible()
}
305
lambda<-d/(d1*d2)
gl<-nrow(Sigma1)*nrow(Sigma2)
chi.c<- -(nrow(X)-0.5*(nrow(Sigma1)+nrow(Sigma2))-1.5)*log(lambda)
chi.critico<-qchisq(1-alpha,gl)
valor.p<-1-pchisq(chi.c,gl)
cat("Matriz de Dispersion Estimada para el Primer Grupo","\n")
cat(" de Variables","\n")
cat(Sigma1,"\n")
cat("\n")
cat("Matriz de Dispersion Estimada para el Segundo Grupo","\n")
cat(" de Variables","\n")
cat(Sigma1,"\n")
cat("\n")
cat("Resultados de la Prueba Ho:Los dos bloques de variables","\n")
cat(" son independientes","\n")
cat("*******************************************************","\n")
cat("Chi-cuadrado calculado: ",chi.c,"\n")
cat("Chi-cuadrado critico: ",chi.critico,"\n")
cat("Valor p: ",valor.p,"\n")
}
Nos permite categorizar una variable continua. Acepta tanto un vector de puntos de corte
que definen las categorias o un entero que indica cuantas clases queremos y la funcin
automticamente halla los puntos de corte equiespaciados. Esta funcin permite partir un
vector de datos en grupos con igual amplitud, por ejemplo,
>edad<-c(22,31,37,23,22,35,23,19,42,35,33,36,18)
>cut(edad,breaks=3)
306
Si deseamos que los puntos de corte sean con un formato presentable, podemos usar la
funcin pretty()
>cut(edad,pretty(edad))
cut(x, ...)
cut.default(x, breaks, labels = NULL,
include.lowest = FALSE, right = TRUE, dig.lab = 3, ...)
Argumentos:
breaks: Puede ser un vector con puntos de corte o un nmero indicando el nmero
de intervalos en los cuales se ha de dividir a `x'.
labels: Etiquetas para los niveles de la categora resultante. Por defecto las etiquetas
son de la forma (a,b]. Si `labels = FALSE', se usan cdigos enteros.
right: rgumento lgico para indicar si los intervalos deben ser cerrados a la derecha
y abiertos a la izquierda o vice versa.
dig.lab: Entero usado cuando no se dan etiquetas. Indica el nmero de dgitos a usar
en el formato de los nmeros de corte.
307
...: Argumentos adicionales pasados a o desde otros mtodos.
Valor: La funcin devuelve un factor, a menos que `labels = FALSE' en cuyo caso slo
devuelve los cdigos enteros de los niveles.
Ejemplos:
Z <- round(rnorm(10000),digits=0)
table(cut(Z, br = -3:3))
(-3,-2] (-2,-1] (-1,0] (0,1] (1,2] (2,3]
590 2431 3842 2378 623 76
table(cut(Z, br = -3:3,right = FALSE))
[-3,-2) [-2,-1) [-1,0) [0,1) [1,2) [2,3)
56 590 2431 3842 2378 623
## Modificando eqtiquetas:
y <- rnorm(100)
table(cut(y, breaks = pi/3*(-3:3)))
(-3.14,-2.09] (-2.09,-1.05] (-1.05,0] (0,1.05] (1.05,2.09]
1 12 46 31 7
(2.09,3.14]
3
table(cut(y, breaks = pi/3*(-3:3), dig.lab=4))
(-3.142,-2.094] (-2.094,-1.047] (-1.047,0] (0,1.047] (1.047,2.094]
1 12 46 31 7
(2.094,3.142]
3
308
9.7.2 Funcin table:
>edad<-c(22,31,37,23,22,35,23,19,42,35,33,36,18)
>table(cut(edad,breaks=3))
Otro ejemplo un poco ms elaborado es el siguiente, en el cual se hace una tabla de doble
entrada contando con el sexo:
>sexo<-factor(c(1,2,1,2,2,1,1,1,2,2,1,1,2),
labels=c(Mujer,Hombre))
>table(cut(edad,breaks=3),sexo)
Proporciona acceso a los atributos de nivel de una variable. La primera devuelve el valor de
los niveles y la segunda ajusta el atributo. La forma de asignacin levels<- es una
funcin genrica y nuevos mtodos pueden ser escritos para ste.
levels(x)
levels(x) <- value
309
factor(x, levels = sort(unique(x), na.last = TRUE),
labels = levels,exclude = NA, ordered = is.ordered(x))
ordered(x, ...)
is.factor(x)
is.ordered(x)
as.factor(x)
as.ordered(x)
Argumentos:
levels: Un vector opcional con los valores que debi tomar `x'. El valor por defecto
son los valores de `x', ordenados en forma creciente.
exclude: Vector con valores a excluir cuando se forme el conjunto de niveles. Debe
ser del mismo tipo de `x', y si no ser forzado de ser necesario.
ordered: Argumento lgico para indicar si los niveles deben ser considerados como
ordenados en el orden dado.
Debe tenerse en cuenta que los factore y los factores ordenados difieren slo en sus clase,
pero los mtodos y las funciones de ajuste de modelos tratan a ambos de modo muy
diferente.
310
Si `factor(x)' es aplicado a un factor no har nada a menos que hayan niveles no usados, en
este caso es devuelto un factor con nivel reducido.
Valor: `factor' produce un objeto de clase factor, que tiene un conjunto de cdigos
numricos de la misma longitud de `x' con unos atributos levels de modo `character'. Si
`ordered' es TRUE, el resultado tiene clase `c(ordered, factor)'.
Ver tambin: `gl' para construir factores balanceados y `C' para factores con contrastes
especficos. `levels' y `nlevels' para accesar a niveles y `codes' para ontener cdigos
enteros.
Argumentos:
311
x: Nmero de xito o un vector de longitud 2 dando el nmero de xitos y fracasos.
Los intervalos de confianza son obtenidos segn procedimiento dado en Clopper and
Pearson (1934) que garantizan que el nivel de confianza es al menos el especificado pero
no dan los intervalos de confianza ms cortos.
Valor:
312
null.value: La probabilidad de xito bajo la hiptesis nula.
Referencias:
Conover, W. J. (1971), Practical nonparametric statistics. New York: John Wiley \&
Sons. Pages 97-104.
Ver tambin: `prop.test' para una prueba general aproximada para igualdad de
proporciones.
Ejemplos:
library(ctest)
#Prueba bilateral
binom.test(42,100,p=0.5)
Exact binomial test
data: 42 and 100
number of successes = 42, number of trials = 100, p-value = 0.1332
313
alternative hypothesis: true probability of success is not equal to 0.5
95 percent confidence interval:
0.3219855 0.5228808
sample estimates:
probability of success
0.42
#Solicitando el valor p:
binom.test(42,100,p=0.5)$p.value
#Prueba de cola izquierda:
binom.test(42,100,p=0.5,alt='l')
Exact binomial test
data: 42 and 100
number of successes = 42, number of trials = 100, p-value = 0.0666
alternative hypothesis: true probability of success is less than 0.5
95 percent confidence interval:
0.0000000 0.5071585
sample estimates:
probability of success
0.42
#Prueba de cola derecha:
binom.test(42,100,p=0.5,alt='g')
Exact binomial test
data: 42 and 100
number of successes = 42, number of trials = 100, p-value = 0.9557
alternative hypothesis: true probability of success is greater than 0.5
95 percent confidence interval:
0.3364797 1.0000000
sample estimates:
probability of success
0.42
#calculando un intervalo de
#confianza del 90%:
binom.test(42,100,p=0.5,conf.level=0.9)$conf.int
[1] 0.3364797 0.5071585
attr(,"conf.level")
[1] 0.9
#Intervalo de confianza aproximado
#del 90%:
prop.test(42,100,p=0.5,conf.level=0.9)$conf.int
314
[1] 0.3372368 0.5072341
attr(,"conf.level")
[1] 0.9
Esta funcin es usada para ajustar modelos log lineales a tablas de contingencia
multidimensionales mediante ajuste proporcional iterativo.
Argumentos:
margin: Una lista de vectores con los totales marginales a ser ajustados. Los
modelos log lineales pueden especificarse en trminos de estos totales marginales
dando los subconjuntos factor maximal contenidos en el modelo. Por ejemplo,
`list(c(1, 2), c(1, 3))' especifica, en un modelo de tres factores, que el modelo contiene
parmetros para la gran media en cada factor, y las interaciones 1-2 y 1-3 (un modelo
donde los factores 2 y 3 son independientes dado el factor 1). Pueden usarse los
nombres de los factores.
start: Argumento opcional que da una estimacin inicial para la tabla ajustada. Es
til para tablas incompletas con estructura de ceros en `table'. En este caso, las
entradas en `start' debern ser cero y ls otras pueden ser uno.
fit: Argumento lgico para indicar si los valores ajustados deben ser devueltos.
315
eps: Desviacin mxima permitida entre los mrgenes observados y ajustados.
param: Argumento lgico para indicar si los valores de los parmetros deben ser
devueltos.
df: Los grados de libertad para el modelo ajustado. No hay ajuste para ceros
estructurales.
margin: Lista de las mrgenes que fueron ajustadas. Bsicamente las mismas a la
entrada de `margin', pero con los nmeros reemplazados por nombres cuando esto es
posible.
fit: Un arreglo que contiene los valores ajustados. Slo es devuelto si `fit' es TRUE.
316
param: Una lista con los parmetros estimados del modelo. Slo es devuelta si
`param' es TRUE.
Ejemplos:
data(HairEyeColor)
>HairEyeColor
, , Sex = Male
Eye
Hair Brown Blue Hazel Green
Black 32 11 10 3
Brown 38 50 25 15
Red 10 10 7 7
Blond 3 30 5 8
, , Sex = Female
Eye
Hair Brown Blue Hazel Green
Black 36 9 5 2
Brown 81 34 29 14
Red 16 7 7 7
Blond 4 64 5 8
317
$margin[[2]]
[1] "Hair" "Sex"
$margin[[3]]
[1] "Eye" "Sex"
1 - pchisq(fm$lrt, fm$df)
[1] 0.5154158
Factor B
Factor 222 115
A 240 185
y suponga queremos ajustar un modelo log-lineal saturado y obtener los parmetros del
modelo, las instrucciones son:
frecuencias.obs<-matrix(c(222,115,240,185), ncol=2,byrow=T)
loglin(frecuencias.obs,list(1:2),fit=T,param=T)
2 iterations: deviation 0
$lrt
[1] 0
$pearson
[1] 0
$df
[1] 0
$margin
$margin[[1]]
[1] 1 2
$fit
[,1] [,2]
318
[1,] 222 115
[2,] 240 185
$param
$param$"(Intercept)"
[1] 5.212151
$param$"1"
[1] -0.1383463 0.1383463
$param$"2"
[1] 0.2295071 -0.2295071
$param$"1.2"
[,1] [,2]
[1,] 0.09936554 -0.09936554
[2,] -0.09936554 0.09936554
la opcin fit=T nos presenta la tabla de valores esperados bajo el modelo y param=T
nos da los valores estimados del modelo que ajustamos.Si queremos ajustar un modelo de
independencia, la instruccin es
> loglin(frecuencias.obs,list(1,2),fit=T,param=T)
> loglin(frecuencias.obs,list(1),fit=T,param=T)
Como se observa con la opcin list() nosotros introducimos el modelo a ser estimado.
Permite dividir los datos de un vector `x' en grupos definidos por `f'. Las formas de
asignacin reemplazan los valores correspondientes a tal divisin. unsplit reversa el
efecto de split.
319
split(x, f)
split.default(x, f)
split.data.frame(x, f)
split(x, f) <- value
split.default(x, f) <- value
split.data.frame(x, f) <- value
unsplit(value, f)
Argumentos:
f: Un factor tal que `factor(f)' define el agrupamiento, o una lista de tales factores
cuyo caso sus interacciones son usadas para el agrupamiento.
value: Una lista de vectores o data frames compatible con un splitting de `x'.
`unsplit' slo funciona con listas de vectores. El mtodo data frame puede usarse tambin
para particionar una matriz en una lista de matrices.
Valor: Esta funcin produce una lista de vectores que contienen los valores para los
grupos. Los componentes de la lista son denominados por los niveles de factor dados por
`f'. Si `f' es de mayor longitud que `x' algunos de estos valores sern de longitud cero.
Ejemplos:
n <- 10
nn <- 100
##generando un vector, aleatoriamente
##con los nmeros que identifican
##el nivel del factor al que pertenecen cada una de
320
##1000 observaciones. Los niveles
##numerados de 0 a 10.
g <- factor(round(n * runif(n * nn)))
##o bien:
tapply(x,g,length)
0 1 2 3 4 5 6 7 8 9 10
54 114 74 103 112 107 75 100 103 111 47
tapply(x,g,mean)
0 1 2 3 4 5 6
0.8842438 1.4449423 1.7574916 1.9668411 2.2904859 2.4450622 2.5734979
7 8 9 10
2.7544654 2.9478100 3.3161729 3.0368155
321
1.426932e-16 -4.121703e-17 1.565588e-18 1.311316e-16 -6.876381e-17
10
1.371354e-16
##o bien:
sapply(xgs,mean)
0 1 2 3 4
1.015134e-17 -1.186307e-16 4.899422e-17 -6.762895e-17 1.876134e-16
5 6 7 8 9
1.426932e-16 -4.121703e-17 1.565588e-18 1.311316e-16 -6.876381e-17
10
1.371354e-16
split(ma, col(ma))
$"1"
[1] 1 2 3 4 5 6 7 8 9 10
$"2"
[1] 16 9 4 1 0 1 4 9 16 25
##Otro ejemplo:
split(1:10, 1:2)
$"1"
[1] 1 3 5 7 9
$"2"
322
[1] 2 4 6 8 10
Warning message:
argument lengths differ in: split(x, f)
Uno de los atractivos de R es su facilidad de manejo para modelos. Entre ellos tenemos el
modelo lineal generalizado con la funcin glm(). Esta funcin permite realizar ajuste de
modelos lineales generalizados, mediante la especificacin de una frmula que describe
simblicamente el predictor lineal y una descripcin de la distribucn del error.
Argumentos:
data: Un data frame opcional con las variables en el modelo. Por defecto las
variables son tomadas de `environment(formula)', generalmente el ambiente desde el
cual es llamada la funcin glm .
323
weights: Un vector opcional con pesos a utilizar en el ajuste.
na.action: Una funcin que indica lo que debera pasar cuando los datos tienes
valores faltantes (`NA's). El valor por defecto corresponde al ajuste dado por
`na.action' de `options'.
offset: Puede utilizarse para especificar una componente conocida apriori a ser
incluida en el predictor lineal durante el ajuste.
model: Un valor lgico que indica si el marco del modelo debe ser incluido como
una componente del valor retornado.
324
x, y: Valores lgicos que indican si el vector de respuesta y la matriz de diseo usada
en el ajuste deben ser devueltos en la salida del procedimiento.
type: Caracter que indica el tipo de pesos a extraer del objeto modelo ajustado.
Valor:
325
Las funciones genricas coefficients, effects, fitted.values y
residuals pueden utilizarse para extraer estos valores del objeto `glm'.
Un objeto de clase `glm' es una lista que contiene los siguientes componentes:
326
null.deviance: El deviance para el modelo nulo, comparable con `deviance'. El
modelo nulo incluye el offset, y un intercepto si el modelo lo incluye.
weights: De los residuoales de trabajo, es decir los pesos en la iteraccin final del
ajuste IWLS.
boundary: Argumento lgico para indicar si el valor ajustado est sobre la frontera
de los valores alcanzados.
327
control: El valor del argumento `control' usado.
Los ajustes no nulos tendrn componentes `qr', `R' y `effects' en relacin al ajuste lineal
ponderado final.
Si un modelo `glm' binomial es especificado mediante una respuesta de dos columnas, los
pesos devueltos por `prior.weights' corresponden al total de casos (factorizado por los pesos
proporcionados) y la componente `y' de los resultados es la proporcin de xitos.
Referencias:
328
Ver tambin: `anova.glm', `summary.glm', etc. `anova', `summary', `effects',
`fitted.values', y `residuals'.
Ejemplos:
329
Call:
glm(formula = conteos ~ salidas + tratamiento, family = poisson())
Deviance Residuals:
1 2 3 4 5 6 7
-0.67125 0.96272 -0.16965 -0.21999 -0.95552 1.04939 0.84715
8 9
-0.09167 -0.96656
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 3.045e+00 1.709e-01 17.815 <2e-16 ***
salidas2 -4.543e-01 2.022e-01 -2.247 0.0246 *
salidas3 -2.930e-01 1.927e-01 -1.520 0.1285
tratamiento2 1.924e-08 2.000e-01 9.62e-08 1.0000
tratamiento3 8.383e-09 2.000e-01 4.19e-08 1.0000
---
Signif. codes: 0 `***' 0.001 `**' 0.01 `*' 0.05 `.' 0.1 ` ' 1
(Dispersion parameter for poisson family taken to be 1)
Null deviance: 10.5814 on 8 degrees of freedom
Residual deviance: 5.1291 on 4 degrees of freedom
AIC: 56.761
Number of Fisher Scoring iterations: 3
#Ejemplo de McCullagh & Nelder (1989, pp. 300-2)
clotting <- data.frame(
u = c(5,10,15,20,30,40,60,80,100),
lot1 = c(118,58,42,35,27,25,21,19,18),
lot2 = c(69,35,26,21,18,16,13,12,12))
summary(glm(lot1 ~ log(u), data=clotting, family=Gamma))
Call:
glm(formula = lot1 ~ log(u), family = Gamma, data = clotting)
Deviance Residuals:
Min 1Q Median 3Q Max
-0.04008 -0.03756 -0.02637 0.02905 0.08641
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -0.0165544 0.0009275 -17.85 4.28e-07 ***
log(u) 0.0153431 0.0004150 36.98 2.75e-09 ***
---
Signif. codes: 0 `***' 0.001 `**' 0.01 `*' 0.05 `.' 0.1 ` ' 1
(Dispersion parameter for Gamma family taken to be 0.002446013)
330
Null deviance: 3.512826 on 8 degrees of freedom
Residual deviance: 0.016730 on 7 degrees of freedom
AIC: 37.99
Number of Fisher Scoring iterations: 3
summary(glm(lot2 ~ log(u), data=clotting, family=Gamma))
Call:
glm(formula = lot2 ~ log(u), family = Gamma, data = clotting)
Deviance Residuals:
Min 1Q Median 3Q Max
-0.05574 -0.02925 0.01030 0.01714 0.06372
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -0.0239085 0.0013265 -18.02 4.00e-07 ***
log(u) 0.0235992 0.0005768 40.91 1.36e-09 ***
---
Signif. codes: 0 `***' 0.001 `**' 0.01 `*' 0.05 `.' 0.1 ` ' 1
(Dispersion parameter for Gamma family taken to be 0.001813340)
Null deviance: 3.118557 on 8 degrees of freedom
Residual deviance: 0.012672 on 7 degrees of freedom
AIC: 27.032
Number of Fisher Scoring iterations: 3
Permite especificar una familia de distribucin para los modelos lineales generalizados en
la funcin glm.
family(object, ...)
binomial(link = "logit")
gaussian(link ="identity")
Gamma(link = "inverse")
inverse.gaussian(link = "1/mu^2")
poisson(link = "log")
quasi(link = "identity", variance = "constant")
331
quasibinomial(link = "logit")
quasipoisson(link = "log")
Argumentos:
variance: Para todas las familias excepto la familia `quasi' , la funcin de varianza
es determinada por la familia. La familia `quasi' aceptar las especificaciones
`constant', `mu(1-mu)', `mu', `mu^2' y `mu^3' para la funcin varianza.
object: La funcin family accesa a los objetos `family' que son guardados dentro
de los objetos creado spor las funciones de modelacin.
Ejemplos:
332
conteos <- c(18,17,15,20,10,20,25,13,12)
salidas <- gl(3,1,9)
tratamiento <- gl(3,3)
d.AD <- data.frame(tratamiento, salidas, conteos)
glm.qD93 <- glm(conteos~ salidas + tratamiento, family=quasipoisson())
anova(glm.qD93, test="F")
summary(glm.qD93)
## Uso de resultados poisson:
anova(glm.qD93, dispersion = 1, test="Chisq")
summary(glm.qD93, dispersion = 1)
## Pruebas de quasi:
x <- rnorm(100)
y <- rpois(100, exp(1+x))
glm(y ~x, family=quasi(var="mu", link="log"))
## Es lo mismo que:
glm(y ~x, family=poisson)
glm(y ~x, family=quasi(var="mu^2", link="log"))
y <- rbinom(100, 1, plogis(x))
##Se necesita ajustar un valor inicial
##para el siguiente ajuste:
glm(y ~x, family=quasi(var="mu(1-mu)", link="logit"), start=c(0,1))
Con esta funcin podemos ajustar un modelo de anlisis de varianza aplicando la funcin
lm a cada estrato, en diseos balanceados y desbalanceados.
Argumentos:
333
data: Un data frame en el cual se hallan las variables especificadas en la frmula. Si
no se especifica, las variables son buscadas en el ambiente desde el cual se llam la
funcin aov.
contrasts: Una lista de los contrastes a usar para alguno de los factores en la
frmula. No son usados para ningn trmino de `Error'. Proporcional contrastes para
los factores nicamente en el trmino de `Error' dar una advertencia.
...: Argumentos a ser pasados a la funcin \tt lm , tal como `subset', o `na.action'.
Si la frmua contiene slo un trmino de `Error', este es usado para especificar los estratos
de errores, y los modelos apropiados son ajustados dentro de cada estrato de error.
Valor: Un objeto de clase `c(aov, "lm")', o de clase `c("maov", aov", "mlm", "lm")' si
hay mltiples respuestas, o de clase aovlist para estratos de error mltiples.
Autor: B. D. Ripley
334
programa<-c(1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4)
comisiones<-c(231,209,226,214,230,218,160,183,210,179,191,
251,246,238,227,240,195,188,204,192,210,197)
programa<-as.factor(programa)
aov.comisiones<-aov(comisiones~programa)
summary(aov.comisiones)
Df Sum Sq Mean Sq F value Pr(>F)
programa 3 9513.5 3171.2 23.913 1.677e-06 ***
Residuals 18 2387.1 132.6
---
Signif. codes: 0 `***' 0.001 `**' 0.01 `*' 0.05 `.' 0.1 ` ' 1
nf<-layout(rbind(c(0,1,1,0),c(0,2,2,0)))
programa<-c(1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4)
comisiones<-c(231,209,226,214,230,218,160,183,210,179,191,
251,246,238,227,240,195,188,204,192,210,197)
programa<-as.factor(programa)
comisiones.df<-data.frame(comisiones,programa)
plot(comisiones.df)
plot.factor(comisiones.df)
aov.comisiones<-aov(comisiones~programa, comisiones.df)
> aov.comisiones
Call:
aov(formula = comisiones ~ programa, data = comisiones.df)
Terms:
programa Residuals
Sum of Squares 9513.524 2387.067
Deg. of Freedom 3 18
Residual standard error: 11.51585
Estimated effects may be unbalanced
summary(aov.comisiones)
Df Sum Sq Mean Sq F value Pr(>F)
programa 3 9513.5 3171.2 23.913 1.677e-06 ***
Residuals 18 2387.1 132.6
---
335
Signif. codes: 0 `***' 0.001 `**' 0.01 `*' 0.05 `.' 0.1 ` ' 1
N <- c(0,1,0,1,1,1,0,0,0,1,1,0,1,1,0,0,1,0,1,0,1,1,0,0)
P <- c(1,1,0,0,0,1,0,1,1,1,0,0,0,1,0,1,1,0,0,1,0,1,1,0)
K <- c(1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,0,0,1,1,1,0,1,0)
yield <- c(49.5,62.8,46.8,57.0,59.8,58.5,55.5,56.0,62.8,55.8,69.5,55.0,
62.0,48.8,45.5,44.2,52.0,51.5,49.8,48.8,57.2,59.0,53.2,56.0)
npk <- data.frame(block=gl(6,4), N=factor(N), P=factor(P),
K=factor(K), yield=yield)
summary(npk.aov)
Df Sum Sq Mean Sq F value Pr(>F)
block 5 343.29 68.66 4.4467 0.015939 *
N 1 189.28 189.28 12.2587 0.004372 **
P 1 8.40 8.40 0.5441 0.474904
K 1 95.20 95.20 6.1657 0.028795 *
N:P 1 21.28 21.28 1.3783 0.263165
N:K 1 33.13 33.13 2.1460 0.168648
336
P:K 1 0.48 0.48 0.0312 0.862752
Residuals 12 185.29 15.44
---
Signif. codes: 0 `***' 0.001 `**' 0.01 `*' 0.05 `.' 0.1 ` ' 1
coefficients(npk.aov)
(Intercept) block2 block3 block4 block5 block6
51.8250000 3.4250000 6.7500000 -3.9000000 -3.5000000 2.3250000
N1 P1 K1 N1:P1 N1:K1 P1:K1
9.8500000 0.4166667 -1.9166667 -3.7666667 -4.7000000 0.5666667
337
Captulo 10: Apndice: Datos
Los siguientes datos representan las velocidades de autos medidas con radar en una calle de
la ciudad.
48 47 49 50 57 44 54 49 52 68 45
77 45 46 51 50 46 47 48 45 57 40
56 40 38 48 50 45 59 54 48 55 47
50 53 49 76 53 54 71 56 59 43 49
45 45 46 58 51 56 45 54 59 38 71
47 56 60 53 54 43 59 60 50 57 50
50
Los siguientes datos corresponden al modelo (R-4 o R-12), el ao del carro y el precio de
oferta de varios carros marca Renault aparecidos en los clasificados del El Colombiano
aparecidos en Noviembre 19/94
r4 85 4.00
r4 88 4.30
r4 81 2.85
r4 80 2.95
r4 70 2.20
r4 77 2.45
r4 71 2.00
r4 88 4.90
r4 74 1.78
r4 73 1.70
r4 80 2.90
338
r12 80 4.60
r12 76 3.80
r12 78 4.80
r12 79 4.70
r12 76 3.60
r12 78 4.50
r12 74 3.50
r12 74 3.50
La siguiente tabla contiene una muestra de las siguientes variables (por columnas)
relacionadas con los resultados en las pruebas del ICFES realizadas en Colombia
durante varios aos.
339
9a. :Resultado en Aptitud Matemtica
F 89 51 41 40 52 55 49 54 57 47 CON
F 89 46 29 40 40 39 49 50 48 51 CON
F 89 36 32 45 38 51 51 42 40 47 CON
F 92 50 45 54 63 67 65 67 50 57 ING
M 92 50 45 54 63 67 65 67 50 57 ING
F 93 54 50 55 40 55 61 49 44 55 MET
M 89 54 55 53 60 57 50 46 55 48 ABS
M 89 52 42 55 51 51 56 50 55 48 MET
F 89 47 44 42 37 50 57 52 51 55 CON
F 89 50 44 42 47 40 54 40 42 56 CON
F 89 46 47 44 39 53 45 48 51 40 CON
F 89 71 65 64 69 66 78 63 67 57 MEC
M 89 62 70 74 66 71 64 69 70 64 ING
M 89 69 58 69 70 69 76 63 67 64 ELE
F 89 54 41 40 55 56 46 56 36 55 CON
F 89 55 44 48 46 57 51 50 46 55 CON
M 93 46 42 56 56 52 54 47 44 61 MEC
F 93 42 45 47 40 42 50 36 42 41 MEC
M 93 42 50 50 42 59 47 44 48 48 MET
M 93 54 44 51 51 44 47 56 50 60 ABS
M 93 50 50 55 55 53 51 58 48 51 MEC
F 93 37 36 40 36 36 47 36 44 40 CON
F 93 32 42 39 32 45 36 40 36 42 CON
340
F 93 53 53 42 57 59 54 38 40 50 ING
M 93 66 63 64 62 68 59 69 70 69 ELE
M 92 55 49 57 49 61 57 52 60 47 ELE
F 92 43 46 45 42 49 58 57 50 56 ING
F 93 40 44 51 36 47 48 44 42 47 ING
F 93 40 41 40 51 45 44 46 44 48 CON
F 93 44 44 45 45 59 54 56 56 56 CON
F 93 36 44 51 39 37 36 44 50 48 CON
F 89 62 35 55 55 58 47 37 46 56 CON
M 89 54 44 58 52 48 62 54 59 42 MET
M 89 54 44 50 45 61 53 48 65 50 ABS
F 89 55 39 47 44 55 56 54 57 56 CON
M 89 47 48 50 49 52 42 71 63 51 ELE
F 89 60 45 55 55 61 54 52 48 47 CON
F 89 51 44 52 47 60 65 39 55 60 CON
M 89 56 52 60 53 49 51 52 57 55 MET
F 89 50 45 50 50 61 62 67 57 49 CON
M 89 49 48 53 54 56 51 65 63 55 MET
M 89 59 52 66 58 57 53 58 59 48 ELE
M 89 60 48 58 56 60 49 69 51 55 MET
M 89 56 55 64 55 61 60 67 65 49 ELE
M 89 63 53 60 67 71 60 54 53 46 ELE
M 89 66 48 63 64 66 54 56 57 56 ELE
M 89 56 52 58 65 60 58 65 59 57 MET
F 89 58 47 60 55 63 64 56 53 71 CON
M 89 69 55 64 65 64 60 54 55 56 ELE
M 89 58 55 55 57 56 57 67 70 66 ABS
F 89 63 53 50 68 63 62 50 55 68 CON
M 89 59 65 68 57 69 72 65 67 59 ELE
F 89 58 56 58 55 66 62 63 67 77 ING
F 93 42 44 51 45 56 55 36 42 46 ING
F 93 40 41 50 45 56 54 49 32 59 ING
M 93 48 45 58 49 46 51 51 44 53 MET
F 93 38 35 47 36 43 43 40 40 33 ING
F 93 46 44 48 49 47 55 36 38 56 ING
F 93 28 42 50 39 40 46 51 42 48 CON
M 93 39 33 47 47 41 48 40 28 53 MET
F 93 38 45 40 44 50 51 33 42 50 CON
M 93 55 54 59 50 54 62 64 64 53 MEC
341
M 93 56 44 45 53 59 51 49 36 56 MET
F 93 62 48 58 49 58 61 55 44 62 ING
F 93 54 59 51 50 62 70 55 50 60 ING
F 93 38 41 42 35 37 43 35 44 35 CON
F 93 36 51 47 53 61 50 49 46 58 ING
M 93 48 39 50 54 47 48 40 46 63 MET
F 93 34 48 47 38 46 56 36 42 50 ING
M 93 49 39 47 50 54 52 42 40 50 MET
M 93 51 48 58 54 51 52 47 46 63 MET
F 93 57 57 56 57 62 65 60 48 65 ING
F 93 34 41 47 40 43 43 49 32 42 CON
F 93 38 41 43 47 52 47 47 44 63 CON
M 93 61 60 67 67 68 73 66 74 73 MEC
M 93 53 48 56 51 50 51 60 52 61 MET
M 93 53 41 45 56 43 54 49 48 59 MEC
M 93 67 45 67 64 68 59 69 64 71 MEC
M 92 64 49 61 57 66 54 57 48 46 ING
M 92 65 55 64 64 63 60 59 52 61 ING
M 92 65 59 75 59 65 53 65 66 60 ABS
F 92 54 51 45 46 52 49 41 42 58 CON
F 92 50 48 32 45 50 39 47 46 51 CON
F 92 46 46 37 31 39 41 41 34 43 CON
F 92 43 35 41 45 46 43 54 38 65 CON
M 92 54 51 46 54 59 49 57 54 40 MEC
M 92 57 41 54 51 61 52 56 50 53 MET
F 92 38 32 30 39 35 30 36 32 46 CON
F 92 45 32 37 39 42 33 43 44 58 CON
M 92 54 41 45 33 52 50 47 40 53 MEC
F 92 36 41 33 39 31 31 32 32 51 CON
M 92 45 51 51 63 52 54 47 34 54 ING
M 92 54 59 51 46 59 56 52 52 56 ING
M 92 47 49 57 55 63 65 52 54 63 ING
M 92 57 49 62 58 60 70 59 52 66 ING
F 92 41 40 43 45 43 48 43 36 42 CON
M 92 55 57 59 42 46 42 48 52 66 ABS
M 92 40 40 48 46 43 45 45 42 46 MET
M 92 64 46 59 60 62 56 45 50 40 MEC
F 93 38 56 51 48 51 50 47 46 55 MET
F 93 59 56 56 49 56 56 53 62 60 CON
342
M 92 63 66 70 64 70 68 68 54 69 ING
M 92 59 57 59 53 59 60 76 68 59 ING
M 92 65 71 72 67 68 66 74 70 66 ING
M 92 47 52 41 52 53 46 39 36 43 CON
M 92 56 54 61 64 60 62 61 56 67 MEC
F 92 50 49 51 54 49 56 39 50 65 CON
F 92 63 51 48 57 62 58 50 54 67 CON
F 92 56 45 57 59 65 70 57 50 50 CON
F 92 56 35 53 56 62 64 52 50 58 CON
F 92 56 40 57 61 54 60 52 46 58 CON
F 92 43 51 49 56 61 61 59 66 64 CON
F 92 52 60 54 47 64 57 57 48 64 CON
M 92 55 66 59 57 61 43 57 52 65 ElE
M 92 57 48 54 62 58 56 52 56 61 MEC
F 92 46 46 48 50 52 45 47 42 58 CON
F 93 44 50 43 53 45 44 51 44 45 MET
F 93 62 56 58 57 60 56 49 42 78 CON
F 93 31 31 39 28 35 41 44 44 37 CON
F 93 61 47 61 61 66 69 58 56 49 ING
M 93 59 48 64 61 64 65 58 54 56 ElE
F 93 27 50 39 32 42 46 44 38 36 ING
F 93 43 44 55 46 56 59 51 46 66 ING
F 93 46 53 50 56 69 65 47 44 60 ING
F 93 34 44 42 38 54 41 42 28 39 ING
F 93 49 48 47 51 51 55 47 52 52 ING
M 93 48 48 53 49 58 50 49 58 54 MEC
F 93 45 53 51 54 55 50 51 50 50 CON
F 93 43 38 42 48 44 44 35 40 52 ING
F 93 38 42 50 41 45 51 46 48 55 ING
F 89 50 39 42 43 49 50 39 36 40 CON
F 89 43 39 31 36 49 32 42 36 41 CON
343
Captulo 11: Referencias
344