manual_rb
TRANSCRIPT
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 1/344
1
Introducción al R
Juan Carlos Correa Morales y Nelfi González
Posgrado en Estadística
Universidad Nacional-Sede Medellín
2002
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 2/344
2
PREFACIO 8
CAPÍTULO 1: INTRODUCCIÓN 9
1.1. OPERANDO R 91.1.1 I NICIACIÓN DE UNA SESIÓN EN R 91.1.2 TERMINACIÓN DE UNA SESIÓN EN R 101.2. EJECUCIÓN DE COMANDOS DESDE UN ARCHIVO EXTERNO 10 1.3. EJECUCIÓN DE FUNCIONES ESPECIALES 11
CAPÍTULO 2: MANEJO DE DATOS EN R 14
2.1. ENTRADA Y LECTURA DE DATOS 14 2.1.1 FUNCIÓN SCAN 14 2.1.2 FUNCIÓN READ.TABLE 27 2.1.3 FUNCIÓN READ.FWF 35 2.1.4 E NTRANDO DATOS DESDE EL TECLADO 41 2.2. DATOS FALTANTES 47 2.3. FUNCIONES DE ESCRITURA Y EXPORTACIÓN DE DATOS QUE ESTÁN EN R 492.3.1 FUNCIÓN DUMP 49 2.3.2 FUNCIÓN WRITE (ESCRIBIENDO UNA MATRIZ A UN ARCHIVO EXTERNO) 54
2.3.3 FUNCIÓN SINK (E NVIANDO RESULTADOS A UN ARCHIVO DE TEXTO) 562.4. CONSTRUCCIÓN, LECTURA Y ESCRITURA DE TABLAS DE CONTINGENCIA
CATEGÓRICAS 59 2.4.1 FUNCIÓN FTABLE 59
CAPÍTULO 3: MANIPULACIÓN DE DATOS 74
3.1. OPERADORES 74 3.1.1 FUNCIONES QUE PRODUCEN ESCALARES 79 3.1.2 FUNCIONES PARA REDONDEO DE NÚMEROS 81
3.1.3 FUNCIONES RELACIONADAS CON DISTRIBUCIONES 83 3.2. EJECUCIONES CONDICIONALES Y LOOPS (FLUJOS DE CONTROL) 893.2.1 CÓMO PARAR CICLOS: LA FUNCIÓN STOP() 99 3.3. OBJETOS EN R 1003.3.1 FUNCIÓN APPEND 100 3.3.2 FUNCIÓN MATRIX, IS.MATRIX, AS.MATRIX 105 3.3.3 FUNCIÓN DATA.MATRIX 110
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 3/344
3
3.3.4 FUNCIÓN LIST 112 3.3.5 FUNCIÓN UNLIST 117
3.3.6 FUNCIÓN DATA.FRAME 120 3.3.7 R EMOVIENDO OBJETOS 124
CAPÍTULO 4: CREACIÓN DE NUEVAS FUNCIONES EN R 125
4.1. PROBLEMAS DE MEMORIA EN R 132
CAPÍTULO 5: MATRICES 133
5.1. OPERACIONES BÁSICAS CON MATRICES 133
5.2. TRANSPOSICIÓN DE UNA MATRIZ 134 5.3. PRODUCTOS CRUZADOS 135 5.4. DESCOMPOSICIÓN SVD 135 5.5. DESCOMPOSICIÓN QR 136 5.6. PEGANDO MATRICES 141 5.7. DESCOMPOSICIÓN DE CHOLESKY 143 5.8. CÁLCULO DE VALORES Y VECTORES PROPIOS 143 5.9. CREACIÓN DE MATRICES DIAGONALES 145 5.10. PRODUCTO K RONECKER 146 5.11. INVERSA DE UNA MATRIZ 147 5.12. ORDENANDO UN VECTOR 148
5.13. APLICANDO FUNCIONES SOBRE LAS COMPONENTES DE UNA MATRIZ 149 5.14. FUNCIONES COLSUMS, ROW SUMS, COL M EANS, ROW M EANS 156
CAPÍTULO 6: INTRODUCCIÓN 160
6.1. FUNCIONES PARA ESPECIFICAR DEVICES 160 6.2. ALGUNOS PARÁMETROS PARA GRAFICAR EN R 1606.3. GRÁFICOS UNIDIMENSIONALES 161 6.4. GRÁFICOS BIDIMENSIONALES 161 6.5. GRÁFICOS TRIDIMENSIONALES 161
6.6. MÚLTIPLES GRÁFICOS POR PÁGINA (EJEMPLOS) 1626.7. FUNCIÓN PERSP 163 6.8. FUNCIÓN CONTOUR 167 6.9. FUNCIÓN IMAGE 171 6.10. FUNCIÓN MATPLOT 175 6.11. IMPRIMIENDO GRÁFICOS 178
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 4/344
4
CAPÍTULO 7: GRÁFICOS PARA UNA VARIABLE 179
7.1. FUNCIÓN HIST: HISTOGRAMAS 179 7.2. FUNCIÓN BOXPLOT 185 7.3. FUNCIÓN STEM 189 7.4. FUNCIÓN QQNORM : GRÁFICOS CUANTIL - CUANTIL 191
CAPÍTULO 8: GRÁFICOS MULTIVARIABLES 194
8.1. FUNCIÓN PAIRS : MATRICES DE DISPERSIÓN 194 8.2. FUNCIÓN PLOT : GRÁFICOS DE DISPERSIÓN 197 8.3. FUNCIÓN STARS: GRÁFICO DE ESTRELLAS 199
8.4. GRÁFICAS TRELLIS (DE R EJILLA) 205
CAPÍTULO 9: MODELOS ESTADÍSTICOS EN R 211
9.1. ESTADÍSTICA BÁSICA 211 9.1.1 MEAN(): 2119.1.2 WEIGHTED.MEAN(): 2129.1.3 COR(), VAR() Y COV(): 2139.1.4 MEDIAN(): 2159.1.5 MAX(), MIN(): 216
9.1.6 PMAX(), PMIN(): 2169.1.7 QUANTILE(): 2179.1.8 RANGE(): 2189.1.9 RANK(): 2189.1.10 SUMMARY(): 2199.2. FÓRMULAS EN R 2219.2.1 I NTERACCIÓN Y E NCAJAMIENTO 222 9.2.2 FUNCIÓN FORMULA 223 9.3. FUNCIONES PARA PRUEBAS ESTADÍSTICAS 227 9.3.1 TEST DE NORMALIDAD: FUNCIÓN SHAPIRO.TEST 228 9.4. R EGRESIÓN LINEAL CLÁSICA 229 9.4.1 FUNCIÓN LM: 2309.4.2 FUNCIÓN LSFIT: 2349.4.3 FUNCIÓN LS.DIAG: 2359.4.4 FUNCIÓN STEP: 2419.4.5 MEDIDAS DE I NFLUENCIA 246 9.5. MÍNIMOS CUADRADOS NO LINEALES: FUNCIÓN NLS 249
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 5/344
5
9.6. ANÁLISIS MULTIVARIABLE 253 9.6.1 DISCRIMINACIÓN, FUNCIÓN: LDA 254
9.6.2 FUNCIÓN MAHALANOBIS 258 9.6.3 FUNCIÓN COV.WT 260 9.6.4 FUNCIÓN PRCOMP 261 9.6.5 FUNCIÓN BIPLOT.PRINCOMP 266 9.6.6 FUNCIÓN BIPLOT 267 9.6.7 FUNCIÓN SCREEPLOT 270 9.6.8 FUNCIÓN FACTANAL 271 9.6.9 FUNCIÓN CANCOR 277 9.6.10 FUNCIÓN DIST 281 9.6.11 FUNCIÓN KMEANS 283 9.6.12 FUNCIÓN HCLUST 287 9.6.13 FUNCIÓN CUTREE 292 9.7. ANÁLISIS DE DATOS CATEGÓRICOS 306 9.7.1 FUNCIÓN CUT: 3069.7.2 FUNCIÓN TABLE: 3099.7.3 FUNCIÓN LEVELS 309 9.7.4 FUNCIÓN FACTOR 309 9.7.5 FUNCIÓN BINOM.TEST: 3119.7.6 FUNCIÓN LOGLIN 3159.7.7 FUNCIÓN SPLIT 319 9.8. MODELO LINEAL GENERALIZADO: FUNCIÓN GLM 323
9.8.1 FUNCIÓN FAMILY 331 9.9. ANÁLISIS DE VARIANZA: FUNCIÓN AOV 333
CAPÍTULO 10: APÉNDICE: DATOS 338
10.1. DATOS DE VELOCIDADES DE AUTOS 338 10.2. DATOS DE PRECIOS DE CARROS R EANULT 4 Y 12 338 10.3. DATOS DE LAS PRUEBAS NACIONALES DEL ICFES 339
CAPÍTULO 11: REFERENCIAS 344
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 6/344
6
Prefacio
Estas notas son para uso local en la Universidad Nacional-Sede Medellín y se realizaron
para motivar el uso del programa R entre los estudiantes del posgrado de estadística. El
programa R es una versión del programa S creado en los laboratorios ATT-Bell. Ha tenido
la ventaja de contar con el apoyo de famosos estadísticos y científicos tales como Hastie,
Tibshirani, Friedman, Ripley, Venables, etc. Muchos han contribuído con nuevas y
novedosas rutinas para implementar nueva metodología estadística, lo que lo coloca como
uno de los programas de avanzada para investigadores en estadística. Fué escrito básicamente en Scheme con la implementación de algunas rutinas provenientes de Fortran.
La filosofía de programación es muy similar a la del lenguaje C.
Más que un programa de estadística R puede ser considerado un lenguage de alto nivel. Es
completamente estructurado. La programación es dinámica ya que el uso de la memoria y
el dimensionamiento de matrices es ejecutado automáticamente. Permite definir funciones
que pasan a ser parte del sistema automáticamente y pueden ser llamadas en posterioressesiones sin tener que definirlas nuevamente. R puede pensarse, aunque es mucho más,
como un lenguage matricial. Las siguientes son unas ventajas:
Opera con objetos,
Posee una amplia base de operadores,
Usa operadores que se aplican a matrices completas, por ejemplo, si A y B son matrices
las siguientes operaciones son posibles: A B+ , etc.
Es interactivo,
Produce gran variedad de gráficos de excelente calidad.
R es un paquete estadístico de dominio público, pero esto no quiere decir que su calidad
sea baja, por el contrario, su calidad es muy superior a muchos paquetes estadísticos que
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 7/344
7
cuestan una pequeña fortuna. Este paquete ha tenido un desarrollo vertiginoso debido al
entusiasmo de un grupo de personas que trabajan en estadística, que no solo son
estadísticos prestantes sino que también aportan sus conocimientos a la comunidad. El
programa se puede obtener, para diferentes plataformas, de la siguiente dirección en
Internet
http cran r project org: // . .
Los orígenes de este programa se remontan a finales de la década de los 80, cuando salió el
programa S + y las versiones comerciales de él, en especial el S-Plus. Realmente se trataba
de una emulación escrita en Scheme que no tuvo un desarrollo grande en sus primeros años.
A mediados de los 90 se realiza una transacción 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 científica. Esto motivó que algunos miraran
hacia otro lado. En Internet se conseguía R (versión 0.6), un programa altamente inestable,
pero estaba disponible y además era de código abierto y altamente compatible con S-Plus
(versión 3.1). La migración fue inmediata y en término de dos meses se habían liberadovarias modificaciones del programa empujadas por Brian Ripley, un profesor de Oxford,
experto en simulación y estadística espacial, cuyos aportes al S-Plus habían sido
significativos. En la versión de R 0.64 el programa ya era bastante estable y prácticamente
era igual al S-Plus 3.1.
Una de las características que hizo que la comunidad estadística en la década de los 80
mirara el S-Plus, era su capacidad gráfica. Los gráficos producidos por este programa son
de altísima calidad (calidad de publicación) y se pueden realizar gráficos de una manera
muy simple. Otra característica es su orientación a objetos. Los creadores de S + en los
laboratorios de la AT&T siempre defendieron la idea que este era un lenguaje para realizar
análisis de datos y no un paquete estadístico.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 8/344
8
Parte IManejo de Datos
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 9/344
9
Capítulo 1: Introducción
1.1. Operando R
1.1.1 Iniciación de una sesión en 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:
R : Copyright 2001, The R Development Core Team
Version 1.3.1 (2001-08-31)
R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type `license()' or `licence()' for distribution details.
R is a collaborative project with many contributors.
Type `contributors()' for more information.
Type `demo()' for some demos, `help()' for on-line help, or
`help.start()' for a HTML browser interface to help.
Type `q()' to quit R.
[Previously saved workspace restored]
>
y el cursor se ubicará en esa línea. El programa espera que usted le dé los comandos
respectivos. El símbolo $>$ que aparece al lado izquierdo es el prompt. Ud. no lo tiene que
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 10/344
10
escribir y lo seguiremos escribiendo para conservar uniformidad con los otros textos sobre
R.
1.1.2 Terminación de una sesión en R
Para finalizar una sesión en R selecciona en la ventana el comando de terminar o escriba el
siguiente comando:
> q()
Nota: Es importante notar que para el programa las mayúsculas son diferentes a las
minúsculas, y el comando q() es diferente del comando Q(). Una vez ud. decide
terminar su sesión 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 también 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.
1.2. Ejecución de comandos desde un archivo externo
Cuando el análisis que vamos a realizar requiere muchos comandos, es conveniente
editarlos y guardarlos primero en un archivo ASCII, digamos comandos.txt , la extensión
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 11/344
11
.txt es solo con el fin de enfatizar que el archivo es en ASCII, ellos pueden ser ejecutados
en cualquier momento en una sesión de R simplemente escribiendo el comando
> source(“comandos.txt”)
Obviamente, deberá indicar la ruta completa del archivo que contiene la función. También
podemos ir a la barra menú FILE y seleccionar la opción “Source R code” con la cual se
abre la ventana presentada en el gráfico 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 través deesta ventana,
disponible en la barra menú FILE, cualquier archivo en donde previamente se
han guardado objetos R
1.3. Ejecución de Funciones Especiales
En R las funciones están organizadas en librerías o paquetes. Por defecto R inicializa en el
paquete denominado “ base” en el cual encontramos las funciones generales para el manejo
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 12/344
12
de datos y graficación. Existen otros paquetes en los cuales se encuentran herramientas de
análisis más especializadas, las cuales pueden ser utilizadas cargando previamente la
librería que las contiene. Una librería o paquete puede cargarse mediante la función
library() o bien a través de la barra menú PACKAGE del R, ilustrada en la figura 1.2.
Una descripción de estas librerias puede obtenerse con:
> library()
Lo que produce la siguiente información:
Packages in library `C:/ARCHIV~1/R/rw1031/library':
base The R base package
boot Bootstrap R (S-Plus) Functions (Canty)
class Functions for classification
cluster Functions for clustering (by Rousseeuw et al.)
ctest Classical Tests
eda Exploratory Data Analysis
foreign Read data stored by Minitab, SAS, SPSS, ...KernSmooth Functions for kernel smoothing for Wand & Jones (1995)
lqs Resistant Regression and Covariance Estimation
MASS Main Library of Venables and Ripley's MASS
mgcv Multiple smoothing parameter estimation and GAMs by GCV
modreg Modern Regression: Smoothing and Local Methods
mva Classical Multivariate Analysis
nlme Linear and nonlinear mixed effects models
nls Nonlinear regression
nnet Feed-forward neural networks and multinomial log-linearmodels
rpart Recursive partitioning
spatial functions for kriging and point pattern analysis
splines Regression Spline Functions and Classes
stepfun Step Functions, including Empirical Distributions
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 13/344
13
survival Survival analysis, including penalised likelihood.
tcltk Interface to Tcl/Tk
ts Time series functions
Figura 1.2: Cargando paquetes de R a través de la barra menú
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 14/344
14
Capítulo 2: Manejo de Datos en R
El manejo de datos en R puede parecer complejo. El programa cuenta confunciones
poderosas tanto para la lectura como la escritura de datos.
Comando Función
scan() Lectura de datos. Especial para datos unestructurados.
read.table() Lectura de matrices de datos
read.fwf() Lectura de datos en formato fijo.
sink() Desvía la salida de información.
write() Escribe una matriz en un archivo de texto.
xtable() Escribe una matriz en formato Latex. Es
necesario cargar la librería xtable.
ftable() Permite presentar decentemente un arreglo
multidimensional.
2.1. Entrada y Lectura de Datos
La entrada de datos puede hacerse desde teclado y la lectura través de un archivo en
ASCII. Una vez los datos han sido leidos estos quedan en forma permanente en el disco
duro en formato R. Estos datos en formato especial pueden usarse repetidamente en
diferentes sesiones y quedan grabados en el directorio .Data, si estamos bajo UNIX o en
cambiarse.
2.1.1 Función scan
La función 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:
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 15/344
15
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)
Los argumentos son:
• file: Nombre del archivo, desde el cual se leerán los datos. Si en su lugar seespecifica `” “ ', entonces la entrada será tomada desde el teclado y en este caso la
entrada puede ser terminada por una línea en blanco. Por ejemplo, es posible entrar
datos por teclado asignados a un objeto R (vector, matriz, lista) mediante la
instrucción scan() luego de dar enter digitar los correspondientes valores. El
nombre del archivo es interpretado en relación al directorio de trabajo actual (dado
por `getwd()' , a no ser que se especifique una ruta completa. También `file' puede
ser una `connection' (ver funciónconnetion
) la cual será abierta cuando es
necesaria y se cerrará al final del llamado de la función. `file' puede ser también un
URL completo.
• what: Indica el tipo de datos (numérico o carácter) a ser leídos. Cuando los datos a
leer están en un arreglo rectangular de filas y columnas (filas para observaciones y
columnas para variables) en los cuáles un número de variables son de tipo numérico y
otras son alfanuméricas, entonces `what' es una lista, cuya longitud corresponde al
número de variables o items.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 16/344
16
• nmax: El número máximo de valores a ser leídos, o si `what' es una lista, entonces
indica el número máximo de registros a ser leídos. Si se omite y `nlines' no está
ajustado a un valor positivo, scan leerá todo el archivo.
• n: El máximo número de valores a ser leídos, por defecto no tiene límite.
• sep: Por defecto, scan espera leer los campos de entrada delimitados (separados)
por espacios en blanco. Alternativamente, `sep' puede usarse para especificar un
carácter con el cual se han delimitado los campos. Un campo siempre es delimitado
por una nueva línea a menos que esté entre comillas (esto es posible cuando el campo
es definido como alfanumérico).
• quote: el conjunto de caracteres entre comillas como una sola cadena de caracteres.
• dec: carácter para punto decimal.
• skip: El número de líneas del archivo de entrada a omitir antes de comenzar a leer los datos.
• nlines: El número máximo de líneas de datos a ser leídos.
• na.strings: Vector de caracteres. Los elementos de este vector son interpretados
como valores faltantes (`NA').
• flush: Argumento lógico. Si es TRUE', scan activará el final de la línea después
de leer el último campo requerido. Esto permite colocar comentarios después del
último campo de una línea, pero preclude colocar más de un registro en una línea.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 17/344
17
• fill: Argumento lógico. Si es `TRUE', scan implícitamente agregará campos
vacíos a todas las líneas con menos campos que los implicados por `what'.
• strip.white: Un vector de valores lógicos correspondiendo a los items en el
argumento `what'. Se usa únicamente cuando `sep' ha sido especificado, y permite el
desmantelamiento de espacios en blanco del principio y final de campos `character'
(esta función siempre es aplicada sobre campos numéricos). Si la longitud de este
argumento es 1, entonces es aplicada a todos los campos; de lo contrario si
`strip.white[i]' es `TRUE' y el i-ésimo campo de tipo caracter, entonces el espacio en
blanco al inicio y final de éste campo es quitado.
• quiet: Argumento lógico. si es `FALSE' (valor por defecto) scan() imprimirá una
línea diciendo cuantos items han sido leídos.
• blank.lines.skip: Argumento lógico. Si es `TRUE' las líneas en blanco en la entrada
son ignoradas, excepto cuando se cuentan con `nlines'.
• multi.line: Argumento lógico. Sólo es usado si `what' es una lista. Si es `FALSE', la
totalidad de un registro debe aparecer en una línea, pero más de un registro puede
aparecer en una sóla línea. Notar que usar `fill = TRUE' implica que un registro
terminará al final de una línea.
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.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 18/344
18
• Campos numéricos vacíos son siempre considerados como valores faltantes. Campos
de tipo caracter vacíos son escaneados como vectores de caracter vacíos, a menos que
`na.strings' contenga “ “ cuando ellos son considerados como valores faltantes.
• Si `sep' está ajustado al valor por defecto, el carácter '\' en una cadena entre comillas
escapa al carácter 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
duplicándolas. Pero si ‘sep = “\n” ’ es asumido por defecto entonces se desea leer
líneas completas tal cual.
• Para leer un registro por línea usar `flush = TRUE' y `multi.line = FALSE'.
• Las cadenas de longitud mayor que 8190 caracteres serán truncadas con unaadvertencia.
• Cuando no se especifica el número de items, el mecanismo interno reubica memoria
en potencias de dos y por tanto podría usar hasta tres veces más de la memoria
necesaria. Siempre que se pueda, especifique bien sea `n' o `nmax' mientras esté
ingresando un vector grande, y `nmax' o `nlines' cuando esté ingresando una lista
grande.
Ver también: read.table, readLines, write .
Ejemplos:
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 19/344
19
Uso del argumento n: La función scan() permite leer parte del archivo de datos con la
opción n , por ejemplo,
datos<-scan(“c:/miarchivo”,what=list(“ “,0,0),n=5)
El anterior comando nos permite leer cinco elementos del archivo.
Si tenemos una matriz de datos con d columnas y n filas, por el momento suponemos
que solo contiene elementos numéricos, 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 función nueva: matrix() . Esta nos permite crear un objeto que es una
matriz. Si los datos estuvieran separados por comas se coloca una opción 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 devehículo
Modelo
Precio enmillones
r4 85 4.00r4 88 4.30r4 81 2.85
r4 80 2.95r4 70 2.20r4 77 2.45r4 71 2.00r4 88 4.90r4 74 1.78r4 73 1.70r4 80 2.90
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 20/344
20
Tipo devehículo
Modelo
Precio enmillones
r12 80 4.60r12 76 3.80r12 78 4.80r12 79 4.70r12 76 3.60r12 78 4.50r12 74 3.50r12 74 3.50
Los datos en el correspondiente archivo no tienen encabezados de columna; la lectura se
hace así:
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 continuación:
> a[1]
[[1]]
[1] "r4" "r4" "r4" "r4" "r4" "r4" "r4" "r4" "r4" "r4" "r4" "r12" "r12" "r12"
[15] "r12" "r12" "r12" "r12" "r12"
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 21/344
21
En el apéndice 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 instrucción 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 números al comienzo de cada registros seguidos por dos puntos aparecen
automáticamente, y nos indica el número de la siguiente observación 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
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 22/344
22
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 función denominada unlist :
sexo<-unlist(notas[1])
nota<-unlist(notas[2])
#grafica boxplot de notas por sexo en el mismo gráfico:
boxplot(split(nota,sexo))
Observe ahora el uso de comillas para considerar lo que está entre ellas como un solo stringde 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"
uso del argumento `sep': (Observe el efecto de diferentes especificaciones de este
argumento cuando las entradas de datos son por teclado)
#Por ejemplo si estamos leyendo dato
#por línea entonces el comando es:
datos<-scan(“miarchivo”,sep=“\n”)
#Si tenemos datos separados con
#tabulador entonces el comando es
datos<-scan(“miarchivo”,sep=“\t”)
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 23/344
23
#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"
#un objeto con dos registros numéricos
> a<-scan(sep="\n")
1: 1 2 3
2: 4 5 6
3:
Read 2 items
> a
[1] 123 456
#un objeto con cuatro registros numéricos
a<-scan(sep="*")
1: 23*12
3: 4*8
5:
Read 4 items
> a
[1] 23 12 4 8
#un objeto con tres registros numéricos y un valor faltante
a<-scan(sep="*")
1: 23 34 *
3: 12
4: 45
5:
Read 4 items
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 24/344
24
> a
[1] 2334 NA 12 45
#un objeto con dos registros numéricos y dos valores faltantes:
> a<-scan(sep="*")
1: *
3: 23
4: 34
5:
Read 4 items
> a
[1] NA NA 23 34
Uso del argumento `flush': Observe como la expresión 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: 33: 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""
Ahora observe que sucede cuando `flush=TRUE' y cuando `flush=FALSE':
a<-scan(sep="*",flush=TRUE)
1: 23 34*32
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 25/344
25
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
Uso del argumento `strip.white': Observe como en las cadenas de caracteres
`strip.white=TRUE' elimina los espacios en blanco en el inicio y final de éstas:
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 26/344
26
> a<-scan(sep="\n",what=character(0),strip.white=TRUE)
1: SER FRT2: 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 línea es posible escribir dos
registros:
> a<-scan(what=list(1,1,""),multi.line =TRUE)1: 2 1 A 3 4 B
3: 5 6 C 7 8 D
5:
Read 4 records
> a
[[1]]
[1] 2 3 5 7
[[2]][1] 1 4 6 8
[[3]]
[1] "A" "B" "C" "D"
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 27/344
27
La función read.table() permite leer archivos en ASCII y crear un marco de datos.
Esta función tiene la siguiente sintaxis:
2.1.2 Función read.table
Cuando debemos manejar un archivo de datos relativamente grande y que contiene
variables tanto numéricas como alfanuméricas podemos utilizar la función
read.table() , la cual nos permite leer archivos externos en ASCII, como los que crea
una hoja electrónica. Lo que debemos tener en cuenta con esta función es la estructura de
datos, la cual se conoce como data frame, lo traduciremos como marco de datos, estaestructura crea un arreglo de datos en forma matricial, donde las filas corresponden a las
observaciones y las columnas o campos a las variables. Cuando deseamos restringir un
marco de datos a una matriz, o sea que solo deseamos considerar las columnas de tipo
numérico, utilizamos la función data.matrix(). Su desventaja es que consume mucha
memoria para archivos extensos y puede requerir una memoria mayor.
Como un ejemplo consideremos la base de datos sobre municipios de Antioquia, la cual
fue creada en una hoja electrónica y exportada como un archivo ASCII.
antioquia.marco<-read.table("a:antioq.txt",header=FALSE)
antioquia.dat<-data.matrix(antioquia.marco)
La sintaxis de esta función es como sigue:
read.table(file, header = FALSE, sep = "", quote = "\"'", dec = ".",
row.names, col.names, as.is = FALSE, na.strings = "NA",
skip = 0, check.names = TRUE, fill = FALSE,
strip.white = FALSE, blank.lines.skip = TRUE)
read.csv(file, header = TRUE, sep = ",", quote="\"", dec=".",
fill = TRUE, ...)
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 28/344
28
read.csv2(file, header = TRUE, sep = ";", quote="\"", dec=",",
fill = TRUE, ...)
read.delim(file, header = TRUE, sep = "\t", quote="\"", dec=".",
fill = TRUE, ...)
read.delim2(file, header = TRUE, sep = "\t", quote="\"", dec=",",
fill = TRUE, ...)
Argumentos:
• file: Nombre del archivo a ser leído. Las filas de la tabla corresponden a las líneas
del archivo. Cuando no se especifica una ruta para el archivo, se asume el directorio
actual de trabajo. Este argumento también puede ser un `connection', o un URL.
• header: Argumento lógico para indicar si la primera línea del archivo contiene
nombres para las variables o columnas. Cuando no se especifica, su valor es ajustado
según el formato del archivo: Se ajustará a `TRUE' si la primera fila contiene menos
campos que el número de columnas.
• sep: Caracter para indicar separación entre campos. Debe corresponder al caracter
que en el el archivo se utilice para separar los valores en una misma línea. Si `sep = "
" ' (El valor por defecto para este argumento) el separador corresponde a uno o más
espacios en blanco, tabuladores o líneas nuevas.
• quote: Conjunto de caracteres entre comillas. Para desabilitarlo usar `quote=" " '.
• dec: El caracter usado en el archivo a leer, para indicar puntos decimales.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 29/344
29
• row.names: Un vector de nombres para las filas. Puede ser un vector que dé los
nombres actuales de las filas, o un sólo número 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 número 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 numeración de las filas.
• col.names: Un vector de nombres opcionales para las variables. Su valor por defecto
es usar `"V"' seguido del número de la columna.
• as.is: La acción por defecto de `read.table' es convertir las variables no numéricas en
factores. `as.is' controla esta acción. Su valor puede ser un vector lógico o un vector
de índices numéricos que especifican cuales columnas deben ser tratadas como
cadenas de caracteres.
• na.strings: Un vector de caracteres para valores faltantes, interpretados como `NA'
• skip: El número de líneas del arhivo de datos a omitir antes de comenzar a leer
datos.
• check.names: Argumento lógico. Si es `TRUE' entonces de las variables en el
marco de datos son chequeados para asegurar que ellos son sintáticamente nombres
de variables válidos. Si es necesario ajustarlos, ellos lo serán.
• fill: Argumento lógico. Si es `TRUE', si las filas tienen longitud desigual, campos en
blanco son adicionados implícitamente.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 30/344
30
• strip.white: Argumento lógico. Es usado sólo cuando `sep' ha sido especificado, y
permite eliminar los epacios en blanco al principio y al final de campos tipo
`character' (esta acción siempre es aplicada sobre campos numéricos).
• blank.lines.skip: Argumento lógico. Si es `TRUE' líneas en blanco en la entrada son
ignoradas.
• ...: Argumentos adicionales.
Detalles:
• Si no se especifica `row.names' y la línea de encabezado tiene una entrada
• menos que el número de columnas, la primera columna es tomada como el nombre de
las filas. Si `row.names' es especificado y no se refiere a la primera columna, esa
columna es descartada del archivo.
• El número de columnas es determinada a partir de las primeras cinco líneas de la
entrada o de toda la fila si tiene menos de cinco líneas, o de la longitud de `col.names'
si éste ha sido especificado. Esto puede ser erróneo si `fill' o `blank.lines.skip' son
TRUE.
• `read.csv' y `read.csv2' son funciones idénticas a read.table' excepto en los valores
por defecto. Estas están especificadas para leer archivos con valores separados por
coma (`.csv') o la variante usada en algunas regiones que usan la coma como punto
decimal y un punto y coma como separador de campo. De forma similar, `read.delim'
y `read.delim2' son archivos de lectura delimitada, por defecto usan el caracter TAB
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 31/344
31
para el delimitador. Notar que por defecto en estas últimas cuatro funciones `header =
TRUE' y `fill = TRUE'.
• Adicionalmente, también 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 V31 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.7810 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.5019 r12 74 3.50
Los datos anteriores corresponden a “c:/graficosr/datosgraficos/renault.dat”
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 32/344
32
Ver también: `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
función que puede ser útil para determinar problemas con la lectura de archivos para los
cuales el programa reporta incorrectas longitudes de los registros.
Ejemplos: A diferencia de scan, read.table nos permite una lectura más apropiada
de los archivos con campos de tipo caracter y numéricos, de modo que quedan disponibles
para una posterior y directa operación con todos ellos.
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.206 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.8015 r12 79 4.70
16 r12 76 3.60
17 r12 78 4.50
18 r12 74 3.50
19 r12 74 3.50
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 33/344
33
> a[2]
V21 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?.
El siguiente archivo de datos
ProfTC ProfMT ProfC Magister PhD Estudiantes
UdeA 977 308 1235 454 67 34406
UNal 968 82 262 373 79 9495
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 34/344
34
EAFIT 224 17 651 NA NA 9684
EscIng 9 7 182 28 0 688
CES 36 227 27 6 1 1582UNAULA 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
está grabado en el directorio c:/datos/ bajo el nombre univers.dat . La primera fila
contiene los nombres de las columnas y la primera columna contiene los nombres de las
universidades
> 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 9684EscIng 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 algún tipo de análisis sobre las variables podemos utilizar el nombre
del objeto más el signo pesos (\$) seguido del nombre de la variable así:
> mean(universidades.dat$ProfTC)
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 35/344
35
[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
>
2.1.3 Función read.fwf
Esta función permite la lectura de archivos con formato de lectura de ancho fijo dentro de
un `data.frame'. Su valor es un `data.frame'
read.fwf(file, widths, sep="\t", as.is = FALSE,
skip = 0, row.names, col.names, n = -1)
Argumentos:
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 36/344
36
• 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 función.
• widths: Un vector de enteros que dan los anchos de los campos de ancho fijo en una
línea.
• 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.
• as.is: Ver read.table'.
• skip: El número de líneas iniciales a omitir; ver `read.table'.
• row.names: Ver read.table'.
• col.names: Ver read.table'.
• n: El número máximo de registros o líneas a ser leídas, por defecto no tiene
limitación.
Nota: Los campos de ancho cero o que están totalmente más allá del extremo de la línea
en `file' son reemplazados por `NA'.
Autor(es): Brian Ripley para la versión R: original `Perl' por Kurt Hornik.
Ver también: `scan' y `read.table'.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 37/344
37
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 creación de un vector de cadena de caracteres usado para
nombrar dichos archivos temporales; la segunda función es una función de concatenación e
impresión de argumentos a un archivo, forzándolos primero a un modo de caracteres; y la
última función permite borrar archivos y directorios específicos:
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)
cat(file=ff, "123", "987654", sep="\n")
read.fwf(ff, width=c(1,0, 2,3))
V1 V2 V3 V4
1 1 NA 23 NA
2 9 NA 87 654
unlink(ff)
El siguiente ejemplo consiste en la lectura de los tiempos de una maratón realizadas por
180 corredores, en donde cada registro consiste de un cifra de cinco dígitos 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
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 38/344
38
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 rápido y fácil) y que el archivo quede como:
102531030210307103091034910353104091044210447104521050410517105301054010549105491060610612106461064810655107071072610731
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=" ")
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 39/344
39
el data frame resultante tiene 36 columnas dado que cada registro (hora, minutos, segundos)
en descompuesto en tres elementos y en total cada línea posee los registros de los tiempos
de 12 participantes. Pero aún es necesario transformar más estos datos para obtener los
tiempos en horas de los 180 corredores:
#creación de una matriz de 180 filas por 3 columnas
#con columnas correspondiendo a horas, minutos,
#segundos
tiempo<-matrix(t(as.matrix.data.frame(a)),ncol=3,byrow=T)
\end verbatim
Veamos una presentación 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
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 40/344
40
[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
A continuación calculamos el tiempo de cada corredor en horas:
#Transformación de los tiempos a horas
tiempo<-tiempo[,1]+tiempo[,2]/60+tiempo[,3]/3600
tiempo
[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
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 41/344
41
[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
Nota: La función as.matrix.data.frame debe aplicarse para transformar las
componentes del data.frame `a' en una matriz, de lo contrario no sería posible hacer uso
de la función matrix con la cual se separaron por filas las horas, minutos y segundos
registrados por cada corredor. Además, la matriz resultante de la función
as.matrix.data.frame debe transpornerse con t(as.matrix.data.frame) para conformar apropiadamente los registros.
2.1.4 Entrando Datos Desde el Teclado
R opera con lo que se conoce como estructura de datos. La más simple de tales
estructuras es el vector , que es una sola entidad consistente de una colección ordenada de
números o caracteres. Para crear un vector llamado x, que tenga seis elementos, digamos
3.6, 2.5, 1.2, 0.6, 1.3, y 2.1, utilizamos el comando
> x<-c(3.6,2.5,1.2,0.6,1.3,2.1)
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 42/344
42
Este es un comando de asignación que utiliza la función c() con la cual creamos vectores
y que en este contexto puede tomar un número arbitrario de argumentos. El resultado final
es un vector que concatena los argumentos de la función c() . Esta función combina
valores en un vector o lista. El método por defecto combina los argumentos para formar un
vector. Todos los argumentos son forzados a un tipo común que corresponde al valor
retornado por la función.
c(..., recursive=FALSE)
Argumentos:
• ...: Objetos a ser concatenados.
• recursive: Argumento lógico. si `recursive=TRUE', desciende recursivamente a
través de listas combinanado todos sus elementos en un vector.
• Ver también: `unlist' y `as.vector' para producir vectores libres de atributos.
Ejemplos:
> c(1,7:9)
[1] 1 7 8 9
> c(1:5, 10.5, "s")
[1] "1" "2" "3" "4" "5" "10.5" "s"
> c(list(A=c(B=1)), recursive=TRUE)
A.B
1
> c(list(A=c(B=1)), recursive=FALSE)
$A
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 43/344
43
B
1
> list(A=c(B=1))
$A
B
1
> c(list(A=c(B=1,C=2), B=c(E=7)), recursive=TRUE)
A.B A.C B.E
1 2 7
> c(list(A=c(B=1,C=2), B=c(E=7)), recursive=FALSE)
$A
B C
1 2
$B
E
7
Si tenemos el siguiente conjunto de frutas: pera, manzana, banano, pera, curuba, lo
podemos asignar a un vector así:
frutas<-c("pera","manzana","banano","pera","curuba")
Esto nos crea un vector llamado frutas de caracteres.
El símbolo <- es el de asignación. Lo que está sobre la derecha es asignado al objeto de
la izquierda. Podemos tener asignaciones simples o múltiples. Por ejemplo,
> x <-0
> y <-x<-0
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 44/344
44
Como se mostró previamente, datos pueden también entrarse con la función 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 instrucción será:
>x
El siguiente ejemplo presenta un caso simple en el cual se analiza un conjunto de datos
referentes a velocidades de autos medidas con radar (en R bajo Windows)
>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”)
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 45/344
45
>q()
Si deseamos entrar vectores alfanuméricos entonces la función scan() llevará opciones
adicionales antes vistas.
>ciudades<-scan(what=character(0))
1: Medellin 'Santa Fe de Bogota' Cali Pereira
5: Cartagena Barranquilla
7:
>
Entrando Listas
Si se desea entrar un conjunto de datos que contienen tanto variables numéricas como
alfanuméricas, por ejemplo nombre, peso y edad, se hará como se explicó previamente (ver
función scan ):
> datos<-scan(=list(" ",0,0))
1: Juan 70 25
4: Pedro 65 28
7: Maria 50 22
10: Norma 55 39
13:
>
Generando Sucesiones de Números
R permite crear secuencias de una forma ágil. Por ejemplo 1:5 es equivalente a c(1,2,3,4,5).
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 46/344
46
> 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, aún más poderosa de crear secuencias es usar la función seq() , ya que esta
permite definir un incremento. El símbolo : tiene la más alta prioridad dentro de una
expresión. 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
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 47/344
47
Replicación de una estructura
La función rep() puede usarse para replicar una estructura particular cierto número de
veces. La forma más simple es
s3<-rep(x,times=4)
lo cual nos crea un objeto que es cuatro veces el objeto x.
> 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
>
2.2. Datos Faltantes
Cuando tenemos valores de las variables faltantes debemos denotarlos en R con NA. Sinembargo si tenemos un archivo donde los datos faltantes se denoten con otro carácter
entonces en la opción na.strings = “NA” de la función scan() o de la función
read.table() reemplazamos el NA por el símbolo adecuado.
Tenemos un archivo en el directorio c:/datos/ llamado aptos.txt que es
precio mts2 piezas
120 * 3
175 * 3
* 220 4
95 * 4
* 80 2
120 141 3
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 48/344
48
260 330 4
75 * 3
85 100 3165 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.datprecio 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 39 85 100 3
10 165 235 4
y observamos como el programa reemplaza los símbolos por el adecuado para manejo
interno.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 49/344
49
2.3. Funciones de Escritura y Exportación de Datos que
Están en R
2.3.1 Función dump
Si queremos crear un archivo en ASCII que contenga un objeto usamos la función dump().
Esta función permite realizar representaciones de objetos R tomando un vector de nombres
de dichos objetos y produciendo representaciones textuales de estos en un archivo o
conexión. un archivo `dump' puede ser retomado en una sesión R con la función source.
dump(list, file="dumpdata.R", append=FALSE)
Argumentos:
• list: Argumento tipo caracter. Corresponde a los nombres de uno o más objetos R a
ser descargados.
• file: Corresponde bien sea a una cadena de caracter nombrando un archivo o unaconexión. `" " ' indica salida a la consola (pantalla).
• append: Si es TRUE, la salida será añadida a `file'; de otra forma, sobreescribirá los
contenidos de `file'.
Detalles:
• La implementación actual de dump sólo funciona para arreglos vectoriales, matrices,
tablas y funciones.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 50/344
50
• La función save está diseñada para ser usada para transportar datos R entre
máquinas.
Ver también: `dput', `dget',`write'.\\
Ejemplos: Vamos a guardar dos vectores `x' e `y' en el archivo “c:/result.txt”:
x <- 1
y <- 1:10
dump(c("x","y"),file="c:/result.txt")
Supongamos ahora que estamos iniciando una nueva sesión en R, y queremos utilizar los
objetos `x' e `y' en dicha sesión; para ello, llamamos el archivo “c:/result.txt” con la función
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 añadir al archivo
“c:/result.txt”:
#Creación de vector de 100
#valores provenientes de una normal estándar
z<-rnorm(100)
dump("z",file="c:/result.txt",append=TRUE)
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 51/344
51
Ahora, crearemos una función llamada `resumen' la cual añadiremos 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 sesión 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 función `resumen' para
aplicarla a un conjunto de datos `a':
#cargando objetos R disponibles
en "c:/result.txt"
source("c:/result.txt")
#generación de 50 observaciones de una
#normal mu=5, sigma=2:
a<-rnorm(50,5,2)
#aplicación de la función resumen
#sobre el vector a.
resumen(a)
$media
[1] 5.129502
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 52/344
52
$desv.std
[1] 2.066936
$coef.var
[1] 40.29506
$mediana
[1] 5.242943
utilidad de la función dump, pues permite almacenar en otros dispositivos objetos R
(sujetos a las restricciones vistas) y la exportación de estos.
Figura 2.1: Datos en “c:/result.txt”
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 53/344
53
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:
#creación de tres objetos:
a<-rexp(10)
> b<-rnorm(20)
> c<-a/b
#listado de todos los objetos R
#disponibles en la sesión:
> ls()
[1] "a" "b" "c"
#guardar todos los objetos disponibles
#en "c:/objetos.txt"
> dump(ls(),file="c:/objetos.txt")
#Creación de una matriz la cual
#es añadida a "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 máquinas.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 54/344
54
Figura 2.2: Datos en “c:/objetos.txt”
2.3.2 Función write (Escribiendo una Matriz a un Archivo Externo)
Para escribir una matriz a un archivo ASCII utilizamos esta función donde los datos que
corresponden a una matriz `x' son escritos al archivo `file'. Cuando `x' es una matriz de dos
o más dimensiones es necesario trasponerla para que las columnas que aparezcan en `file'
coincidan con las de `x'.
write(x, file = "data",
ncolumns = if(is.character(x)) 1 else 5,append = FALSE)
Argumentos:
• x: Corresponde a los datos a ser escritos
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 55/344
55
• file: Una conexión o una cadena de caracteres nombrando el archivo al cual se
escribirán los datos.
• ncolumns: El número de columnas para escribir los datos.
• append: Argumento lógico. Si es TRUE `x' es añadida al archivo `file'.
Ver también: save para escribir cualesquiera objetos R; write.table para data
frames (marcos de datos).
Ejemplos: A continuación guardamos una matrix `x' creada con \tt matrix (ver más
adelante esta función) la cual es guardada en el archivo “c:/manualr/write.txt” (ver figura
2.3):
# crear una matriz de 10x10:
x <- matrix(rnorm(100),ncol=10)
#la matriz creada contiene:
x
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] -0.8558726 1.3148297 -1.38651179 -0.41982265 0.3882958 0.1121742
[2,] -0.8424902 -0.4882481 0.05887779 -0.23149084 -1.5820110 -0.6446336
[3,] 1.1325723 -0.4997801 -0.77362112 -1.02049357 1.3869108 -0.3000436
[4,] -0.6956890 0.7853870 -2.16470421 0.09721843 -0.7354284 0.0783864
[5,] 1.0297177 1.1912180 -0.19048374 0.09899511 -0.7408238 0.1270681
[6,] 0.1915085 -1.1961166 0.39530447 -0.68988096 -0.8448683 0.6209052
[7,] -0.7017792 0.8331557 0.85350462 0.66073701 -0.1763620 0.1802481
[8,] -0.5614818 0.5921645 -0.51038265 -0.29370360 2.2841187 0.3731943
[9,] 0.7775366 0.7954261 -0.38851534 -1.31357741 0.9291928 0.3759094
[10,] 0.5864660 0.3543825 0.25971683 -0.86956602 0.3408166 -0.4886315
[,7] [,8] [,9] [,10]
[1,] 1.3132876 -0.054863632 0.19513390 -0.61315626
[2,] 0.6747525 0.254769398 -1.15391332 -1.04650841
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 56/344
56
[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
#copiamos los anteriores datos en
#un archivo de texto:
write(t(x),file="c:/manualr/write.txt")
Figura 2.3: Datos en “c:/manualr/write.txt”
2.3.3 Función sink (Enviando resultados a un archivo de texto)
A veces se requiere tener un archivo ASCII con los resultados que se obtengan en una
sesión para una edición posterior. sink desvía una salida de R a una conexión. Esta nos
redirige la salida de los comandos de la pantalla a un archivo. En la terminal no observamos
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 57/344
57
nada. Es muy útil cuando se ejecutan trabajos como simulaciones (una alternativa obvia
bajo Windows es utilizar las opciones Cortar/Pegar).
sink(file = NULL, append = FALSE, type = c("output", "message"))
Argumentos:
• file: Una conexión o una cadena de caracteres nombrando el archivo al cual se
escribirá la salida, o `NULL' para sinking .
• append: Argumento lógico. Si es `TRUE', la salida será añadido a `file'; de lo
contrario se sobreescribirá los contenidos de `file'.
• type: Caracter. ¿Las salidas o los mensajes?.
Detalles:
• sink desvía la salida de R a una conexión. si `file' corresponde a una cadena de
caracteres, una conexión de archivo con ese nombre será establecida mientras dure la
desviación.
• 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 también puede desviarse por `type = “message” '.
• `sink()' o `sink(file=NULL)' terminan la última desviación (del tipo
especificado). A partir de la versión R 1.3.0 hay una pila de desviaciones para la
salida normal, así que la salida se revierte a la desviación previa (si había alguna). La
pila es hasta 21 conexiones (20 desviaciones).
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 58/344
58
• si `file' es una conexión será abierta cuando sea necesario. switchear a otro archivo o
conexión cierra y destruye el actual sink connection si éste es una conexión archivo
abierta por una llamada anterior a sink.
Advertencia: No usar una conexión que es abierta por sink para cualquier otro
propósito. El programa lo detendrá a usted cerrando tal conexión inadvertidamente. No
aplicar sink al flujo de mensajes a menos que comprenda el código fuente para
implementación y por tanto las trampas.
Ejemplo: El siguiente ejemplo envía al archivo “c:/sink-examp.txt” los resultados de la
función outer (ver más adelante) entre el llamado de sink y el cierre de ésta con
sink(). Si verificamos en en directorio 'C:\' antes de llamar a unlink, veremos que ha
sido creado el archivo de texto (ver figura 2.4); cuando se desea restablecer el modo normal
de operación, esto es, volver a ver los resultados en la terminal, se da el comando
sink(); luego de nuevo se llama el mismo archivo para anexarle las salidas de un objeto
m (una matriz creada con la función matrix; ver más adelante); cerramos nuevamente la
conexión y con la instrucción unlink(“c:/sink-examp.txt”) es borrado:
>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")
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 59/344
59
Figura 2.4: Datos en “c:/sink-example”
2.4. Construcción, Lectura y Escritura de Tablas de
Contingencia Categóricas
2.4.1 Función ftable Esta función crea y manipula tablas de contingencias categóricas.
ftable(..., exclude = c(NA, NaN), row.vars = NULL,
col.vars = NULL)
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 60/344
60
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:
• ...: Los objetos R a ser interpretados como factores (incluyendo cadenas de
caracteres), o una lista o data frame cuyas componentes pueden ser interpretadas, o un
objeto tabla de contingencia de la clase “table” o “ftable”.
• exclude: Valores a usar en argumento exclude de `factor' cuando se interpretan
objetos como no factores.
• row.vars: Un vector de enteros que da los números de las variables, o un vector de
caracteres dando los nombres de las variables a ser usadas por las filas de las tablas
de contingencias categóricas.
• col.vars: Un vector de enteros dando los números de las variables, o un vector de
caracteres dando los nombres de las variables a ser usadas para las columnas de la
tabla de contingencia categórica.
• x: Un objeto R arbitrario.
• file: Puede ser una cadena de caracters nombrando un archivo o conexión desde la
cual los datos van a ser leídos o a donde van a ser escritos. ` ““ 'indica entradas desde
la consola para leer y salidas a la consola para escribir.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 61/344
61
• sep: Cadena separadora de campos. Los valores en cada línea del archivo están
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 lógico indicando si las cadenas en los datos están entre
comillas dobles.
• row.var.names: Un vector de caracteres con los nombres de las variables fila, en
caso que éstos no puedan ser determinados automáticamente.
• col.vars: Una lista dando los nombres y los niveles de ls variables columna, en caso
que éstos no puedan ser determinados automáticamente.
• skip: El número de líneas en el archivo de datos a ser omitidas antes de comenzar
• la lectura de datos.
• digits: Un entero dando el número de dígitos significativos a ser usados para las
entradas de celda de `x'.
Detalles:
• ftable crea tablas de contingencias categóricas. Como las tablas de contingencias
usuales, éstas contienen los conteos de cada combinación de los niveles de lasvariables (factores) involucrados. Esta información es reordenada como una matriz
cuyas filas y columnas corresponden a la combinaciones únicas de los niveles de las
variables fila y columna (tal como se especificó por `row.vars' y `col.vars'). Las
combinaciones son creadas mediante looping sobre las variables en orden inverso (de
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 62/344
62
modo que los niveles de la variable más a la izquierda varían más lento). Presentando
una tabla de contingencia en esta forma de matriz categórica (por medio de
`print.ftable', que es el método de impresión de los objetos clase “ftable”) es a
menudo preferible para mostrarla como un arreglo un arreglo en alta dimensión.
• ftable es una función genérica. Su método por defecto, ftable.default,
crea primero una tabla de contingencia en forma de arreglo a partir de todos los
argumentos excepto `row.vars' y `col.vars'. Si el primer argumento es de la clase
“table”, representa una tabla de contingencia y es usada como tal; si es una tabla
categórica de clase “ftable”, la información que contiene es convertida a la
representación de arreglo usual usando as.ftable. De lo contrario, los argumentos
deberían ser objetos R los cuales pueden ser interpretados como factores (incluyendo
cadenas de caracteres), o una lista (o data frame) cuyas componentes puedan ser
interpretadas, los cuales son tabulados de forma cruzada usando la función table.
Luego, los argumentos `row.vars' y `col.vars' son usados para plegar la tabla de
contingencia en forma categórica. Si ninguno de estos dos argumentos es dado, la
última variable es usada para las columnas. Si ambos argumentos son dados y suunión es un subconjunto apropiado de todas las variables involucradas, las otras
variables son resumidas.
• La función ftable.formula proporciona método fórmula para crear tablas de
contingencia categóricas.
•
La función as.table.ftable convierte una tabla de contingencia que está en laforma de una matriz categórica a una en la forma de arreglo estándar. Este es un
método para la función genérica as.table.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 63/344
63
• La función write.ftable escribe una tabla categórica a un archivo, lo cual es
útil para generar representaciones ASCII “ pretty” de tablas de contingencias.
• La función read.ftable lee a manera de una tabla de contingencia categórica
desde un archivo. Si el archivo contiene la representación escrita de un tabla
categórica (más precisamente, un encabezado con toda la información de nombres y
niveles de las variables columna, seguidas por una línea con los nombres de las
variables fila) no más argumentos son necesarios. Similarmente, las tablas categóricas
con sólo una variable columna el nombre de la cual es la única entrada en la primera
línea son manipuladas automáticamente. Otras variantes pueden ser tratadas con
omisión de toda información de encabezado usando `skip', y proporcionando los
nombres de las variables fila y los nombres de los niveles de las variables columna
usando row.var.names' y col.vars', respectivamente.
• Notar que las tablas categóricas están caracterizadas por sus presentaciones
recortadas de las etiquetas de filas (puede ser también el caso para las columnas). Si
la “rejilla” completa de los niveles de las variables fila es dado, uno debería usar más 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 combinación de los niveles de las variables con información sobre los nombres y
niveles de las variables (fila y columnas) guardadas como atributos “row.vars” y”col.vars”.
Referencias: Agresti, A. (1990) Categorical data analysis. New York: Wiley.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 64/344
64
Ver también: ftable.formula para interface de fórmula (la cual permite un argumento
`data = .'); table para tabulación cruzada ordinaria; xtabs para tabulación cruzada basada
en fórmula.
Ejemplo: Los siguientes son ejemplos disponibles en el `R Documentation':
#Llamado de una tabla de contingencia
#disponible en el sistema:
data(Titanic)
> Titanic
, , Age = Child, Survived = No
Sex
Class Male Female
1st 0 0
2nd 0 0
3rd 35 17
Crew 0 0
, , Age = Adult, Survived = No
Sex
Class Male Female
1st 118 4
2nd 154 13
3rd 387 89
Crew 670 3
, , Age = Child, Survived = Yes
Sex
Class Male Female
1st 5 1
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 65/344
65
2nd 11 13
3rd 13 14
Crew 0 0
, , Age = Adult, Survived = Yes
Sex
Class Male Female
1st 57 140
2nd 14 80
3rd 75 76
Crew 192 20
>ftable(Titanic, row.vars = 1:3)
Survived No Yes
Class Sex Age
1st Male Child 0 5
Adult 118 57
Female Child 0 1
Adult 4 140
2nd Male Child 0 11
Adult 154 14
Female Child 0 13
Adult 13 80
3rd Male Child 35 13
Adult 387 75
Female Child 17 14
Adult 89 76
Crew Male Child 0 0
Adult 670 192
Female Child 0 0
Adult 3 20
>ftable(Titanic, row.vars = 1:2, col.vars = "Survived")
Survived No Yes
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 66/344
66
Class Sex
1st Male 118 62
Female 4 1412nd Male 154 25
Female 13 93
3rd Male 422 88
Female 106 90
Crew Male 670 192
Female 3 20
>ftable(Titanic, row.vars = 2:1, col.vars = "Survived")
Survived No Yes
Sex Class
Male 1st 118 62
2nd 154 25
3rd 422 88
Crew 670 192
Female 1st 4 141
2nd 13 93
3rd 106 90
Crew 3 20
#Operando sobre un data frame:
> data(mtcars)
> mtcars
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 67/344
67
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 4Merc 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
#Construir tablas de contingencia
#con las variables columna que constituyen
#factores:
x <- ftable(mtcars[c("cyl", "vs", "am", "gear")])
x
gear 3 4 5
cyl vs am
4 0 0 0 0 0
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 68/344
68
1 0 0 1
1 0 1 2 0
1 0 6 16 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
>
ftable(x, row.vars = c(2, 4))
cyl 4 6 8
am 0 1 0 1 0 1
vs gear
0 3 0 0 0 0 12 0
4 0 0 0 2 0 0
5 0 1 0 1 0 2
1 3 1 0 2 0 0 0
4 2 6 2 0 0 0
5 0 1 0 0 0 0
## Agresti (1990), pag. 157, Tabla 5.8.
## Construyendo una tabla pero
##no en la forma estándar:
#Crear un archivo temporal:
file <- tempfile()
#Diseñando la tabla:
cat(" Intercourse\n",
"Race Gender Yes No\n",
"White Male 43 134\n",
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 69/344
69
" 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"
#Ver en la figura 2.5 el resultado
#del siguiente comando:
file.show(file)
#leyendo el archivo "file"
#como una tabla de contingencia:
ft <- read.ftable(file)
ft
Intercourse Yes No
Race Gender
White Male 43 29
Female 134 23
Black Male 26 22
Female 149 36
#Borrando el archivo "file":
unlink(file)
## Agresti (1990), pag. 297, Tabla 8.16.
## faltan los nombres de las variables fila:
file <- tempfile()
cat(" \"Tonsil Size\"\n",
" \"Not Enl.\" \"Enl.\" \"Greatly Enl.\"\n",
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 70/344
70
"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)
Figura 2.5: Resultado de “file.show(file)”: Esta función aplicada sobre el
archivo “ file” abre la ventana R Information, en la cual puede observarse la
estructura de los datos guardados en este archivo temporal .
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 71/344
71
A continuación, 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 años, los cuales están 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), año en que se tomó la prueba (89,92,93) y tipo de electiva (ABS
(razonamiento abstracto), MET (metalmecánica), CON (contabilidad), ING (inglés), ELE
(eléctrica), MEC (razonamiento mecánico)):
#Lectura de los datos, note que
#las variables columna 1, 2, 12
#son definidas como factores:
icfes<-read.table(file="c:/graficosr/datosgraficos/icfes.dat",
header=FALSE,col.names=c("sexo","ano","biolog","Quim","fisica",
"Soc","AptVerb","EspLIter","AptMat","ConMat","Elect","tipoElect"),
as.is=c(1,2,12))
#Construcción de una tabla de
#contingencia categórica de
#sexo, año versus tipo de electiva:
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 093 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
>
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 72/344
72
#Guardando la tabla anterior
#como un objeto R (ver figura 2.6):
dump("icfes.tabla",file="c:/tabla.txt")
#Guardando la misma tabla pero
#sólo como una "pretty table"
"ver figura 2.7:
write.ftable(icfes.tabla,file="c:/tabla2.txt")
Figura 2.6: Datos en “c:/tabla.txt"
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 73/344
73
Figura 2.7: Datos en “c:/tabla2.txt"
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 74/344
74
Capítulo 3: Manipulación de Datos
La manipulación de datos se hace de diferentes formas. Usualmente se toma ventaja de la
vectorización del lenguaje. Esto permite trabajar sobre un conjunto de elementos en lugar
de trabajar elemento a elemento como en lenguajes normales.
3.1. Operadores
• + : Suma
• - : Resta
• * : Multiplicación
• / : División
• ^ : Exponenciación
• %/% : División entera
• %% : Operador módulo
Operadores de comparación
• < : menor
• >: mayor
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 75/344
75
• <= : menor o igual
• >= : mayor o igual
• = = : igual
• != : diferente
Operadores Lógicos
• & : y
• | : ó
• ! : no
• all(...): Todo
• any(...): Ninguno
Operadores de Control
• && : Si el primer operando es cierto se evalúa el segundo operando
• || : Si el primer operando es falso se evalúa el segundo operando.
Operaciones Básicas: Siendo el lenguaje vectorizado, los vectores pueden usarse en
expresiones aritméticas, en cuyo caso las operaciones son ejecutadas elemento a elemento.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 76/344
76
Si x y z son vectores, no necesariamente de la misma dimensión, entonces podemos
ejecutar los siguientes comandos
> y<-x+z
> y2<-x-z
> y3<-2*x+z-3
La dimensión de y , y2 y y3 será igual a la dimensión mayor de los vectores x y z.
> y4<-1/x
El anterior comando produce un vector cuyos elementos corresponden a los inversos de x.
Subíndices
Datos pueden ser extraídos de un objeto de la siguiente forma:
x[ subindice]
La forma del subíndice puede expresarse de varias formas.
• Enteros positivos:
x[1] Solo nos quedamos con el primer elemento de x
x[1:3]
Solo nos quedamos con los tres primeros elementos de x
x[2:5] Solo nos quedamos con elementos 2, 3, 4, y 5 de x
• Valores lógicos:
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 77/344
77
x[x > 0] Sólo 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:
x[-1] Nos quedamos con todo x pero eliminamos el primer elemento.
Ejemplo: Los siguientes datos corresponden a información tomada del anuario estadístico
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 categórica 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.316: 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.8181: 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
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 78/344
78
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"
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 79/344
79
[97] "Alta" "Alta" "Alta"
3.1.1 Funciones que producen escalares
Existen una gran cantidad de funciones que al ser aplicadas a un vector producen como
resultado un escalar. Entre ellas tenemos:
• max(): retorna el máximo del argumento
• min(): retorna el mínimo del argumento
• sum(): retorna la suma de todos los elementos del argumento
• mean(): retorna el promedio aritmético de todos los elementos del argumento.
• 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.
• median(): retorna la mediana del argumento
• quantile(...,probs=c(...)): retorna quantiles del argumento con la proporción o
proporciones indicadas en `probs'.
• prod(): retorna el producto de todos los elementos del argumento
• length(): retorna el número de elementos del argumento si este es una lista o vector.
• ncol(): número de columnas si el argumento es una matriz
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 80/344
80
• nrow(): número de filas si el argumento es una matriz
Ejemplo:
> x<-rexp(20)
> x
[1] 0.65699969 4.38423147 1.39088864 1.82778784 0.07063072 0.16763033 0.26055624 0.13914072
[9] 0.19467512 1.43806059 0.33195089 0.53713890 1.03220040 1.64537448 0.76489143 0.77907097
[17] 0.08561684 0.01892189 0.53475832 2.32819674
> 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
La función summary nos proporciona los estadísticos básicos del argumento:
> s<-summary(x)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.01892 0.18790 0.59710 0.92940 1.40300 4.38400
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 81/344
81
> 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
3.1.2 Funciones para redondeo de números
En R existen las siguientes seis funciones para el redondeo de números:
• ceiling: Tiene un único argumento: un valor o un vector `x'; devuelve en este
último caso un vector numérico que contiene los enteros más pequeños no menoresque los correspondientes elementos de `x'.
• floor: Costa de un sólo argumento numérico `x' y devuelve un vector numérico
que contiene los enteros más grandes no mayores que los correspondientes elementos
de `x'.
• round: Redondea los valores en su primer argumento al número especificado delugares decimales (por defecto 0). Para completar un 5, se usa el estándar IEEE,
“llevar al dígito par ”. Por tanto, round(0.5) es 0 y round(-1.5) es -2.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 82/344
82
• signif: Redondea los valores en su primer argumento al número especificado de
dígitos significativos.
• trunc: Toma un único argumento numérico `x' y devuelve un vector numérico que
contiene los enteros truncando los valores en `x' hacia 0.
• zapsmall: Determina un argumento `digits' `dr' para llamar a round(x,
digits = dr) tal que los valores cercanos a cero son “zapped”, es decir, tratados
como 0.
ceiling(x)
floor(x)
round(x, digits = 0)
signif(x, digits = 6)
trunc(x)
zapsmall(x, digits= getOption("digits"))
Argumentos:
• x: Un vector numérico.
• digits: Entero que indica la precisión a ser usada.
Ejemplos:
> a<-(.5 + -2:4)
> a
[1] -1.5 -0.5 0.5 1.5 2.5 3.5 4.5
> round(a)
[1] -2 0 0 2 2 4 4
> ceiling(a)
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 83/344
83
[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
3.1.3 Funciones relacionadas con distribuciones
En R podemos calcular densidades, probabilidades acumuladas, hallar cuantiles y generar
números aleatorios de la siguiente manera:
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 84/344
84
Distribución Densidad Función Acumulada
Uniforme dunif(x,min=0,max=1,log = FALSE) punif(q,min=0,max=1, lower.tail =
TRUE,log.p = FALSE)
Normal dnorm(x, mean=0, sd=1, log =
FALSE)
pnorm(q, mean=0, sd=1, lower.tail =
TRUE, log.p = FALSE)
Binomial dbinom(x, size, prob, log = FALSE) pbinom(q, size, prob, lower.tail =
TRUE, log.p = FALSE)
Lognormal dlnorm(x, meanlog = 0, sdlog = 1,
log = FALSE)
plnorm(q, meanlog = 0, sdlog = 1,
lower.tail = TRUE, log.p = FALSE)
Beta dbeta(x, shape1, shape2, ncp=0,
log = FALSE)
pbeta(q, shape1, shape2, ncp=0,
lower.tail = TRUE, log.p = FALSE)
Geométrica dgeom(x, prob, log = FALSE) pgeom(q, prob, lower.tail = TRUE,
log.p = FALSE)
Gamma dgamma(x, shape, scale=1, log =
FALSE)
pgamma(q, shape, scale=1, lower.tail =
TRUE, log.p = FALSE)
Ji cuadrado dchisq(x, df, ncp=0, log = FALSE) pchisq(q, df, ncp=0, lower.tail =
TRUE, log.p = FALSE)
Exponencial dexp(x, rate = 1, log = FALSE) pexp(q, rate = 1, lower.tail = TRUE,
log.p = FALSE)
F df(x, df1, df2, log = FALSE) pf(q, df1, df2, ncp=0, lower.tail =
TRUE,log.p = FALSE)
Hipergeom. dhyper(x, m, n, k, log = FALSE) phyper(q, m, n, k, lower.tail = TRUE,
log.p = FALSE)
t dt(x, df, log = FALSE) pt(q, df, ncp=0, lower.tail = TRUE,
log.p = FALSE)
Poisson dpois(x, lambda, log = FALSE) ppois(q, lambda,lower.tail = TRUE,
log.p = FALSE)
Weibull dweibull(x, shape, scale = 1, log
= FALSE)
pweibull(q, shape, scale = 1,
lower.tail = TRUE, log.p = FALSE)
Binom. Neg. dnbinom(x, size, prob, mu, log =
FALSE)
pnbinom(q, size, prob, mu, lower.tail
= TRUE, log.p = FALSE)
Donde:
• x, q: Es un vector de cuantiles.
• p: Vector de probabilidades.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 85/344
85
• log, log.p: Argumentos lógicos; si son TRUE, las probabilidades p son dadas como
log(p).
• lower.tail: Argumento lógico; si es TRUE (por defecto), las probabilidades
corresponden a P[X <= x], de lo contrario, P[X > x].
• min,max: En la distribución uniforme corresponde a los límites inferior y superior
de la distribución. Por defecto son 0 y 1.
• size: En la binomial, corresponde al número de intentos; en la binomial negativa
corresponde al número de intentos exitosos (o número de éxitos) objetivo.
• prob: En la binomial, binomial negativa y en la geométrica, corresponde a la
probabilidad de éxito en cada intento.
• meanlog, sdlog: En la Log normal, media y desviación estándar de la distribución
en escala log con valores por defecto de 0 y 1 respectivamente.
• shape1, shape2: Parámetros positivos de la distribución Beta.
• shape, scale: En las distribuciones Gamma y Weibull, parámetros de forma y
escala.
•
ncp: En las distribuciones Ji cuadrado, F y t, corresponde a parámetro de nocentralidad.
• rate: En la distribución exponencial, es un vector de tasas . Su valor por defecto es
1.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 86/344
86
• df: En las distribuciones t y Ji son los grados de libertad.
• df1, df2: Grados de libertad del numerador y del denominador en la distribución F.
Detalles:
• La Hazard acumulada de la distribución log normal H(t) = - log(1 - F(t))
se calcula con -plnorm(t, r,lower = FALSE, log = TRUE)
• La distribución geométrica tiene densidad p(x) = p(1-p)x para x = 0, 1, 2, ...
donde X corresponde al número de fracasos antes de que ocurra el primer éxito.
• La densidad de la distribución Beta es de la forma (((( ))))(((( )))) (((( ))))
(((( ))))11 1
baa b
x x a b
+ + + +
• La distribución Gamma tiene densidad de la forma (((( ))))(((( ))))
1 /1 a x s
a f x x e
s a
====
, shape =
a y scale = s. Para x>0, a>0, s>0. La media y la varianza son E(X) =
as y Var(X) = as2
• La Hazard acumulada H(t)=-log(1-F(t)) se calcula con -pgamma(t, ...,lower =
FALSE, log = TRUE) .
• La distribución Ji cuadrado con df=n grados de libertad tiene densidad
(((( ))))(((( ))))
/ 2 1 / 2/ 2
1
2 / 2n x
n n f x x e
n
====
para x>0, con media y varianza n y 2n respectivamente.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 87/344
87
• La distribución Ji cuadrado con df=n grados de libertad y parámetro de no
centralidad ncp= tiene densidad (((( ))))(((( ))))
(((( ))))/ 2
0
/ 2, 2!
r
r f x e dchisq x df r r
===== += += += + para x 0.
Esta es la distribución de la suma de los cuadrados de n normales cada una con
varianza 1, donde es la suma de los cuadrados de las medias de las normales.
• La distribución exponencial con tasa tiene densidad (((( )))) f x e
==== para x0.
• La Hazard acumulada de la distribución exponencial H(t)=-log(1-F(t)) se
calcula con -pexp(t,r,lower.tail=FALSE,log=TRUE).
• La distribución F es la distribución de la razón de los cuadrados medios de n1 y n2
normales estándar independientes y por tanto es la razón de dos variables aleatorias Ji
cuadrados cada una dividida por sus grados de libertad. De aquí que la razón de una
normal y la raíz del cuadrado medio de m normales independientes tiene una
distribución Student'sm
t .
• La distribución F no central es la razón de los cuadrados medios de normales
independientes de varianza unitaria, pero las que están en el numerador pueden tener
medias no nulas y el ncp corresponde a la suma de los cuadrados de las medias.
• La densidad de la distribución hipergeométrica con parámetros m, n y k es
(((( ))))m n m n
p x
x k x k
++++ ====
para max(0,k-n) x min(m,k)
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 88/344
88
• La distribución t no central con parámetros (df, ncp) es definida como la
distribución de(((( )))) (((( )))) (((( )))), /
U ncp
T df ncp df df
++++====
, donde U y X(df) son variables aleatorias
independientes, con U~N(0,1) y X2(df)~2.
• La densidad de la distribución Weibull con parámetros de forma shape=a y de
escala scale=b corresponde a (((( )))) (((( )))) (((( )))) (((( ))))1 // /aa x b
f x a b x b e
==== para x>0. La Hazard
acumulada H(t)=-log(1-F(t)) se calcula con -
pweibull(t,a,b,lower=FALSE, log=TRUE) la cual corresponde a
H(t)=(t/b)a.
• La distribución binomial negativa con size=n y prob=p tiene densidad
(((( )))) (((( )))) (((( ))))(((( )))) (((( ))))/ ! 1x n p x x n n x bp p = + = + = + = + para x = 0, 1, 2, .... Esta representa el
número de fallas las cuales ocurren en una secuencia de intentos bernoullis antes de
que un número de éxitos objetivo sea alcanzado. Una distribución binomial negativa
se deriva como una mezcla de distribuciones poisson con media distribuída como una
gamma con parámetro de escala (1 - prob)/prob y de forma size (esta
definición permite valores no enteros para size ). En este modelo
prob=scale/(1+scale) y la media es size*(1 - prob)/prob).
Distribución Cuantiles Números Aleatorios
Uniforme qunif(p; min=0; max=1;lower.tail = TRUE;log.p
= FALSE)
runif(n; min=0; max=1)
Normal qnorm(p; mean=0; sd=1; lower.tail =
TRUE;log.p = FALSE)
rnorm(n; mean=0; sd=1)
Binomial qbinom(p; size; prob; lower.tail = TRUE;
log.p = FALSE)
rbinom(n; size; prob)
Lognormal qlnorm(p; meanlog = 0; sdlog = 1; lower.tail
= TRUE; log.p = FALSE)
rlnorm(n; meanlog = 0; sdlog
= 1)Beta qbeta(p; shape1; shape2; lower.tail = TRUE;
log.p = FALSE)
rbeta(n; shape1; shape2)
Geométrica qgeom(p; prob; lower.tail = TRUE; log.p =
FALSE)
rgeom(n; prob)
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 89/344
89
Distribución Cuantiles Números Aleatorios
Gamma qgamma(p; shape; scale=1; lower.tail = TRUE;
log.p = FALSE)
rgamma(n; shape; scale=1)
JI cuadrado qchisq(p; df; ncp=0; lower.tail = TRUE; log.p
= FALSE)
rchisq(n; df; ncp=0)
Exponencial qexp(p; rate = 1; lower.tail = TRUE; log.p =
FALSE)
rexp(n; rate = 1)
F qf(p; df1; df2;lower.tail = TRUE; log.p =
FALSE)
rf(n; df1; df2)
Hipergeom. qhyper(p; m; n; k; lower.tail = TRUE; log.p =
FALSE)
rhyper(nn; m; n; k)
t qt(p; df;lower.tail = TRUE; log.p = FALSE) rt(n; df)
Poisson qpois(p; lambda; lower.tail = TRUE; log.p =
FALSE)
rpois(n; lambda)
Weibull qweibull(p; shape; scale = 1; lower.tail =
TRUE; log.p = FALSE)
rweibull(n; shape; scale =
1)Binom.Neg. qnbinom(p; size; prob; mu; lower.tail = TRUE;
log.p = FALSE)
rnbinom(n; size; prob; mu)
Donde:
• p: Es un vector de probabilidades (acumuladas).
• n: Número de observaciones, excepto para la hipergeométrica, donde nn corresponde a tal. Si la longitud de n es mayor que 1, la longitud es tomada como el
número requerido.
3.2. Ejecuciones Condicionales y Loops (Flujos de
Control)
El lenguaje permite la construcción de condiciones para el control del flujo como cualquier
lenguaje de programación. Son las construcciones de flujo de control básicos del lenguaje
R. Son similares a los argumentos de control de cualquier lenguaje algorítmico:
if(cond) expr
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 90/344
90
if(cond) cons.expr else alt.expr
for(var in seq) expr
while(cond) exprrepeat expr
break
next
if....else
El uso de este condicional es el siguiente:
> if(expresion 1) expresion 2 else expresion 3
donde si la expresión 1 es cierta se evalúa la expresión 2. En caso contrario se evalúa la
expresión 3. Si la expresión 2 ó expresión 3 son complejas, esto es, tienen más de un
comando entonces deben encerrarse entre llaves:
> if(expresion 1) {
...comandos R... }else {
...comandos R... }
Cuidado:
En lenguajes vectorizados se pueden cometer errores que son difíciles de detectar. Por
ejemplo supongamos que tenemos la variable sexo codificada como (1, 2) y supongamos
que deseamos recodificarla a (1, 0). La siguiente instrucción, que en su estructura es similar
a la que utilizan muchos lenguajes, produce un error:
>if(sexo==2) sexo<-0 else sexo<-1
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 91/344
91
Una solución es la siguiente:
> sexo1<-rep(NA, length(sexo))> sexo1[sexo==2]<-0
> sexo1[sex!=2]<-1
Otra solución es utilizar la función ifelse()
> sexo<-ifelse(sexo==2,0,1)
Si el conjunto de acciones a realizar mientras se cunpla la condición de if(....)
son
complejas (o también para el caso alterno else (...) ), procedemos como sigue:
if(...){
.
.
.
}
else{
.
.
.
}
Colocando entre llaves los pasos u operaciones requeridas en cada caso.
Ejemplo:
Supongamos que se lanza un dado cargado de forma que los pares son dos veces más
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:
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 92/344
92
#Creación de una función
#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
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 93/344
93
[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
#Construir tabla de frecuencias:
> a<-table(result[,2])
> a
1 2 3 4 5 6
120 237 108 202 121 212
#Graficar frecuencias:
> barplot(a,space=0)
Función ifelse
Como ya se dijo previamente, el uso de if está limitado a expresiones que no sean
vectores. Si estamos evaluando vectores o matrices entonces lo indicado es hacerlo con
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 94/344
94
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.
ifelse(test, yes, no)
Argumentos:
• test: Es un vector lógico o condición lógica a ser evaluada.
• yes: Devuelve valores para los elementos ciertos de `test'.
• no: Devuelve valores para los elementos falsos de `test'.
Ejemplos:
x <- c(6:-4)
>sqrt(x)#Produce advertencia
[1] 2.449490 2.236068 2.000000 1.732051 1.414214 1.000000 0.000000 NaN
[9] NaN NaN NaN
Warning message:
NaNs produced in: sqrt(x)
> sqrt(ifelse(x >= 0, x, NA))#No produce advertencia
[1] 2.449490 2.236068 2.000000 1.732051 1.414214 1.000000 0.000000 NA
[9] NA NA NA
> ifelse(x >= 0, sqrt(x), NA)#produce advertencia
[1] 2.449490 2.236068 2.000000 1.732051 1.414214 1.000000 0.000000 NA
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 95/344
95
[9] NA NA NA
Warning message:
NaNs produced in: sqrt(x)
Generar 100 observaciones de una distribución normal estándar y determinar cuántas están
dentro de dos desviaciones estándar 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
Para loops el R proporciona varias formas. La más usada es
> for( nombre in expresion1) expresion 2
nombre es una variable de control del loop. expresión1 es un vector, por ejemplo del
tipo 1:20; y expresión2 usualmente es un conjunto agrupado de instrucciones a ser
repetidas a medida que cambie la variable que controla el loop.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 96/344
96
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 operación iterativa mucha memoria puede ser utilizada (no
necesariamente por un número grande de iteraciones, con números tan pequeños como 10
puede ocurrir). Esto causa que el computador se quede sin memoria o que se presente un
uso intensivo del disco duro. Otro síntoma, cuando se trabaja en estaciones con posibilidad
de realizar múltiples tareas simultáneamente 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; además 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)
#Determinación 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))
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 97/344
97
[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 función mean() o con sum() .
2. Codifique la iteración básica en Fortran o C y llámela desde el programa. Esto
requiere un esfuerzo extra de programación y puede no funcionar en algunas
plataformas.
Otras funciones para controlar loops son
>repeat expresion
y el comando
> while(condicion) expresion
En el siguiente ejemplo, se estima el número de unidades de reserva a emplear en unsistema compuesto por una unidad principal y n de reserva (las reservas se utilizan una a
una a medida que vayan fallando) cada una con un tiempo Ti, i=1,2,...,Tn+1 de vida
distribuído weibull con parámetro de forma a y de escala b, de manera que la probabilidad
de que el sistema opere por más de “t” unidades de tiempo sea al menos cierta cantidad
0<<1; es decir P(>t). El tiempo de vida del sistema es =T1 +T2 +...+Tn+1
con Ti~weibull(a,b), Supongamos que t=2, a=2, b=0.5, =0.9:
#iniciar un contador en 0
k<-0
#Definir valores para
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 98/344
98
#los parámetros
t<-2
a<-2b<-0.5
gamma<-0.9
#inicializar la probabilidad
#buscada, con un valor de cero.
p.est.n<-0
#Determinar por simulación
#valores aleatorios de la variable tau
#para nro. de reservas=0,1,2,...hasta
#el primer valor de n que cumpla la condición
#de p(tau>t)>=gamma. A partir de 1000
#muestras de tamaño 100 :
nsim<-1000
ksim<-100
while(p.est.n<gamma){
k<-k+1
conta<-0
#Repetir nsim veces la generación 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){
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 99/344
99
T<-rweibull(k,shape=a,scale=b)
tau.obs[j]<-sum(T)
}#Conteo por cada muestra de tamaño 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 función append) cuyos elementos
# se van incrementado hasta que el valor de k
# es tal que la propoción 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
De acuerdo a lo anterior, se requieren 6 unidades de reserva para garantizar que la
probabilidad de que el sistema opere más de 2 unidades de tiempo.
3.2.1 Cómo parar ciclos: La función stop()
La función stop() sirve para abortar un procedimiento para el que se cumpla alguna
condición particular. Detiene la ejecución de la expresión actual, imprime el mensaje dado
como argumento, y luego ejecuta una acción de error.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 100/344
100
stop(message = NULL, call. = TRUE)
Argumentos:
• message: un vector de caracteres de longitud 1 o `NULL'.
• call.: Argumento lógico que indica si la llamada será parte del mensaje de error.
Ejemplo:
> for(i in 1:100){
+ temp<-rnorm(1)
+ if(temp>2) stop('Se logra un numero mayor que 2')
+ }
Error: Se logra un numero mayor que 2
>
3.3. Objetos en R
La información es manipulada en R es en forma de objetos. Ejemplos de objetos son
vectores de valores numéricos (reales) o valores complejos, vectores de valores lógicos y
vectores de caracteres. Estos son conocidos como estructuras “atómicas” ya que sus
componentes son todos del mismo tipo o modo. Las mismas funciones del R son objetos. R
también opera con objetos llamados listas, que son del modo lista. Estos son secuencias
ordenadas de objetos que individualmente pueden ser de cualquier tipo.
3.3.1 Función append
Esta función permite agregar elementos a un vector o unir vectores.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 101/344
101
append(x, values, after=length(x))
Argumentos:
• x: El vector a ser modificado.
• values: Valores a ser incluídos en el vector modificado.
• after: Un subíndice, después del cual los valores van a ser agregados.
• Valor: Esta función genera un vector que contiene los valores en `x' con los
elementos de `values' agregados después 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
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 102/344
102
[3,] 3.8524993
[4,] 1.8882795
[5,] 1.1236463[6,] 1.3654229
[7,] 0.7593380
[8,] 0.3170737
[9,] 1.9335677
[10,] 1.1592543
#Formar un nuevo vector con
#los vectores a y b
> t<-append(a,b)
> t[1] 0.750172910 -0.626747997 0.776044312 1.054390254 -0.093146289
[6] -0.435600090 -0.327977143 1.589835229 0.431930587 0.812786494
[11] 0.206826698 0.615974670 0.357283118 0.290794746 0.342937697
[16] 0.105532442 0.088188337 0.006005927 1.176917191 0.215131458
#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
#repitamos 100 veces este proceso
#veamos la distribución de la
#variable x: No. de valores de una poisson
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 103/344
103
#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 función 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]
#construcción de una tabla
#de frecuencias para x:
table(x)x
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
#Construcción de un diagrama de
#barras para la distribución de
#frecuencias de x:
> barplot(table(x),space=0,main="Distribución muestral de X\nNúmero de
valores poisson generados\nhasta el primer valor >=2",
xlab="X",ylab="Frecuebcias")
>
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 104/344
104
La distribución de frecuencias de la variable x del último experimento está representada en
la figura.3.1.
Figura 3.1: La variable aleatoria X de este experimento tiene una distribución
geométrica.
Un tipo de objeto importante en R es el arreglo de doble entrada, u objeto matriz . Para
crear una matriz usamos la función matrix(). Toma como argumentos un vector y dos
números que especifican las filas y las columnas. Por ejemplo:
> matrix(1:16,nrow=4,ncol=4)
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 105/344
105
crea una matrix de 4 × 4 con los enteros desde el 1 hasta el 16. Si queremos llenar la
matriz “ por filas”, usamos la opción byrow=T en matrix . En el ejemplo
anterior pudimos haber escrito
> matrix(1:16,ncol=4,byrow=T)
3.3.2 Función matrix, is.matrix, as.matrix
En R es posible crear matrices y convertir data frames en matrices utilizando:
• matrix Crea una matriz desde un conjunto de valores dado.
• as.matrix Intenta convertir su argumento en una matriz.
• is.matrix Prueba si su argumento es una matriz (estricta).
matrix(data = NA, nrow = 1, ncol = 1,byrow = FALSE, dimnames = NULL)
as.matrix(x)
is.matrix(x)
Argumentos:
• data: Un vector opcional de datos.
• nrow: El número deseado de filas.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 106/344
106
• ncol: El número deseado de columnas.
• byrow: Argumento lógico. 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.
• dimnames: Un atributo `dimnames' para la matriz, es decir, una lista (`list') de
longitud 2 dando los nombres de la dimensión correspondiente a las filas y de la
dimensión correspondiente a las columnas (no son los nombres de los niveles de cada
una de estas dos dimensiones).
• x: Un objeto R.
Detalles:
• Si `nrow' o `ncol' no es dado, el programa intenta inferirlo a partir de la longitud de`data' y el otro parámetro.
• is.matrix devuelve `TRUE' si `x' es una matriz (es decir, si no es una
`data.frame' y tiene un atributo `dim' de longitud 2) y `FALSE' en caso contrario.
Ver también: data.matrix .
Ejemplos:
is.matrix(as.matrix(1:10))
[1] TRUE
data(warpbreaks)
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 107/344
107
> warpbreaks
breaks wool tension
1 26 A L2 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 M12 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 H22 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 L32 29 B L
33 31 B L
34 41 B L
35 20 B L
36 44 B L
37 42 B M
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 108/344
108
38 26 B M
39 19 B M
40 16 B M41 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 H51 15 B H
52 15 B H
53 16 B H
54 28 B H
#Determinando la estructura del objeto R
> str(warpbreaks)
`data.frame': 54 obs. of 3 variables:
$ breaks : num 26 30 54 25 70 52 51 26 67 18 ...
$ wool : Factor w/ 2 levels "A","B": 1 1 1 1 1 1 1 1 1 1 ...$ tension: Factor w/ 3 levels "L","M","H": 1 1 1 1 1 1 1 1 1 2 ...
#usando as.matrix.data.frame(.) method:
> str(as.matrix(warpbreaks))
chr [1:54, 1:3] "26" "30" "54" "25" "70" "52" "51" "26" "67" "18" "21" ...
- attr(*, "dimnames")=List of 2
..$ : chr [1:54] "1" "2" "3" "4" ...
..$ : chr [1:3] "breaks" "wool" "tension"
> 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"
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 109/344
109
[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"
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 110/344
110
[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"
3.3.3 Función data.matrix
Permite construir una matriz convirtiendo todas las variables en un data frame a un modo
numérico y entonces pegarlos juntos como las columnas de una matriz. Los factores y los
factores ordenados son reemplazados por sus códigos.
data.matrix(frame)
Argumentos:
• frame: Un data frame cuyos componentes son bien sea vectores lógicos, factores o
vectores numéricos.
Ver también: as.matrix, codes, data.frame, matrix.
Ejemplo:
> data.matrix(warpbreaks)
breaks wool tension
1 26 1 2
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 111/344
111
2 30 1 2
3 54 1 2
4 25 1 25 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 315 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 125 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 235 20 2 2
36 44 2 2
37 42 2 3
38 26 2 3
39 19 2 3
40 16 2 3
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 112/344
112
41 39 2 3
42 28 2 3
43 21 2 344 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 154 28 2 1
3.3.4 Función list
Otro objeto con el que trabaja R es el objeto lista , es el más general y flexible para
guardar datos. Una lista es una colección 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 números. Se puede crear una lista con la función 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)
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 113/344
113
alist(...)
Argumentos:
• ...: Objetos.
• x: Objeto R a ser forzado o probado como lista.
Detalles:
• La mayoría de las listas en R internamente son vectores genéricos, mientras que las
listas de pares punteadas tradicionales (como en LISP) están aún disponibles.
• Los argumentos para list o pairlist son de la forma `value' o `tag=value'.
Las funciones devuelven una lista compuesta de sus argumentos con cada valor ya
sea etiquetadas o no etiquetadas, dependiendo de cómo fue especificado el
argumento.
• alist es como list , excepto en la manipulación de los argumentos etiquetados
sin valor. Estos son manejados como si ellos describieran los argumentos de una
función sin valor por defecto. En tanto que list simplemente los ignora.
• as.list intenta forzar su argumento al tipo lista. Para funciones, ésta devuelve la
concatenación de la lista de los argumentos formales y el cuerpo de la función. Para
expresiones, la lista de llamadas componentes es devuelta.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 114/344
114
• is.list devuelve un `TRUE' si y sólo sí su argumento es un `list' o un `pairlist' de
longitud mayor que 0, mientras que is.pairlist sólo retorna un `TRUE' en el
último caso.
• Un pairlist vacío, pairlist() es igual a `NULL'. Esto es diferente de list().
Ver también: vector(., mode="list") , c para concatenación; formals.
Ejemplos:
> x<-list(a=1:10, b=c(“manzana”, “pera”))
nos crea una lista, llamada x , que tiene componentes a y b. a es un vector de números
y b es un vector de caracteres. Observe que los componentes tienen un número diferente
de componentes. Si queremos hacer referencia al componente a del objeto x escribimos
x$a.
> x$a
nos mostrará los elementos de a . Veamos otros ejemplos:
data(cars)
#Crear una estructura
#para graficación
pts <- list(x=cars[,1], y=cars[,2])
#graficar los valores de
#cars[,2] vs. cars[,1]
plot(pts)
#Listar Argumentos
> f <- function(x,y)sin(x)*exp(-y)
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 115/344
115
>list(f)
[[1]]
function(x,y)sin(x)*exp(-y)
> t<-pairlist(f)
>t
[[1]]
function(x,y)sin(x)*exp(-y)
#Forzar un objeto R como lista
> as.list(f)
$x
$y
[[3]]
sin(x) * exp(-y)
#Verificar si un objeto R es una lista
> is.list(as.list(f))
[1] TRUE
> is.list(f)
[1] FALSE
#creando listas con objetos R
> a<-c("manzanas","naranjas","peras")
> b<-c(100,140,50)
> n<-list(frutas=a,cantidad=b)
>n
$frutas
[1] "manzanas" "naranjas" "peras"
$cantidad[1] 100 140 50
> m<-pairlist(frutas=a,cantidad=b)
> m
$frutas
[1] "manzanas" "naranjas" "peras"
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 116/344
116
$cantidad
[1] 100 140 50
#invocando una componente de una lista
> n$cantidad
[1] 100 140 50
> n[1]
$frutas
[1] "manzanas" "naranjas" "peras"
#Forzando a ser lista
> 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"
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 117/344
117
[[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.
3.3.5 Función unlist
Dada una estructura `x' tipo lista, esta función la simplifica para producir un vector que
contiene todos los componentes atómicos que ocurren en `x'.
unlist(x, recursive = TRUE, use.names = TRUE)
Argumentos:
• x: Una lista o vector.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 118/344
118
• recursive: Argumento lógico. ¿Debería unlisting ser aplicado para listar las
componentes de `x'?
• use.names: Argumento lógico. ¿Deberían preservarse los nombres?.
Detalles:
• Si `recursive = FALSE', la función no se repite más allá de los items de
primer nivel en `x'.
• `x' puede ser un vector, pero entonces unlist no hace nada útil, ni siquiera quita
los nombres.
• Por defecto, unlist intenta retener información de denominación presente en `x'.
Si `use.names = FALSE' toda la información de denominación es quitada.
• Donde es posible los elementos de la lista son forzados a un modo común durante el
unlisting, y así a menudo terminan como un vector de caracteres.
• Una lista es un vector genérico, y el vector simplificado debe aún ser una lista (y debe
ser incambiable). Elementos no vectoriales de la lista (tales como nombres, fórmulas)
no son forzados, y así una lista contiene uno o más de estos restos de una lista.
Ver también: `c', `as.list'.
Ejemplos:
>a<-c("manzanas","naranjas","peras")
>b<-c(100,140,50)
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 119/344
119
> n<-list(frutas=a,cantidad=b)
#Descomponiendo la lista#note que en este caso la función
#forza a todos los elementos
#a ser caracteres
> unlist(n)
frutas1 frutas2 frutas3 cantidad1 cantidad2 cantidad3
"manzanas" "naranjas" "peras" "100" "140" "50"
#Eliminando los nombres de
#las componentes
> unlist(n,use.names=FALSE)[1] "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 servicio20.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
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 120/344
120
3.3.6 Función data.frame
Estas funciones crean o manipulan data frames, colecciones de variables conectadas
fuertemente las cuales comparten muchas de las propiedades de las matrices y listas, usados
como la estructura fundamental de datos por la mayoría del software de modelación de R.
data.frame(..., row.names = NULL, check.rows = FALSE,
check.names = TRUE)
as.data.frame(x, row.names = NULL, optional)is.data.frame(x)
row.names(x)
row.names(x) <- names
print(x, ..., digits = NULL, quote = FALSE, right = TRUE)
plot (x, ...)
Argumentos:
• ...: Estos argumentos son o de la forma `value' o de la forma tag=value'. Los
nombres de las componentes son creados con base en la etiqueta (si existe) o del
argumento suministrado por sí mismo.
• row.names: Un vector de caracteres dando los nombres de las filas para el data
frame.
• check.rows: Argumento lógico. Si es `TRUE' entonces las filas son revisadas para
verificar la consistencia de la longitud y los nombres.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 121/344
121
• check.names: rgumento lógico. Si es `TRUE' entonces los nombres de las variables
en el data frame son revisados para asegurar que son nombres de variables
sintácticamente válidos. Si es necesario ellos son ajustados (por medio de
`make.names') para que lo sean.
• data.frame.obj: Objetos de clase `data.frame'.
• ...: Argumentos opcionales para los métodos `print' o `plot'.
• optional: Argumento lógico. Si es `TRUE', ajustar los nombres de fila es opcional.
Detalles:
• Variables no numéricas sometidas a data.frame son convertidas a columnas
factor a menos que sean protegidas por `I' (ver función `I'). Esta aplica a variables
caracter y variables lógicas, en particular. También aplica para agregar columnas a
un data frame.
• 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 excepción de
matrices de la clase `model.matrix'.
Valor:
• Para `data.frame(.)' un data frame, una estructura como matricial cuyas
columnas pueden ser de diferentes tipos (numéricos, tipo factor y caracteres).
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 122/344
122
• `as.data.frame' es una función genérica con muchos métodos. Intenta forzar
su argumento para que sea un data frame.
• `is.data.frame' devuelve un `TRUE' si su argumento es un data frame y un
valor de `FALSE' de lo contrario.
• `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 función genérica
que llama a `rownames' para algún argumento de array .
Ejemplos:
#creación de un data frame
#que contiene tres variables
#x, y, fac
>L3 <- LETTERS[1:3]
> d <- data.frame(cbind(x=1, y=1:10), fac=sample(L3, 10, repl=TRUE))
> d
x y fac
1 1 1 A
2 1 2 A
3 1 3 C
4 1 4 C
5 1 5 A
6 1 6 C
7 1 7 C
8 1 8 C
9 1 9 C
10 1 10 A
#llamada de una variable componente
#del dataframe
> d$x
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 123/344
123
[1] 1 1 1 1 1 1 1 1 1 1
#manipulación de datos#en variables numéricas del
#dataframe
> mean(d$x)
[1] 1
> mean(d$y)
[1] 5.5
#Creación de un dataframe con nombres de
#columnas automáticos
> e<-data.frame(cbind( 1, 1:10),sample(L3, 10, repl=TRUE))> e
X1 X2 sample.L3..10..repl...TRUE.
1 1 1 C
2 1 2 B
3 1 3 A
4 1 4 A
5 1 5 A
6 1 6 C
7 1 7 B
8 1 8 B9 1 9 A
10 1 10 C
#forzando un objeto R a data frame
> as.data.frame((cbind(x=1, y=1:10)))
x y
1 1 1
2 1 2
3 1 3
4 1 45 1 5
6 1 6
7 1 7
8 1 8
9 1 9
10 1 10
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 124/344
124
3.3.7 Removiendo Objetos
Si objetos viejos no son removidos, eventualmente, el sistema podría copar el disco duro
con estos objetos y colapsar. Por esto es necesario hacer una labor de limpieza
regularmente. Dentro de una sesión R se deben eliminar los objetos que no se utilizarán
nuevamente. Para hacer esto se usa la función rm() . El argumentos de esta función 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 función objects() ó ls(), cuyo resultado es una
lista de los objetos presentes.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 125/344
125
Capítulo 4: Creación 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 automáticamente 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.
function( arglist ) expr
return(value)
Argumentos:
• arglist: Vacío o uno o mas nombres separados por comas indicando los argumentos
de la función o términos del tipo nombre=expresión.
• value: Una expresión o una serie de expresiones separadas por comas.
Detalles
• En R los nombres en una lista de argumentos no pueden estar entre comillas ni ser
nombres estándar.
• 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.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 126/344
126
Ver también: args y body para accesar a los argumentos y al cuerpo de una función.
Más detalladamente, La sintaxis para escribir funciones es la siguiente:
> mi.funcion<-function(argumento1,argumento2,...)
...Instrucciones en R...
Si sólo tenemos una línea de instrucciones las llaves no son necesarias. Por ejemplo si
queremos crear una función 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 función que calcule el coeficiente de asimetría 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 cómo está definida una función damos su nombre
simplemente sin paréntesis.
En caso de tener más de una línea las llaves son necesarias para distinguir la función de los
otros comandos. Una vez la función es definida pasa a ser parte integral del R y puede
llamarse en otras ocasiones.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 127/344
127
Por ejemplo, para calcular la media geométrica de un vector x podemos definir la siguiente
función:
> media.geometrica<-function(x) prod(x)^(1/length(x))
Si queremos usarla posteriormente para calcular la media geométrica de un vector y
simplemente escribimos el comando
> media.geometrica(y)
Otro ejemplo es la siguiente función que permite hacer un rápido análisis exploratorio
gráfico 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 función que produce cuatro gráficas: un histograma, una caja de Tukey, una
estimación de la densidad y un gráfico q-q (cuantil vs. cuantil), y le adiciona una línea que
pasa por el primer y tercer cuartil.
Retomando el ejemplo presentado previamente sobre el cálculo del número de unidades dereservas necesarias para que la probabilidad opere por un periódo mayor que cierto t sea
mayor o igual que un valor dado, asumiendo que los tiempos de vida de las reservas y de
la unidad principal se distribuyen weibull con los mismos parámetros. Una función para
este fin nos permitiría hacer este cálculo para cualquier conjunto de parámetros:
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 128/344
128
reservas.weibull<-function(a,b,t,gamma,nsim,ksim){
k<-0
p.est.n<-0while(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
}
#Una aplicación de la función:
> reservas.weibull(2,0.5,2,0.9,1000,100)
$nro.reserv
[1] 6
$p.est.n
[1] 0.97237
Una función para el ejemplo previo donde se simuló los valores de una variable aletatoria X
que contaba el número de variables poisson () a generar hasta obtener un número de
eventos mayor o igual a cierto valor:
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 129/344
129
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 aplicación:
res<-geometrica(1,1000)
Algunas reglas para escribir funciones en R
• 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 selección de un
buen nombre es importante.
• Escoja defaults razonables para los argumentos.
• Comience de una forma simple, chequeando inmediatamente y agregue capacidades y
complejidad gradualmente e interactivamente.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 130/344
130
• Trate de pensar en términos 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 situación más 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 fácil 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.
• Haga los apropiados chequeos de errores.
• Sea especialmente cuidadoso en la construcción de un vector elemento a elemento en
loops. Es preferible crear un objeto completo y reemplazar sus partes poco a poco que
tener que aumentar un objeto cada vez.
• Utilice líneas de comentario. Escriba buena documentación.
• Utilice on.exit() para hacer limpieza final: cambios en parámetros en gráficos,
remover archivos temporales, etc.
Las funciones cat() y readline() son de gran utilidad cuando trabajamos con
funciones. La función cat() permite imprimir en pantalla valores que tienen variables y
mensajes. Esto es útil en el momento de depurar una función. Un ejemplo sencillo es elsiguiente:
y <- NULL
for(i in 1:3){
y <- y+i
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 131/344
131
cat("i es ",i,"\n")
}
i es 1i es 2
i es 3
La función readline() regresa un conjunto de caracteres entrados por pantalla. La
entrada termina luego de pulsar la tecla enter. Consideremos el siguiente ejemplo que nos
permite escoger una de dos distribuciones para generar una muestra de tamaño 10:
> ejemplo <- function(){
cat("Escriba el nombre de la distribución para generar","\n")
cat("una muestra de 10 observaciones","\n")
cat("Normal o Uniforme?")
distrib <- readline()
switch(distrib,Normal=rnorm(10),Uniforme=runif(10),
stop("Seleccion invalida"))
}
Ejemplo:
> ejemplo()
Escriba el nombre de la distribución para generar
una muestra de 10 observaciones
Normal o Uniforme?Normal
[1] 0.03739638 0.51370761 0.93633222 -0.96063739 -1.40418324 1.32700988
[7] 1.21586688 -0.23684435 1.04664870 -0.34162372
> ejemplo()
Escriba el nombre de la distribución para generar
una muestra de 10 observaciones
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 132/344
132
Normal o Uniforme?Uniforme
[1] 0.4946902 0.3232580 0.7835886 0.5212327 0.6081415 0.5861348 0.6357172
[8] 0.9553567 0.7956487 0.5185195
4.1. Problemas de Memoria en R
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:
1. Re-utilice las variables temporales si puede.
2. Evite ir creciendo un objeto
3. No asigne nombres a pasos intermedios si no es absolutamente necesario
4. Puede ser aconsejable que los cálculos mas complejos sean codificados en C o
FORTRAN
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 133/344
133
Capítulo 5: Matrices
R es un programa con una gran base de funciones que permiten resolver problemas de
álgebra lineal. Aquí mencionamos unas cuantas:
5.1. Operaciones básicas con matrices
Si A y B son matrices entonces podemos usar los operadores *, %*%. El primero es la
operación producto elemento a elemento, obviamente las matrices deben tener la misma
dimensión. El segundo operador corresponde a la multiplicaciónde matrices.
> 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
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 134/344
134
[,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
5.2. Transposición de una matriz
t(): Esta función retorna la matriz transpuesta del argumento:
> 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
>
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 135/344
135
5.3. Productos cruzados
crossprod(): Dadas las matrices `x' y `y' como argumentos crossprod retorna la
matriz del producto cruzado, es decir XTY. Si sólo 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
>
5.4. Descomposición SVD
svd(): produce la descomposición en valores singulares de una matriz rectangular:
> A
[,1] [,2] [,3]
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 136/344
136
[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)
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 2 4 5
[3,] 3 5 2
5.5. Descomposición QR
qr(): Produce la descomposición QR de una matriz:
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 137/344
137
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:
• x: La matriz sobre la cual se hará la descomposición.
• tol: La tolerancia para detectar dependencias lineales entre las columnas de `x'.
• qr: Una descomposición del tipo calculada por qr.
• y, b: Un vector o matriz de los lados derechos de sistemas de ecuaciones.
• a: Una matriz o descomposición QR.
Detalles
• La descomposición QR puede ser usada para resolver el sistema Ax = b, es útil para
calcular los coeficientes de regresión y aplicar el algoritmo de Newton-Raphson.
• Las funciones qr.coef, qr.resid, y qr.fitted devuelven los
coeficientes, los residuales y los valores ajustados obtenidos cuando se ajusta `y' a la
matriz que tiene `qr' como su descomposición QR. qr.qy y qr. qty devuelvenla matriz Qy y Q
T y, con Q siendo la matriz Q de la descomposición.
• qr.solve resuelve sistemas de ecuaciones mediante la descomposición QR.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 138/344
138
• is.qr devuelve un `TRUE' si `x' es una lista con componentes denominados `qr',
`rank' y `qraux' y `FALSE' en caso contrario.
• No es posible forzar objetos al modo `"qr"'. Los objetos son o no descomposiciones
QR.
Valor: Una lista que contiene los siguientes objetos:
• qr: Una matriz con la misma dimensión de `x'. El triángulo superior contiene el R de
la descomposición y el triángulo superior contiene información del Q de la
descomposición.
• qraux: Un vector de longitud `ncol(x)' que contiene información adicional de Q.
• rank: El rango de `x' calculado por la descomposición. Siempre esl rango completo
en el caso complejo.
• pivot: Información sobre la estrategia de pivoteo usada durante la descomposición.
Nota:
• Para calcular el determinante de una matriz la descomposición QR es mucho más
eficiente que usar los valores propios (`eigen'). Ver `det'
• El caso complejo usa pivoteo sobre columna y no intenta detectar matrices deficientes
en rango.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 139/344
139
Ver también: qr.Q, qr.R, qr.X para reconstrucción 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
#Reconstruyendo las matrices de la
#descomposición
Q<-qr.Q(descQR)
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 140/344
140
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
#Reconstruyendo la matriz original
#Observe que X es la
#matriz inicial A:
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)
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 141/344
141
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
5.6. Pegando matrices
cbind(): Esta función 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)
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 142/344
142
> 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
>
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 143/344
143
5.7. Descomposición de Cholesky
chol(): produce la descomposición de Cholesky de una matriz simétrica definida
positiva, devolviendo el factor correspondiente a la matriz triangular superior:
> 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
>
5.8. Cálculo de valores y vectores propios
eigen(): produce los valores y vectores propios de una matriz cuadrada.
eigen(x, symmetric, only.values = FALSE)
La.eigen(x, symmetric, only.values = FALSE)
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 144/344
144
Argumentos:
• x: La matriz cuya descomposición espectral va a ser calculada.
• symmetric: Si es `TRUE', se asume que la matriz es simétrica o hermitiana si es
compleja, y sólo su triángulo inferior es usado. Si `symmetric' no es especificado, la
matriz es inspeccionada para simetría.
• only.values: Si es `TRUE', sólo son calculados los valores propios, de lo contrario
tanto los valores como los vectores propios son devueltos.
La descomposición espectral de `x' es devuelta como las componentes de una lista:
• values: Un vector con los p valores propios de `x', ordenados en orden decreciente,
de acuerdo a `Mod(values)' si son complejos.
• vectors: Una matriz de dimensión p× p cuyas columnas contienen los vectores propios de of `x', o `NULL' si `only.values' es `TRUE'.
> 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]
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 145/344
145
[1,] 0.3789216 -0.83776349 0.3931549
[2,] 0.6934136 0.53837038 0.4788893
[3,] 0.6128589 -0.09115742 -0.7849168
5.9. Creación de matrices diagonales
diag(): crea una matriz diagonal si el argumento es vectorial o retorna la matriz
diagonal de una matriz
> 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
>
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 146/344
146
5.10. Producto Kronecker
kronecker(): Producto kronecker entre matrices. Calcula el producto kronecker
generalizado de dos arreglos, `X' e `Y'. kronecker(X, Y) devuelve un arreglo `A'
con dimensiones `dim(X) * dim(Y)'.
kronecker(X, Y, FUN = "*", make.dimnames = FALSE, ...)
X %x% Y
• X: Un vector o arreglo.
• Y: Un vector o arreglo.
• FUN: Una función; puede estar entre comillas.
• make.dimnames: Proporciona los nombres de las dimensiones que son el producto
de `X' e `Y'.
• ...: Argumentos opcionales para `FUN'.
> 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
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 147/344
147
[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
5.11. Inversa de una matriz
La matriz inversa no se encuentra directamente sino a través de la función solve() Esta
función resuelve para `x' el sistema Ax=b donde `b' puede ser un vector o una matriz.
solve(a, b, tol = 1e-7)
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 148/344
148
Argumentos:
• a: Una matriz numérica con los coeficientes del sistema lineal.
• b: Un vetor numérico 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'.
Ver también: `backsolve', qr.solve'.
> 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
>
5.12. Ordenando un vector
sort(): ordena en forma ascendente el vector dado como argumento.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 149/344
149
> sort(c(-1,5,-2,4,3,9))
[1] -2 -1 3 4 5 9
5.13. Aplicando funciones sobre las componentes de
una matriz
Las siguientes funciones simplifican los cálculos que operan de forma iterada sobre
columnas o filas de una matriz. Si tenemos arreglos tridimensionales opera sobre las
matrices en caso requerido.
Función Argumentos Lo que hace
apply apply(X,MARGIN,FUN,...) Devuelve un vector o arreglo o lista
de valores obtenidos aplicando una
función a las márgenes de un arreglo
X: El arreglo a ser usado MARGIN: Un
vector con los subíndices sobre los
cuales la función será aplicada 1 indica
filas, 2 indica columnas, `c(1,2)' indica
filas y columnas.
...: Argumentos opcionales para `FUN'
tapply tapply(X,INDEX,FUN = NULL,..., simplify =
TRUE)
Aplica una función a cada celda de
un arreglo “Ragged”,es decir, a cada
grupo de valores (no vacíos) dados
por una única combinación de los
niveles de ciertos factores.
X: Típicamente un vector INDEX: Lista de
factores, cada uno de la misma longitud
de `X' FUN: La función a ser aplicada
...: Argumentos opcionales para `FUN'
simplify: Si es `FALSE',`tapply' siempre
devuelve un arreglo del tipo lista. Si es
`TRUE' (por defecto) y `FUN' siempre
produce un escalar, entonces `tapply'
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 150/344
150
Función Argumentos Lo que hace
devuelve un arreglo del modo escalar
lapply lapply(X,FUN,...) Devuelve una lista de la misma
longitud de `X'. Cada elemento de
ésta resulta de aplicar `FUN' al
correspondiente elemento de `X'.
sapply sapply(X,FUN,...,simplify = TRUE,
USE.NAMES = TRUE)
Es una versión más amigable de
`lapply' también trabaja sobre
vectores y devuelve un vector o
arreglo.
X: Lista o vector a ser usado.
FUN: La función a aplicar
...: Argumentos opcionales para `FUN'
simplify: Argumento lógico. ¿debería el
resultado ser simplificado a un vector
cuando sea posible?
USE.NAMES: Argumento lógico, si es `TRUE'
y si `X' es caracter,usa a `X' como
`names' para los resultados a menos que
ya se tengan nombres.
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:
#Generando tres muestras bivariadas#de tamaño 10:
library(mass)
mu<-c(0,0)
Sigma<-matrix(c(1,0,0,1),ncol=2)
a<-matrix(rep(10,3),ncol=3)
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 151/344
151
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
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 152/344
152
[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
#estimación de localización y
#matriz de covarianza clásicas
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
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 153/344
153
Ejemplo: Datos Antropométricos
La siguiente tabla contiene mediciones realizadas en el pie derecho de 10 estudiantes.
Cinco variables fueron medidas:
• Longitud máxima de la huella (en cm)
• Amplitud máxima de la huella (en cm)
• Amplitud máxima del talón (en cm)
• Longitud máxima del dedo mayor (en cm)
• Amplitud máxima del dedo mayor (en cm)
• Sexo (1: Hombre; 0: Mujer)
Observación
Número
Longitud
Máxima
Ancho
Máximo
Ancho
del
Talón
Longitud
del Dedo
Mayor
Ancho del
Dedo
mayor
Sexo
1 24.20 9.40 5.50 3.00 3.20 1
2 21.70 8.50 6.10 3.20 2.60 0
3 25.40 9.60 5.50 4.00 3.10 14 25.00 10.10 5.30 3.50 2.70 1
5 22.00 8.50 5.70 3.10 2.70 0
6 25.90 9.30 6.10 4.30 3.30 1
7 22.20 8.60 5.20 3.90 2.90 0
8 21.70 8.40 5.00 3.20 2.30 0
9 25.50 9.20 6.10 3.30 3.20 1
10 24.40 9.40 4.70 3.60 2.80 1
Los datos fueron leídos en forma de matriz desde un archivo de texto:
> pies.dat <- matrix(scan('c:/datos/pies.txt'),ncol=6,byrow=T)
> pies.dat
V1 V2 V3 V4 V5 V6
1 24.2 9.4 5.5 3.0 3.2 1
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 154/344
154
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 15 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
> hombres.pies<-pies.dat[pies.dat[,6]= =1,]
> hombres.pies
V1 V2 V3 V4 V5 V6
1 24.2 9.4 5.5 3.0 3.2 1
3 25.4 9.6 5.5 4.0 3.1 1
4 25.0 10.1 5.3 3.5 2.7 1
6 25.9 9.3 6.1 4.3 3.3 19 25.5 9.2 6.1 3.3 3.2 1
10 24.4 9.4 4.7 3.6 2.8 1
> mujeres.pies<-pies.dat[pies.dat[,6]= =0,]
> mujeres.pies
V1 V2 V3 V4 V5 V6
2 21.7 8.5 6.1 3.2 2.6 0
5 22.0 8.5 5.7 3.1 2.7 0
7 22.2 8.6 5.2 3.9 2.9 0
8 21.7 8.4 5.0 3.2 2.3 0>
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 155/344
155
lo cual genera dos matrices hombres.pies y mujeres.pies. Para propósitos
ilustrativos vamos a seleccionar las tres primeras variables: largo del pie, ancho del pie y
ancho del talón. 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.36 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>
Si queremos calcula las matrices de dispersión (varianzas y covarianzas) y correlación por
sexo, procedemos así:
> 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
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 156/344
156
V1 V2 V3
V1 0.06000000 0.016666667 -0.030000000
V2 0.01666667 0.006666667 0.006666667V3 -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
5.14. Funciones colSums, rowSums,
colMeans, rowMeans
Calculan sumas y medias de filas y columnas en arreglos numéricos. Es equivalente a usar
apply con `FUN = mean' o `FUN = sum' pero es mucho más rápida.
colSums(x, na.rm = FALSE, dims = 1)
rowSums(x, na.rm = FALSE, dims = 1)
colMeans(x, na.rm = FALSE, dims = 1)
rowMeans(x, na.rm = FALSE, dims = 1)
Argumentos:
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 157/344
157
• x: Un arreglo de dos o más dimensiones con valores numéricos, complejos, enteros,
o lógicos, o un data frame.
• na.rm: Argumento lógico para especificar si se omiten los valores faltantes de los
cálculos.
• dims: Cuáles dimensiones son consideradas como “rows” o “columns” para la suma
total. Para `col*', la suma o la media es sobre la dimensión total `dims+1, ...'; para
`row*' es sobre las dimensiones `1:dims'.
Ejemplos:
x <- cbind(x1 = 3, x2 = c(4:1, 2:5))
x
x1 x2
[1,] 3 4
[2,] 3 3
[3,] 3 2
[4,] 3 1
[5,] 3 2
[6,] 3 3
[7,] 3 4
[8,] 3 5
> rowSums(x)
[1] 7 6 5 4 5 6 7 8
> colSums(x)
x1 x224 24
> rowMeans(x)
[1] 3.5 3.0 2.5 2.0 2.5 3.0 3.5 4.0
> colMeans(x)
x1 x2
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 158/344
158
3 3
##Caso complejo:
x <- cbind(x1 = 3 + 2i, x2 = c(4:1, 2:5) - 5i)
x[3, ] <- NA; x[4, 2] <- NA
> x
x1 x2
[1,] 3+2i 4-5i
[2,] 3+2i 3-5i
[3,] NA NA
[4,] 3+2i NA
[5,] 3+2i 2-5i
[6,] 3+2i 3-5i
[7,] 3+2i 4-5i
[8,] 3+2i 5-5i
> 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
rowSums(x, na.rm = TRUE); colSums(x, na.rm = TRUE)
[1] 7-3i 6-3i 0+0i 3+2i 5-3i 6-3i 7-3i 8-3i
x1 x2
21+14i 21-30i
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 159/344
159
Parte IIGráficos
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 160/344
160
Capítulo 6: Introducción
Una de las ventajas mayores del programa R es su capacidad de producir gráficos de alta
calidad. Posee un gran número de funciones que son fáciles de usar y de modificar para
ajustarlas a nuestras necesidades.
6.1. Funciones para Especificar Devices
postscript(archivo, comando, horizontal=F, width,height, rasters,
pointsize=14, font=1,preamble=ps.preamble, fonts=ps.fonts)
printer(width=80, height=64, file=“ “, command=“ “)
show()
6.2. Algunos Parámetros para Graficar en R
log='<x|y|xy>' Ejes Logarítmicos
main='título'&
new=<logical> Adiciona sobre el gráfico actual
sub='título de abajo'
type='<l|p|b|n>' Línea, puntos, ambos, ninguno
lty=n Tipo de Línea
pch='.' Caracter de dibujo\xlab='Nombre del eje x'
ylab='Nombre del eje y'
xlim=c(x_ minimo ,x_ maximo )ylim=c(y_ minimo ,y_ maximo )
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 161/344
161
6.3. Gráficos 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)
6.4. Gráficos Bidimensionales
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)
6.5. Gráficos Tridimensionales
contour(x, y, z, v, nint=5, add=FALSE, labels)
interp(x, y, z, xo, yo, ncp=0, extrap=FALSE)
persp(z, eye=c(-6,-8,5), ar=1)
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 162/344
162
6.6. Múltiples Gráficos por Página (Ejemplos)
Cuatro gráficos en una misma página, y un título general:
par(mfrow=c(2,2), oma=c(0, 0, 4, 0))
plot(rnorm(50),main="Muestra normal estándar",cex.main=0.8)
plot(rexp(50),main="Muestra exponencial(1)", cex.main=0.8)
plot(rweibull(50,3,2),main="Muestra weibul(3,2)", cex.main=0.8)
plot(rnorm(50,mean=1),main="Muestra normal(1,1)", cex.main=0.8)
mtext(side=3, line=0, cex=1, outer=T,"Este es un Titulo para Toda la
Página")
Tres gráficos: uno centrado en la parte superior, y los otros dos
abajo:
nf <- layout(rbind(c(0,1,1,0), c(2,2,3,3)))
plot(1:10)
plot(rnorm(10,0,1))
plot(rlnorm(10,0,1))
Otra presentación, en la cual dos gráficos son presentados en columna, y centrados en la
ventana graficadora, es posible de la forma siguiente:
nf <- layout(rbind(c(0,1,1,0), c(0,2,2,0)))
plot(rnorm(10))
plot(rlnorm(10))
Entre las funciones para graficar de más uso están:
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 163/344
163
6.7. Función persp
Esta función permite realizar gráficos tridimensionales de perspectiva de superficies sobre
el plano x-y.
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: Ubicación 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.
• xlim, ylim, zlim: Límites x, y y z para el gráfico. El gráfico es producido de
manera que el volumen rectangular definido por estos límites sea visible.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 164/344
164
• xlab, ylab, zlab: Títulos para los ejes. Estos deben ser cadenas de caracteres; no se
permiten expresiones.
• main, sub: Título y subtítulo.
• theta, phi: ángulos que definen la dirección de las vistas. 'theta' da la dirección
azimutal y 'phi' la colatitud.
• r: La distancia del eyepoint desde el centro de la caja de graficación.
• d: Un valor que puede usarse para variar la longitud de la transformación de la
perspectiva. Valores mayores que 1 reducirán el efecto perspectiva y valores menores
o iguales a 1 lo exagerarán.
• scale: Antes de visualizar las coordenadas x, y y z de los puntos que definen la
superficie, éstas son transformadas al intervalo [0,1]. Si 'scale' es TRUE las
coordenadas son transformadas separadamente. Si es FALSE las coordenadas sonescaladas de manera que el aspecto de las razones son mantenidas. Esto es útil para
representar cosas como información DEM.
• expand: Un factor de expansión aplicado a las coordenadas z. A menudo es usado
con 'expand' entre (0,1) para contraer el gráfico en la dirección z.
• col: El color de las facetas de la superficie.
• border: El color de la linea dibujada alrededor de las facetas de la superficie. Un
valor de 'NA' inhabilitará el trazo de bordes. Esto resulta útil cuando la superficie es
sombreada.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 165/344
165
• ltheta, lphi: Si se especifican valores finitos para estos, la superficie es sombreada
como si fuera iluminada desde la dirección especificada por el azimut 'ltheta' y la
colatitud 'lphi'.
• shade: La sombra en un faceta de la superficie es calculada como
((1+d)/2)shade, donde 'd' es el producto punto de un vector unitario normal a la
faz y un vector unitario en la dirección de un fuente de luz. Los valores de 'shade'
cercanos a 1 producen sombreado similar a un modelo de fuente de luz puntual y
valores cercanos a 0 no producen sombra. Valores en el rango de 0.5 a 0.75
proporcionan una aproximación a la iluminación diurna.
• box: Traza un caja para la superficie. Por defecto e 'TRUE'.
• 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 direcciónde aumento; “detailed” dibuja los ticks normales como en gráficos 2D
• nticks: El número aproximado de marcas ticks a dibujar en los ejes. No tiene efecto
si 'ticktype' es “simple”.
• ...: Parámetros gráficos adicionales.
Ejemplo 1: Graficación de normales bivariadas
x<-seq(-4,4,len=50)
y<-seq(-4,4,len=50)
normal.bivariada<-function(x,y,rho,mu1,sigma1,mu2,sigma2){
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 166/344
166
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,"Distribución Normal
Bivariada",side=3,cex=0.8)
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 167/344
167
Figura 6.1: visualización de las superficies normales bivariadas para unos
parámetros específicos es posible gracias a la función `persp' .
6.8. Función contour
Esta función permite realizar gráficos de contornos, tales como los contornos de
verosimilitud en dos parámetros o también en la graficación de regiones de confianza,
mapas topográficos, etc. Dichos contornos pueden ser agregados a un gráfico previo, por
ejemplo a un gráfico de dispersión:
contour(x = seq(0, 1, len = nrow(z)),y = seq(0, 1, len = ncol(z)), z,
nlevels = 10,levels = pretty(zlim, nlevels), labels = NULL,
xlim = range(x, finite = TRUE),ylim =range(y, finite = TRUE),
zlim = range(z, finite = TRUE),labcex = 0.6, drawlabels = TRUE,
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 168/344
168
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: Ubicación 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 parax
ey
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.
• nlevels: El número de niveles de contorno deseados si 'levels' no es especificado.
• levels: Vector numérico que da los niveles en los cuales se desea dibujar las lineas
de contorno.
• labels: Un vector que proporciona etiquetas para las lineas de contorno. Si es
'NULL' entonces los niveles son usados como etiquetas.
• labcex: Factor de expansión de caracter 'cex' para la etiquetación de los contornos.
• drawlabels: Argumento lógico. Si es 'TRUE' los contornos son etiquetados.
• method: cadena de caracteres que especifica dónde se ubicarán las etiquetas. Los
valores posibles son (entre comillas) “simple”, “edge” y “flattest” (por defecto). El
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 169/344
169
primero dibuja la etiqueta en el borde del gráfico, sobreponiéndola a la linea de
contorno; el segundo dibuja la etiqueta en el borde del gráfico , incrustado en la linea
de contorno, sin superponerlas; y el tercero dibuja sobre la sección más plana del
contorno, incrustando la etiqueta en la linea de contorno sin superposición. El
segundo y tercer método pueden no dibujar un etiqueta en cada linea de contorno.
• vfont: Si se especifica un vector de caracteres de longitud 2, entonces vector de
fuentes Hershey son usados para las etiquetas de los contornos. El primer elemento
del vector selecciona un estilo o tipo de fuente y el segundo elemento selecciona un
índice de fuente .
• xlim, ylim, zlim: Límites x, y y z para el gráfico.
• axes, frame.plot: Argumento lógico para indicar si ejes o una caja deberían ser
dibujados.
• col: Color de las lineas.
• lty: Tipo de linea.
• lwd: Ancho de linea.
• add: Argumento lógico. Si es 'TRUE', adiciona los contornos a un gráfico.
• ...: Pueden suministrarse parámetros gráficos adicionales y argumentos para 'title'
Ver: 'filled.contour' para contornos con “color-filled”, 'image' y 'demo(graphics).
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 170/344
170
Ejemplo: Mapa topográfico (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 topográfico 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 aplicación no estadística pero bastante útil de
la función `contour' en el trazo de mapas topográficos.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 171/344
171
6.9. Función image
Esta función crea un grid de rectángulos en escala de gris o coloreados con los colores
correspondientes a los valores en `z'. Puede usarse para presentar imágenes
de datos aka tridimensionales o espaciales.
Las funciones `heat.colors', `terrain.colors' y `topo.colors' crean el espectro de calor (rojo a
blanco) y esquemas de colores topográficos apropiados para presentar datos ordenados, con
`n' dando el número de colores deseados.
image(x, ...) image.default(x, y, z, zlim, xlim, ylim, col =
heat.colors(12), add = FALSE, xaxs = "i", yaxs = "i", xlab, ylab,
breaks, oldstyle = FALSE, ...)
Argumentos:
• x,y: Ubicaciones de las líneas del grid en las cuáles 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' mínimo y máximo 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 serán graficados.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 172/344
172
• 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.
• add: Argumento lógico; si es `TRUE', adiciona al gráfico actual activo (y los
siguientes argumentos son ignorados). Esto es raramente útil debido a que image'
pinta sobre gráficos existentes.
• xaxs, yaxs: Estilo de los ejes `x' y `y'. Por defecto es `"i"' el cual es apropiado para
imágenes. 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 más puntos de corte que colores.
• oldstyle: Argumento lógico. Si es `TRUE' los puntos medios de los intervalos de
colores están igualmente espaciados, y `zlim[1]' y `zlim[2]' eran tomados como
puntos medios. El valor por defecto actual es tener intervalos de colores de igual
longitud entre los límites.
• ...: Pueden usarsa parámetros gráficos para `plot'.
Detalles: La longitud de `x' debería ser igual a `nrow(x)+1' o `nrow(x)'. En el primer caso
`x' especifica los límites entre celdas; en el segundo caso, `x' especifica los puntos medios
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 173/344
173
de las celdas. Un razonamiento similar se aplica a `y'. Probablemente sólo tenga sentido
especificar los puntos medios de un grid igualmente espaciado. Si se especifica sólo una
fila o columna y la longitud de `x' o `y', el área de usuario completa es llenada en la
dirección 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
másinferior.
Autor: Basada en una función de Thomas Lumley [email protected].
Ver también: `contour', heat.colors', topo.colors', terrain.colors', rainbow', hsv', par'.
Ejemplos:
x <- y <- seq(-4*pi, 4*pi, len=27)
r <- sqrt(outer(x^2, y^2, "+"))
layout(rbind(c(1,1,2,2),c(0,3,3,0)))
image(z = z <-cos(r^2)*exp(-r/6), col=gray((0:32)/32),
main=expression(paste("Grid de la función",sep=" ",z ==cosr^2 *e^ -r/6 )
))
image(z, main=expression(paste("Grid de la función",sep=" ",z ==cosr^2 *
e^ -r/6 )), xlab="Líneas de Contorno incluidas")
contour(z, add = TRUE, drawlabels = FALSE)
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))
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 174/344
174
axis(2, at =seq(100, 600, by = 100))
box()
title(main = "Maunga Whau Volcano\nMapa Topográfico",cex.main=0.9)
Figura 6.3: `image' y `contour' permiten realizar gráficas especiales tanto
estadísticas como de otra índole como se observa en estos tres gráficos
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 175/344
175
6.10. Función matplot
La función 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 gráfico se obtiene como sigue:
matplot(x, y, type = "p", lty = 1:5, lwd = 1, pch = NULL, col =
1:6, cex = NULL, xlab = NULL, ylab = NULL, xlim = NULL, ylim =
NULL,..., add = FALSE, verbose = getOption("verbose"))
Argumentos:
• x,y: Vectores o matrices de datos a graficar. Es imprescindible que el número de
filas coincida. Si uno de los dos objetos (x o y) falta, el dado es tomado como y, y se
utiliza como x un vector de 1:n. Valores NA son permitidos.
• type: Un vector para indicar el tipo de gráfico para cada columna de y (como se vió
con la función plot), por defecto es p.
• lty,lwd: Vectores para indicar los tipos y anchos de líneas 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 cíclicamente.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 176/344
176
• cex: Vector de dimensiones del factor de expansión de caracteres, es usado
cíclicamente.
• xlab, ylab: Títulos de ejes x e y.
• xlim, ylim: Rangos para los ejes x e y.
• ...: Parámetros gráficos adicionales (ver “ par ”)
• add: Argumento lógico. Si es TRUE, el gráfico es agregado a un gráfico previo. Se
debe garantizar que los rangos de los ejes en ambos gráficos sean los mismos.
• verbose: Argumento lógico. Si es “TRUE”, escribe una linea de lo que hace la
función, por ejemplo:
matplot: doing 5 plots with col= ("1" "2" "2" "4" "4") pch=("1" "2"
"3" "4" "5") ...
#Supongamos dos series de datos
#de longitud 40:
x1<-1:40
x2<-rnorm(40)
x3<-rexp(40)
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="Gráfica de dos series
simultáneas\nmediante matplot")
legend(locator(1),c("serie 1","serie 2"),col=1:2,bty="n",lty=1:2)
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 177/344
177
Figura 6.4: Podemos graficar varias curvas en un mismo plano utilizando la
función matplot y adicionalmente agregar leyendas mediante la función
legend
Una función de utilidad es par(). Esta permite presentar más de un gráfico en la misma pantalla o en la misma hoja. Su utilización es simple:
> par(mfrow=c(2,2))
Con el anterior comando estamos indicando que hasta cuatro gráficas 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 comparación por sexos podemos pensar en un análisis gráfico como el
siguiente. Para obtenerlo asumamos que tenemos nuestro archivo de datos en formato
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 178/344
178
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]]))
6.11. Imprimiendo Gráficos
Si queremos imprimir un gráfico generalmente procedemos en dos pasos:
1. Creamos un archivo con el gráfico
2. Posterior a nuestra sesión R imprimes el archivo con el gráfico.
Para crear el archivo con el gráfico, el R posee la función postscript() , esta función
crea un archivo para ser impreso posteriormente en una impresora con lenguaje postscript.
Trabajando bajo Windows la impresión puede realizarse directamente de la pantalla,
escogiendo la opción de impresión.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 179/344
179
Capítulo 7: Gráficos para una variable
Los siguientes son algunas funciones que permiten graficar una variable: boxplot(),hist(), stem(), qqnorm().
7.1. Función hist: Histogramas
Como argumentos esta función recibe un vector con datos. Además, opcionalmente, puedeentrarse como argumento el número de barras a ser graficadas o en su defecto el número de
clases se determina con la fórmula de Sturges.
Nota: Los programas de computador usualmente ajustan los histogramas
automáticamente, pero el programa debe permitirnos variar el histograma. Si usted posee
un programa que no le permita hacer cambios, cambie de programa.
En R el comando básico con el cual se obtiene este tipo de gráfico 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, ...)
Los argumentos de este comando son:
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 180/344
180
• x: Vector de valores para el que se construye el histograma.
• breaks: Puede ser un valor con el cual se indica el número aproximado de clases o
un vector cuyos elementos indican los puntos límites entre las clases o intervalos.
• freq: argumento lógico; si se especifica como “TRUE”, el histograma representará
las frecuencias absolutas o conteo de datos en cada clase; si se especifica
como“FALSE”, se reprentarán las frecuencias relativas. Por defecto, este argumento
toma el valor de “TRUE” siempre y cuando los intervalos sean de igual ancho.
• probability: Especifica un alias para “!freq”, para compatibilidad con S.
• include.lowest: Argumento lógico; si se especifica como “TRUE”, un “x[i]” igual a
los equal a un valor “ breaks” se incluirá en la primera barra, si el argumento “right
=TRUE”, o en la última en caso contrario.
• right: Argumento lógico; si es “TRUE”, los intervalos son abiertos a la izquierda -cerrados a la derecha (a,b]. Para la primera clase o intervalo si
“include.lowest=TRUE” el valor más pequeño de los datos será incluido en éste. Si
es “FALSE” los intervalos serán de la forma [a,b) y el argumento
“include.lowest=TRUE” tendrá el significado de incluir el “más alto”.
• col: Para definir el color de las barras. Por defecto, “ NULL” produce barras sin
fondo.
• border: Para definir el color de los bordes de las barras.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 181/344
181
• plot: Argumento lógico. Por defecto es “TRUE”, y el resultado es el gráfico del
histograma; si se especifica como “FALSE” el resultado es una lista de conteos por
cada intervalo.
• labels: Argumento lógico o carácter. Si se especifica como “TRUE” coloca
etiquetas arriba de cada barra.
• nclass: Argumento numérico (entero). Para compatibilidad con S, “nclass=n” es
equivalente a “ breaks=n”.
• ...: Parámetros gráficos adicionales a “title” y “axis”.
hist(datos)
hist(datos,nclass=5)
Ejemplo: Para los datos de los tiempos de la media maratón de CONAVI:
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 13316121: 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
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 182/344
182
181:
Read 180 items
horas<-maraton%/%10000min<-(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)
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 183/344
183
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.29488950% 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)
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 184/344
184
Nota: En estos histogramas, las alturas corresponden a las intensidades (frec.
relativa/long. intervalo). Por tanto, el área de cada rectángulo 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í:
Intensidad primera clase=1.4869888=0.5/(1.384306-1.048056)
Intensidad segunda clase=0.4293381=0.5/(2.548889-1.384306)
Figura 7.1: Se muestra la distribución del tiempo utilizado por los atletas masculinos
clasificados en el grupo élite en la media maratón de CONAVI. El histograma A tiene solo 2
barras. El gráfico B, con 4 barras,y el C, con 8 barras, muestra más claramente la asimetría
(este es el que la mayoría de los programas produce por defecto, ya que la regla de Sturges,
para este conjunto de datos aproxima a 8 barras). Si consideramos más barras por ejemplo 16,
como tenemos en D, se refina más la información y empezamos a notar multimodalidad.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 185/344
185
Figura 7.2: La selección de histogramas con barras de amplitud variable no es recomendada
por diversos autores, pero si lo hacemos con cuidado podemos obtener gráficos muy
ilustrativos. Se seleccionaron amplitudes de tal forma que cada barra posea el mismo número
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 más clara.
7.2. Función boxplot
El boxplot es obtenido mediante la siguiente función:
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:
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 186/344
186
• 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 especifiacón 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 especificación.`NA's son
permitidos en los datos.
• range: Determina la extensión de los “whiskers” de la caja. Si es positivo, “los
whiskers” se extienden hasta el dato más extremo, el cual no es más que el “rango”
por rango intercuartílico de la caja. Un valor de cero hace que los “whiskers” se
extiendan hasta los datos extremos.
• width: Un vector que da los anchos relativos de las cajas.
• varwidth: Si es “TRUE”, las cajas son dibujadas con anchos proporcionales a las
raíces cuadradas del número de observaciones en los grupos.
• notch: Si es “TRUE”, una cuña es dibujada a cada lado de las cajas. Cuando las
cuñas de dos gráficos de caja no se traslapan, entonces las medianas son
significativamente diferentes a un nivel del 5%.
• names: Un grupo de etiquetas a ser impresas debajo de cada boxplot.
• boxwex: Un factor de escala a ser aplicado a todas las cajas. Cuando sólo hay unos
pocos grupos, la apariencia del gráfico puede mejorarse haciendo las cajas más
angostas.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 187/344
187
• data: “data.frame”, “list”, o “environment” en el cual los nombres de las variables
son evaluados cuando “x” es una fórmula.
• plot: Si es “TRUE” (por defecto) entonces se produce el gráfico. De lo contrario, se
producen los resúmenes de los boxplots.
• border: Un vector opcional de colores para las líneas de las cajas y debe ser de
longitud igual al número de gráficos.
• col: Si se especifica, los colores que contiene serán usados en el cuerpo de las cajas.
• log: Para indicar si las coordenadas “x” o “y” o serán graficadas en escala
logarítmica.
• pars: Los parámetros gráficos pueden ser pasados como argumentos para el boxplot.
• horizontal: Si es “FALSE” (por defecto) los boxplots son dibujados verticalmente.
• add: Si es “TRUE” agrega un boxplot al gráfico actual.
• formula: Una fórmula tal como “y ~ x”.
• data: Un data.frame (o lista) del cual las variables en “fórmula” serán tomadas.
• subset: Un vector opcional para especificar un subconjunto de observaciones a ser
usadas en el proceso de ajuste.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 188/344
188
• na.action: Una función la cual indica lo que debería pasar cuando los datos
contienen “ NA's”.
En el siguiente ejemplo, se grafican simultáneamente los datos sobre el número de
pasajeros por viaje registrados entre octubre 1 de 1997 a agosto 30 de 1999, de la ruta
Aranjuez - Anillo, en donde un viaje constituye el recorrido de salida y regreso de un bus
desde la terminal:
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- Año',
xlab='años', ylab='número 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 pasajerostransportados\npor viajes - Año', xlab='años',ylab='número por viaje')
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 189/344
189
Figura 7.3: Podemos comparar las distribuciones del número de pasajeros por
viaje durante tres años. Se puede apreciar simultáneamente la tendencia y la
dispersión.
7.3. Función stem
Nos permite obtener el gráfico de tallo y hoja. Este gráfico fue propuesto por Tukey (1977)
y a pesar de no ser un gráfico para presentación definitiva se utiliza a la vez que el analista
recoge la información ve la distribución de los mismos. Estos gráficos son fáciles de
realizar a mano y se usan como una forma rápida y no pulida de mirar los datos.
Qué nos muestra?
1. El centro de la distribución.
2. La forma general de la distribución
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 190/344
190
Simétrica Si las porciones a cada lado del centro son imágenes espejos de las otras.
Sesgada a la izquierda Si la cola izquierda (los valores menores) es mucho más larga que
los de la derecha (los valores mayores)
Sesgada a la derecha Opuesto a la sesgada a la izquierda.
3. Desviaciones marcadas de la forma global de la distribución.
Outliers Observaciones individuales que caen muy por fuera del patrón general delos datos.
gaps Huecos en la distribución
Ventajas de gráfico: Muy fácil de realizar y puede hacerse a manos.
Las desventajas son:
1. El gráfico es tosco y no sirve para presentaciones definitivas.
2. Funciona cuando el número de observaciones no es muy grande.
3. No permite comparar claramente diferentes poblaciones.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 191/344
191
7 677 116 8
6 005 56666777899995 0000000112333444444 55555556667777888899994 003343 88----+----+----+----+--
Datos de velocidades registradas con radar
Fecha de observacion: Sept. 10, 1994
7.4. Función qqnorm : Gráficos cuantil - cuantil
Esta es una función genérica que por defecto produce un Q-Q Plot Normal para los valores
en `y'. Adicionalmente, la función qqline agrega una línea al anterior gráfico cuando es
normal, la cual pasa a través del primer y tercer cuartil. La función qqplot produce un
Q-Q Plot de dons conjuntos de datos. En cualquiera de las tres anteriores funciones pueden
especificarse parámetros gráficos (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:
• x: La primera muestra para `qqplot'.
• y: La segunda o la única muestra.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 192/344
192
• xlab, ylab, main: Etiquetas de ejes y título del gráfico.
• plot.it: Argumento lógico. ¿Debe graficarse el resultado?
• ylim, ...: Parámetros gráficos.
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")
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 193/344
193
Figura 7.4: Gráficos obtenidos mediante las funciones qqnorm,
qqline, qqplot
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 194/344
194
Capítulo 8: Gráficos Multivariables
R provee muchas funciones para el caso multivariable. pairs(), plot(),
faces(), stars().
8.1. Función pairs : Matrices de Dispersión
Las matrices de dispersión proporcionan un método simple de presentar las relaciones entre pares de variables, y es la versión múltiple de plot(). Consiste en una matriz donde cada
entrada presenta un gráfico de dispersión sencillo. Un inconveniente es que si tenemos
muchas variables el tamaño de cada entrada se reduce demasiado impidiendo ver con
claridad las relaciones entre los pares de variables.
La celda (i,j) de una matriz de dispersión contiene el scatterplot de la columna i versus la
columna j de la matriz de datos. Este gráfico puede obtenerse mediante:
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
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 195/344
195
pairs(pies,labels=c("x1","x2","x3","x4","x5","x6"), main='Matriz
de dispersión\n \npara medidas de pies,cex.main=0.8)
Figura 8.1: Esta gráfica corresponde a los cruces de las variables medidas en los pies de varias personas.
Los argumentos de esta función corresponden a:
• x: Las coordenadas de puntos dados como columnas de una matriz.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 196/344
196
• labels: Un vector para identificar los nombres de las columnas. Por defecto toma los
nombres de columnas de la matriz x.
• panel: Para especificar una función: function(x,y,...), a ser usada para
determinar los contenidos de los paneles o gráaficos componentes. Por defecto es
points, indicando que se graficarán los puntos de los pares de datos. También es
posible utilizar aquí otras funciones prediseñadas.
• ...: Indica que es posible agregar otros parámetros gráficos, tales como pch y col, con
los cuales puede especificarse un vector de símbolos y colores a ser usados en los
scatterplots.
• lower.panel, upper.panel: Para especificar funciones por separado a ser empleados
en los paneles abajo y arriba de la diagonal respectivamente.
• diag.panel: Es opcional. Permite que una función: function(x, ...) sea
empleada para los paneles de la diagonal.
• text.panel: Es opcional. Permite que una función: function(x, y, labels,
cex, font,...) sea aplicada a los paneles de la diagonal.
• label.pos: Para especificar la posición y de las etiquetas en el text panel.
• cex.labels, font.labels: Parámetros para la expansión de caracteres y fuentes a usar en las etiquetas de las variables.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 197/344
197
• row1attop: Parámetro lógico con el cual se especifica si el gráfico para especificar
si el diseño lucirá como una matriz con su primera fila en la parte superior o como un
gráfico con fila uno en la base. Por defecto es lo primero.
Autores:
• Enhancements for R 1.0.0 contributed by Dr. Jens
• Oehlschlaegel-Akiyoshi and R-core members.
8.2. Función plot : Gráficos de Dispersión
Es tal vez el más antiguo de los gráficos multivariables. Está limitado a la presentación de
dos variables, aunque se pueden realizar modificaciones de tal forma que nos permita
incluir más.
En R obtenemos este gráfico mediante la función plot:
plot(x, ...)
plot(x, y, xlim=range(x), ylim=range(y), type="p",main, xlab, ylab, ...)
plot(y ~ x, ...)
Donde:
• x: Objeto que contiene las coordenadas de los puntos del gráfico.
• y: Las coordenadas y de los puntos, sin embargo resulta innecesario cuando el
objeto x tiene la estructura apropiada para dar ambas coordenadas
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 198/344
198
• xlim, ylim: Los rangos para los ejes x e y respectivamente.
• type: Para especificar el tipo de gráfico, así :
1. “ p” para puntos, lo cual es por defecto
2. “l” para trazar líneas entre los puntos
3. “ b” para puntos y líneas
4. “o” para puntos y líneas superpuestos
5. “h” para un histograma pero en vez de rectángulos traza líneas verticales
6. “s” Para gráficos en escala
7. “S” Otros gráficos en escala
8. “n” Para que no aparezca el gráfico.
• main: Para titular al gráfico.
• xlab, ylab: Para etiquetar a los ejes.
• ...: Otros parámetros gráficos.
En el argumento “type” se especifica igual a “ p” para representar las observaciones por
puntos, aunque este es el valor por defecto y por tanto no es necesario especificarlo. En el
siguiente ejemplo se observa el uso de esta función:
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.
Año',xlab='año',ylab='valor',pch=19)
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 199/344
199
Figura 8.2: Esta gráfica presenta información sobre el precio de oferta de
carros Renault 9 vs. el año del carro aparecidos en los avisos clasificados de un
periódico local.
8.3. Función stars: Gráfico de Estrellas
Supóngase un conjunto de datos multivariados ordenados matricialmente, de manera que
las filas corresponden a las observaciones y p columnas, una por cada variable. En dos
dimensiones se pueden construir círculos (uno por cada observación multivariada) de un
radio prefijado, con p rayos igualmente espaciados emanando del centro de cada círculo.
Las longitudes de los rayos son proporcionales a los valores de las variables en cada
observación. Los extremos de los rayos pueden conectarse con segmentos de líneas rectas
para formar una estrella. Con cada observación representada por una estrella, éstas pueden
ser agrupadas según sus similitudes. Es conveniente estandarizar las observaciones, caso
en el cual pueden resultar valores negativos. (Johnson, Wichern (1998)).
En R la función correspondiente es:
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 200/344
200
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,...)
Los argumentos son:
• x: La matriz de datos. Un gráfico de estrella será producido por cada fila de “x”.
Los valores faltantes serán tratados como si fueran cero.
• full: Argumento lógico: Si es “TRUE”, Los gráficos ocuparán un círculo completo.
De lo contrario sólo ocuparán un semicírculo superior.
• scale: Argumento lógico: Si es “TRUE”, las columnas de la matriz de datos serán
escaladas independientemente, de modo que el valor máximo en cada columna toma
el valor de 1 y el mínimo de 0. Si es “FALSE”, la presunción es que los datos ya han
sido escalados por algún otro algoritmo al rango [0,1].
• radius: Argumento lógico: Si es “TRUE”, dibujará el radio correspondiente a cada
variable.
• labels: Un vector de caracteres para etiquetar cada gráfico. Por defecto se tiene
especificado que use los nombres de las filas de la matriz de datos.
• locations: Corresponde a una matriz de dos columnas con las coordenadas x e yusadas para ubicar cada gráfico de estrella. Si locations es “ NULL”, es decir, no es
pre especificado, los gráficos son colocados en un arreglo rectangular.
• xlim: Es un vector para especificar el rango de las coordenadas x a graficar.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 201/344
201
• ylim: Es un vector con el rango de coordenadas y a graficar.
• len: Factor de escala para la longitud del radio de los segmentos.
• 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.
• key.labels: Es un vector de caracteres para etiquetar los segmentos de la unidad de
claves que identifica las variables en cada start plot. Si se omite, la segunda
componente de dimnames(x) es usada, si está disponible.
• key.xpd: Anexar un conmutador para la unidad de claves (dibujar y etiquetar), ver
“ par(“xpd”)”.
• draw.segments: Argumento lógico. Si es “TRUE” dibuja un diagrama de segmento.
• axes: Argumento lógico: Si es “TRUE” se agregan ejes al gráfico.
• cex: Factor de expansión de caracter para las etiquetas.
•
lwd: Ancho de línea a ser usado para dibujar.
• ...: Argumentos adicionales, pasadas a la primera llamada de “ plot()” .
Autor: Thomas S. Dye
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 202/344
202
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)
colnames(datos.Hombres)<-c("Sexo","Masa Corp","Per muslo
medio","Anch deltoideo","Per Abdom", "Per Cadera","Anch
bideltoideo","Estatura","Alt Acromial Parado", "Pliegue Cutaneo
Sub","Pliegue Cutaneo Trip","edad")
colnames(datos.Mujeres)<-c("Sexo","Masa Corp","Per muslo medio",
"Anch deltoideo","Per Abdom","Per Cadera","Anch bideltoideo",
"Estatura","Alt Acromial Parado","Pliegue Cutaneo Sub","Pliegue
Cutaneo Trip","edad")
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
antropométricos (hombres)\nPoblación 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
antropométricos (mujeres)\nPoblación 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
antropométricos (hombres)\nPoblación laboral Colombiana',
draw.segments=TRUE,len=0.8)
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 203/344
203
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 abreviándolos, de lo contrario las claves aparecerían completas, pero
por su extensión esto resultaría 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 gráfico se presentan los primeros 12 datos antropométricos de la base de
datos de hombres. Observe que los hombres 3 y 6 presentan un comportamiento que sobresale
respecto al resto (el número 3 tiene medidas mayores y el 6 tiene medidas más pequeñas).
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 204/344
204
Figura 8.4: En este gráfico se presentan los primeros 12 datos antropométricos de la base de
datos de mujeres. Observe que las mujer 2 y 4 presenta un comportamiento que sobresale
respecto al resto (tienen medidas más pequeñas) y que en las variables pliegue cutáneo
subescapular (PICS) y en pliegue cutáneo triceps (PICT) parece mayor variabilidad (en la
parte inferior de las estrellas observe cómo varíel patrón).
Figura 8.5: En este gráfico se presentan los mismos 12 datos antropométricos de la base de
datos de hombres, pero con una modificación, los gráficos presentan sectores circulares de
radios proporcionales a los valores de cada variable en el respectivo sujeto, además que cada
sector ha sido coloreado. Esto fue posible especificando el argumento draw.segments=TRUE.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 205/344
205
8.4. Gráficas Trellis (de Rejilla)
Las gráficas Trellis (de rejilla) son gráficas que contienen uno o más paneles, arreglados en
forma de rejilla o matriz triangular. Cada panel presenta un gráfico con un subconjunto de
los datos. Todos los paneles presentan el mismo tipo de gráfico. Los subconjuntos de datos
son escogidos con algún criterio uniforme, condicionando en variables continuas o
discretas, proporcionando una serie de vistas en forma de coordenadas.
Las gráficas Trellis representan un paso de mayor importancia en gráficas estadísticas.
Ellos proporcionan una forma general a las gráficas múltiples y condicionales.
La función coplot permite obtener este tipo de gráficos, sus argumentos son:
coplot(formula, data, given.values, panel = points, rows,
columns,show.given = TRUE, col = par("fg"), pch = par("pch"),
xlab = paste("Given :", a.name),ylab = paste("Given :", b.name),
number = 6, overlap = 0.5, ...)
co.intervals(x, number = 6, overlap = 0.5)
• formula: Para definir la forma del gráfico condicional como y~x|a, indicando que
se graficará y versus x condicionados a la variable a. Si la fórmula es de la forma
y~x|a*b entonces los gráficos de y versus x serán condicionados sobre las
variables a y b. x y y deben ser numéricas pero a y b pueden no serlo.
• data: Un marco de datos que contiene los valores para cualquiera de las variables enla fórmula, aunque por defecto coplot usa los datos del ambiente en el cual ha sido
invocado.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 206/344
206
• given.values: Corresponde a un valor o lista de dos valores los cuales determinan
cómo los condicionamientos sobre a y b van a darse. Si sólo 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 también
puede ser un vector de números o un conjunto de niveles de un factor cuando la
variable sobre la que se condiciona es un factor. En caso de sólo una variable
condicionante, el resultado de co.intervals(..) puede ser usado directamente como el
valor de este argumento.
• panel: Es una función function(x,y, col, pch, ...) que realiza la
acción a ser ejecutada en cada panel del gráfico. Por defecto es “ points”.
• rows: Los paneles del gráfico son puestos en un arreglo de filas por columnas. Este
argumento da el número de filas en el arreglo.
• columns: Corresponde al número de columnas en el arreglo de paneles.
• show.given: Es un argumento lógico, que puede ser de longitud dos cuando se
tienen dos variables condicionantes. Por defecto (TRUE) los gráficos se presentan
para las correspondientes variables condicionantes
• col: Para especificar un vector de colores a ser usados para los puntos. Si es muy
corto los valores son reciclados.
• pch: Para especificar un vector de símbolos de graficación.
• xlab, ylab: Para etiquetar a la primera y segunda variable condicionante
respectivamente.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 207/344
207
• number: Número entero, para indicar el número de intervalos de la variable
condicionante. Puede ser de longitud dos para la dirección x y y.
• overlap: Un valor numérico < 1, con el que se especifica la fracción de
superposición de los intervalos de las variables condicionantes, puede ser de longitud
2 para la dirección x e y. Un valor negativo produce huecos entre tramos de datos.
Ejemplo 1: Ver figura 8.6.
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, ...))
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 208/344
208
Figura 8.6: Hay paneles vacíos indicando que las mujeres no tomaron las
electivas correspondientes. En cuanto a la influencia del sexo y la electiva sobre
los resultados en matemática no parecen ser determinantes.
Ejemplo 2: Ver figura 8.7.
aux<- fisica ~ conoc.mat | apt.verbal*apt.mat
coplot(aux,number=c(3,4),overlap=c(0,0.1))
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 209/344
209
Figura 8.7: A mayor aptitud matemática y verbal mejores resultados en física y
en matemáticas. también quien tiene buenos resultados en matemáticas logra
buenos resultados en física.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 210/344
210
Parte IIIEstadística en R
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 211/344
211
Capítulo 9: Modelos Estadísticos 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 combinación de varias funciones produce resultados excelentes. R es
bastante flexible para la creación de modelos altamente complejos.
9.1. Estadística Básica
Cálculos estadísticos básicos se pueden desarrollar de acuerdo con las necesidades
individuales. El R en este sentido es bastante diferente a otros programas que generan un
gran número de estadísticas, muchas inútiles. Si se requiere un análisis en particular se
recomienda crear una función que produzca todos los resultados necesarios en nuestro
problema usando las primitivas proporcionadas por el programa. Las funciones básicas son:
9.1.1 mean():
Permite calcular la media aritmética y medias recortadas de un vector.
mean(x, ...)
mean.default(x, trim = 0, na.rm = FALSE)
Argumentos:
• x: Vector num\'rico cuyos valores van a promediarse. Sólo se permiten vectores
complejos con `trim=0'.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 212/344
212
• trim: Fracción de recorte (de 0 a 0.5) de cada extremo de `x' antes de calcular la
media.
• na.rm: Un valor lógivo para indicar si valores `NA' deberían ser ignorados para los
cálculos.
Ejemplo:
x <- c(0:10, 50)
xm <- mean(x)xm
[1] 8.75
xt<-mean(x, trim = .10)
xt
[1] 5.5
9.1.2 weighted.mean():
Calcula una media ponderada de un vector numérico.
weighted.mean(x, w, na.rm=FALSE)
Argumentos:
• x: Vector num\'rico.
• w: Vector con los pesos para cada valor en `x'.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 213/344
213
• na.rm: Un valor lógivo para indicar si valores `NA' deberían ser ignorados para los
cálculos. si no se especifican, entonces a todos los valores se les da el mismo peso.
Ejemplo
wt <- c(5, 5, 4, 1)/15
x <- c(3.7,3.3,3.5,2.8)
xw <- weighted.mean(x,wt)
xw
[1] 3.453333
9.1.3 cor(), var() y cov():
var calcula la matriz de varianzas y covarianzas de una matriz de datos, cor y cov
calculan respectivamente, la correlación y la covarianza entre dos vectores `x' y `y'
var(x, y = NULL, na.rm = FALSE, use)
cor(x, y = NULL, use = "all.obs")
cov(x, y = NULL, use = "all.obs")
Argumentos:
• x: Un vector o matriz numéricos o un data frame.
• y: `NULL' (por defecto) o un vector, matriz o dataframe compatible con la
dimensión de `x'. el valor por defecto es `y = x'.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 214/344
214
• use: Una cadena de caracteres opcional para indicar el método para calcular
covarianzas en la presencia de valores faltantes. Debe ser una abreviación de las
siguientes cadenas “all.obs”, `"complete.obs"' o “ pairwise.complete.obs”.
• na.rm: Argumento lógico. ¿Deberían removerse los valores faltantes?.
Detalles: Si `use' es “all.obs” entonces si faltan observaciones se producirá un error. Si es
“complete.obs”, entonces las observaciones faltantes son descartadas y si es
“ pairwise.complete.obs”, entonces la correlación entre cada par de variables es calculada
usando todos los pares completos de observaciones de estas variables. Esto último puede
producir matrices de correlación o de covarianzas que no son semidefinidas positivas.
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]
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 215/344
215
[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():
Calcula la media de un vector de numérico.
median(x, na.rm=FALSE)
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 216/344
216
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)
[1] -0.7920829 0.2105797
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
9.1.5 max(), min():
Devuelven el máximo y el mínimo respectivamente, de un vector.
9.1.6 pmax(), pmin():
Toman varios vectores como argumentos y retornan un sólo vector dando el máximo y el
mínimo 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
más 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)
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 217/344
217
[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():
Produce los cuantiles muestrales correspondientes a las probabilidades dadas. La
observación más pequeña corresponde a una probabilidad de 0 y la más grande a una
probabilidad de 1.
quantile(x, probs = seq(0, 1, 0.25), na.rm = FALSE, names = TRUE)
Argumentos:
• x: Un vector numérico.
• probs: Un vector numérico con valores en $[0,1]$.
•
na.rm: Argumento logico; si es TRUE ningún valor faltante es removido antes decalcular los cuantiles.
• names: Argumento logico; si es TRUE el resultado tiene unos atributos de nombres.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 218/344
218
quantile(x,p) como función de p interpola linealmente los puntos ((i-1)/(n-
1),ox[i]) , donde ox<-order(x) (los estadísticos 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:
quantile(x <- rnorm(1001))
0% 25% 50% 75% 100%
-3.59904264 -0.71189944 -0.02124716 0.59595264 2.82691475quantile(x,probs=1:10/10)
10% 20% 30% 40% 50% 60%
-1.28010254 -0.89459997 -0.57376772 -0.27029481 -0.02124716 0.18551332
70% 80% 90% 100%
0.45891799 0.76740515 1.20626043 2.82691475
9.1.8 range():
Devuelve un vector con los valores mínimo y máximo de todos los argumentos dados.
Ejemplos:
print(r.x <- range(rnorm(100)))
[1] -2.314519 1.967344
diff(r.x) # El rango muestral[1] 4.281863
9.1.9 rank():
Devuelve los rankeos de los valores de un vector numérico, de menor a mayor.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 219/344
219
Ejemplos:
(r1 <- rank(x1 <- c(3,1,4,59,26)))
[1] 2 1 3 5 4
(r2 <- rank(x2 <- c(3,1,4,5,9,2,6,5,3,5))) # ties
[1] 3.5 1.0 5.0 7.0 10.0 2.0 9.0 7.0 3.5 7.0
9.1.10summary():
Con esto obtenemos varias estadísticas 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
Veamos ahora un ejemplo en el cual se obtienen estadísticos y gráficos varios univariados:
PROGRAMA PARA OBTENER UN ANALISIS PRELIMINAR DATOS SOBRE EL
CONTENIDO DE ALCOHOL, CALORIAS Y PAIS EN CERVEZAS
LECTURA DE DATOS EN R
> 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=“)
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 220/344
220
> title(main='Distribución 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='Distribución del Contenido de Alcohol \n
en Diferentes Cervezas')
> boxplot(split(cerveza.dat[,2],cerveza.dat[,1]),col='grey',
ylab='% de Alcohol',main=“)
> title(main='Distribución del Contenido de Alcohol \n en
Diferentes Cervezas por Países')
3) GRAFICO DE DISPERSION
> plot(cerveza.dat[,2],cerveza.dat[,3],col='grey',x
lab='% de Alcohol',ylab='Calorías',main=“)
> plot(cerveza.dat[,2],cerveza.dat[,3],xlab='% de Alcohol',
ylab='Calorías',main=“)
> title(main='Contenido de Alcohol vs. Calorías \n
en Diferentes Cervezas')
4) MEDIDAS DE RESUMEN
> calcule.todo(cerveza.dat[,2])
Estadisticas Basicas
Medidas de Localizacion
Media= 5.012704
Mediana= 4.96
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 221/344
221
Minimo= 2
Percentil 5%= 4.092
Percentil 10%= 4.27Primer Cuartil= 4.655
Tercer Cuartil= 5.245
Percentil 90%= 5.906
Percentil 95%= 6.322
Maximo= 9.5
Medidas de Dispersion
rango Intercuartil= 0.59
Varianza= 0.6129312
Desviacion Tipica= 0.7828993
Desviacion Media Absoluta= 0.501083
Desv. Media Absoluta Robusta= 0.4972327
Diferencia Media de Gini= 0.7636707
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%
>
graficos......histcerv.ps boxpcerv.ps *cerv.ps
9.2. Fórmulas en R
Una fórmula en R es una expresión simbólica que define la forma estructural del modelo y
es utilizada en funciones que ajustan modelos. Un ejemplo de una fórmula es el siguiente:
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 222/344
222
precio ~ modelo + tipo
La expresión al lado izquierdo de “~” es la respuesta, o la variable dependiente. En este
caso la respuesta es el precio. El lado derecho de la fórmula corresponde a la expresión
usada para ajustar la respuesta. En el caso anterior tenemos un modelo aditivo y los
términos están separados por el signo “+”. A pesar de no aparecer explícitamente, se asume
el intercepto.El modelo anterior con la inclusión del intercepto será:
Precio ~ 1 + modelo + tipo
Una fórmula puede llegar a ser bastante compleja. En la fórmula arriba hemos incluído la
variable tipo que es categórica.Los siguientes tipos de datos pueden aparecer en una
fórmula:
1) Un vector numérico, lo cual implica la presencia de un coeficiente;
2) un factor o un factor ordenado, lo cual implica un coeficiente para cada nivel;
3) una matriz, lo que implica un coeficiente por cada columna y
4) cualquier expresión válida en R que evalúe a una variable correspondiente a cualquiera
de los tipos anteriormente descritos. Por ejemplo (modelo>75) evalúa una variable
lógica.
9.2.1 Interacción y Encajamiento
Las fórmulas en R pueden ser bastante compactas. Por ejemplo la fórmula
precio ~ modelo*tipo
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 223/344
223
es equivalente al modelo
precio ~ 1 + modelo + tipo + modelo:tipo
donde el término modelo:tipo representa la interacción entre el modelo y el tipo.
Términos encajados surgen cuando los niveles de un factor dentro de un nivel de algún otro
factor o combinación de factores. Por ejemplo si tenemos datos geográficos 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 fórmula será:
1 + departamento + municipio \%in\% departamento
9.2.2 Función formula
La función genérica formula y sus métodos específicos proporcionan una manera de
extraer fórmulas las cuáles han sido incluidas en otros objetos. as.formula es casi
idéntica pero adicionalmente preserva atributos del objeto. El valor por defecto del
argumento env es usado sólo cuando la fórmula carezca de un ambiente.
y ~ model
formula(x, ...)
as.formula(object, env=parent.frame())
I(x)
Argumentos:
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 224/344
224
• x, object: Un objeto.
• ...: Argumentos adicionales pasados a o desde otros métodos.
• env: El ambiente a asociar con el resultado.
Detalles:
• Los modelos a justar por funciones como lm y glm son especificados en una
forma simbólica compacta. El operador ~ es básico en la formación de tales modelos.
Una expresión de la forma y ~ model es interpretado como una especificación de
que la respuesta `y' es modelada por un predictor lineal especificado simbólicamente
por `model'. Tal modelo consiste de una serie de términos separados por operadores
`+'. Los términos en sí mismos consisten de nombres de variables y factores
separados por operadores `:'. Tal término es interpretado como la interacción de
todas las variables y factores que aparecen en el término.
• Además de `+' y `:', otros operadores son útiles en fórmulas 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 idéntico a
(a+b+c)*(a+b+c) en cambio expande a una fórmula que contiene los efectos
principales para a', `b' y `c' junto con sus interacciones de segundo orden. El
operador `%in%' indica que los términos a su izquierda están anidados con aquellos a
su derecha. Por ejemplo a+b%in%a expande a la fórmula a+a:b. El operador -'remueve los términos especificados, de modo que (a+b+c)^2-a:b es idéntico a a+b+c+b:c+a:c. Puede usarse también para remover el término intercepto: y~x-
1 es una recta que pasa por el origen. Un modelo sin intercepto puede especificarse
también como y~x+0 o 0+y~x.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 225/344
225
• Mientras las fórmulas sólo involucren variables y nombres de factores, pueden
también incluir expresiones aritméticas. La fórmula log(y)~a+log(x) es
bastante legal. Cuando tales expresiones aritméticas incluyen operadores que son
también usados simbólicamente en la fórmula del modelo, puede haber confusión
entre el operador aritmético y el simbólico.
• Para evitar esta confución, la función I() puede usarse para encerrar entre paréntesis
aquellas porciones de una fórmula de modelo donde los operadores son usados en su
sentido aritmético. Por ejemplo, en la fórmula y~a+I(b+c) el término `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 fórmula de modelo simbólica.
Ambientes: Un objeto fórmula 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 fórmulas creadas con as.formula serán usadas en el argumento env
por su ambiente. Fórmulas preexistentes estraidas con as.formula sólo tendrán su
ambiente cambiado si env es dado explícitamente.
Ejemplos:
>class(fo <- y ~ x1*x2)
[1] "formula"
> fo
y ~ x1 * x2
> typeof(fo)
[1] "language"
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 226/344
226
> 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 2attr(,"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>
>
#Creación de una fórmula para un modelo
#con muchas variables:
#definiendo nombres de variables:
xnam <- paste("x", 1:25, sep="")
#definiendo fórmula:
>(fmla <- as.formula(paste("y ~ ", paste(xnam, collapse= "+"))))
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 227/344
227
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
9.3. Funciones para pruebas estadísticas
En R encontramos disponibles en el paquete ctest las siguientes funciones para
diversas pruebas:
ansari.test(ctest) Prueba Ansari-Bradley
bartlett.test(ctest) Prueba de Bartlett para
homogeneidad de varianzas
binom.test(ctest) Prueba Binomial exacta.
chisq.test(ctest) Prueba Chi-cuadrado de Pearson para
datos de conteo
cor.test(ctest) Prueba para asociación entre
muestras pareadas
fisher.test(ctest) Prueba exacta de Fisher para datos
de conteo
fligner.test(ctest) Prueba Fligner-Killeen para
homogeneidad de varianzas
friedman.test(ctest) Prueba Friedman de suma de rangos
kruskal.test(ctest) Prueba de suma rangos Kruskal-Wallis
ks.test(ctest) Prueba Kolmogorov-Smirnov
mantelhaen.test(ctest) Prueba Chi-cuadrado de Cochran-Mantel-Haenszel
para datos de conteo
mcnemar.test(ctest) Prueba Chi-cuadrado de McNemar
para datos de conteo
mood.test(ctest) Prueba de escala Mood para dos muestras
oneway.test(ctest) Prueba de igualdad de medias en
diseño de una vía
pairwise.prop.test(ctest) Comparaciones pareadas de proporciones
pairwise.t.test(ctest) Prueba t datos pareados
pairwise.wilcox.test(ctest) Prueba de suma de rangos Wilcoxon
pareada
power.prop.test(ctest) Cálculos de potencia pruebas de
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 228/344
228
dos muestras para proporciones
power.t.test(ctest) Cálculos de potencia para
pruebas t de una y dos muestrasprint.pairwise.htest(ctest) Método de impresión para
pruebas pareadas
print.power.htest(ctest) Método de impresión para objeto de
cálculo 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 varianzaswilcox.test(ctest) Pruebas de suma de rango de Wilcoxon k y
rango con signo
9.3.1 Test de normalidad: Función shapiro.test
En la librería ctest , se encuentra disponible la prueba de normalidad Shapiro-Wilk.
shapiro.test(x)
Argumentos:
• x: Un vector numérico, de longitud entre 3 a 5000.
Valor: Una lista de clase `'htest” que contiene:
• statistic: El valor del estadístico Shapiro-Wilk
• p.value: El valor p de la prueba.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 229/344
229
• method: Cadena de caracteres “Shapiro-Wilk normality test”
• data.name: Una cadena de caractere dando el nombre de los datos.
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
9.4. Regresión lineal Clásica
La regresión lineal clásica es la herramienta estadística más utilizada. R presenta un
conjunto de funciones que permiten realizar el trabajo de una forma poco tradicional.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 230/344
230
Siguiendo la filosofía 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().
9.4.1 Función lm :
Es usada para ajustar modelos lineales. Puede usarse para realizar regresiones, análisis de
varianza de un solo estrato, y análisis de covarianza (aunque aov puede dar una interface
más conveniente para estas).
lm(formula, data, subset, weights, na.action,method = "qr", model = TRUE,
x = FALSE, y = FALSE, qr = TRUE,singular.ok = TRUE, contrasts = NULL,
offset = NULL, ...)
Argumentos:
• formula: Una descripción simbólica del modelo a ser especificado.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 231/344
231
• data: Marco de datos opcional que contiene las variables en el modelo. por defecto
las variables son tomadas de `environment(formula)' , típicamente el
ambiente del cual lm es llamada.
• subset: Un vector opcional para especificar un subconjunto de observaciones usadas
en el proceso de ajuste.
• weights: Un vecto opcional con pesos a ser usados en el proceso de ajuste. Si es
especificado, mínimo cuadrados ponderados es usado con los pesos especificados, es
decir, se minimiza sum(w*e^2); de lo contrario se usa mínimos cuadrados
ordinarios.
• na.action: Una función que indica lo que debería hacerse cuando hay datos faltantes
`NA's. El valor por defecto es el ajustado por na.action'.
• method: El método a ser usado para el ajuste. Actualmente sólo es soportado el
método `qr' ; `method='model.frame’ ' devuelve el marco del modelo.
• model, x, y, qr: Argumentos lógicos. Si son iguales a `TRUE' los componentes
correspondientes del ajuste (el marco del modelo, la matriz del modelo, la respuesta,
la descomposición QR) son devueltos.
• singular.ok: Argumento lógico, por defecto es `TRUE'. `FALSE' no está
implementado.
• contrasts: Una lista opcional. Ver `contrasts.arg' de
`model.matrix.default'.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 232/344
232
• offset: Puede usarse para especificar una componente conocida anterior a ser
incluida en el predictor lineal durante el ajuste. Un término `offset' puede ser
incluido en la fórmula en vez o también, y si ambos son especificados su suma es
usada.
• ...: Argumentos adicionales.
Detalles: Los modelos para lm se especifican simbólicamente. El modelo usual tiene la
forma respuesta~términos donde respuesta es el vector de respuesta y
términos es una serie de predictores lineales. Estos términos se especifican de la forma
`primero+segundo' indica todos los términos en `primero' junto con todos los
términos en `segundo' con duplicaciones removidas. Una especificación de la forma
`primero:segundo' indica el conjunto de términos obtenidos tomando las interacciones
de todos los términos en `primero' con todos los términos en `segundo'. La
especificación `primero*segundo' indica el cruce de `primero' y `segundo' . Esto
es lo mismo que primero+segundo+primero:segundo'.
Las funciones summary y anova son usadas para obtener e imprimir un resumen y una
tabla de análisis de varianzas de los resultados. Las funciones genéricas extractoras
coefficients, effects, fitted.values y residuals extraen varias
características útiles de los valores retornados por lm.
Un objeto de clase “lm” es una lista con los siguientes componentes, entre otros:
• coefficients: Un vector con los coeficientes
• residuals: Los residuales, es decir la respuesta menos valores ajustados.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 233/344
233
• fitted.values: Los valores ajustados.
• rank: El grado del modelo lineal ajustado.
• weights: Pesos si se hizo ajuste ponderado.
• df.residual: Grados de libeertad de los residuales.
• formula: La fórmula dada.
• terms: El objeto `terms' usado.
• contrasts: Sólo donde son relevantes, los contrastes usados.
• xlevels: Sólo si son relevante, un registro de los niveles de los factores usados en el
ajuste.
• y: Si es requerido, la respuesta usada.
• x: Si es requerido, la matriz modelo usada.
• model: El marco de modelo usado.
Nota: los offsets especificados por `offset' no serán incluidas las predicciones por
predict.lm mientras aquellas especificadas por un término offset en formula si será
incluido.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 234/344
234
Ver también: summary.lm, anova.lm, coefficients, effects, residuals,
fitted.values, predict.lm (para predicción e intervalos de predicción),
lm.influence (para diagnósticos de regresión) y glm (para modelos lineales
generalizados).
9.4.2 Función lsfit:
Halla los estimadores mínimo cuadrados del modelos y=X b + e.
lsfit(x, y, wt=NULL, intercept=TRUE, tolerance=1e-07, yname=NULL)
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 múltiple ajuste en el
lado izquiedo.
• wt: Un vector opcional de pesos para mínimos cuadrados ponderados.
• intercept: Para indicar si o no será usado un término de intercepto.
• tolerance: La tolerancia a usar en la descomposición de la matriz.
• yname: Un parámetro no usado para compatibilidad.
Detalles: Las observaciones con campos faltantes son omitidas antes del análisis.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 235/344
235
Valor: Una lista con los siguientes componentes:
• coef: Las estimaciones mínimo cuadráticas de los coeficientes.
• residuals: Los residuales del ajuste.
• intercept: Indica si un intercepto fue hallado.
• qr: La descomposición QR de la matriz de diseño.
9.4.3 Función ls.diag:
Calcula diagnósticos para resultados de regresión con lsfit, estadísticos básicos
incluyendo errores estándar, valores t y valores p, para los coeficientes de regresión.
ls.diag(ls.out)
Argumentos:
• ls.out: El resultado de lsfit().
Valor: Una lista con los siguientes componentes:
• std.dev: La desviación estándar de los errores, una estimación de sigma.
• hat: Entradas hii de la matriz hat.
• std.res: Residuales estandarizados.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 236/344
236
• stud.res: Residuaes estudentizados.
• cooks: Distancias Cook's.
• dfits: Estadísticos DFITS.
• correlation: Matriz de correlación.
• std.err: Errores estándar de los coeficientes de la regresión.
• cov.scaled: Matriz de covarianza de los coeficientes escala.
• cov.unscaled: Matriz de covarianza de los coeficientes no escalada.
Como un ejemplo de lsfit() tenemos el siguiente programa que hace referencia a los precios
de oferta de carros Renault que aparecen en el apéndice. Dediquemos un momento a
plantear el modelo que podría explicar el precio de oferta de carros Renault. Una variableque explica el precio de oferta es el año del carro. Obviamente esperamos que un carro
viejo sea más barato que un carro más nuevo, asimismo el modelo o tipo del carro, si es R4
esperamos tenga un menor valor que un R12 del mismo año. Preguntas interesantes pueden
ser: Cuál es el cambio en el precio de oferta entre dos carros de años consecutivos? La
diferencia en precios entre R4 y R12 se conserva para diferentes años? etc. Dado que en el
conjunto de datos tenemos una variable alfanumérica no podemos utilizarla directamente en
la función lsfit(). Podemos crear una función como la siguiente que nos crea una variable
binaria a partir de una variable alfanumérica y luego la usamos con apply() para resolver
este inconveniencia:
> binaria<-function(a,texto,b)
> if(a==texto) b<-0
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 237/344
237
> 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)
El objeto que se produce es el siguiente:
$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
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 238/344
238
$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
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 239/344
239
Un resumen mejor del objeto anterior se obtiene con la función print.ls()
> print.ls(renault.reg)
Residual Standard Error = 0.3477, Multiple R-Square = 0.9057
N = 19, F-statistic = 76.8016 on 2 and 16 df, p-value = 0
coef std.err t.stat p.value
Intercept -9.8461 1.2982 -7.5844 0
0.1619 0.0164 9.8596 0
tipo 1.5277 0.1647 9.2772 0
Si se desea realizar diagnósticos entonces podemos utilizar la función ls.summary() . Esta
función cuando es aplicada al objeto creado por lsfit() produce los bien conocidos
resultados de Belsey et al. Por ejemplo en el caso de los carros Renault:
> 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
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 240/344
240
[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:
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 241/344
241
Intercept tipo
Intercept 1.0000000 -0.9967344 -0.2444971
-0.9967344 1.0000000 0.1937247tipo -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
Si queremos un gráfico Cuantil-Cuantil para ver si los residuales studentizados se
aproximan a la normal podemos dar los siguientes comandos:
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”)
9.4.4 Función step:
Elige un modelo con el criterio AIC en un algoritmo Stepwise
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 242/344
242
step(object,scope,scale=0,direction=c("both","backward","forward"),
trace=1,keep=NULL,steps=1000,k=2,...)
Argumentos:
• object: Un objeto representando un modelo de una clase apropiada (principalmente
“lm” y “glm”). Este es usado como el modelo inicial en la búsqueda stepwise.
• scope:
Define el rango de los modelos examinados en la búsqueda stepwise. Debe
ser ya sea una fórmula, o una lista que contiene las componentes `upper' y `lower',
ambas fórmulas.
• scale: Usada en la definición del estadístico AIC para seleccionar los modelos,
actualmente, sólo para los modelos lm.aov y glm.
• direction: El modo de búsqueda, puede ser uno de los siguientes: `'both”,
`'backward”, o `'forward”, siendo por defecto `'both”. Si el argumento `scope' no es
especificado (o el modelo inicial es el modelo superior) el valor por defecto para
`direction' es 'backward”.
• trace: Si es positivo, la información es impresa durante la corrida de step . Valores
grandes pueden dar información más detallada.
• keep: Una función filtro cuya entrada es un objeto modelo ajustado y el estadísticoAIC asociado, y cuya salida es arbitraria. Típicamente este argumento selecciona un
subconjunto de las componentes del objeto y las retorna. El valor por defecto es no
guardar nada.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 243/344
243
• steps: El número máximo de pasos a ser considerado. Por defecto es 1000.
• k: El múltiplo de los grados de libertad usado para penalización. Sólo `k = 2' da el
genuino AIC: `k = log(n)' es algunas veces referido como BIC o SBC.
• ...: Cualesquier argumentos adicionales para `extractAIC'.
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
función extractAIC.glm hace el ajuste apropiado para una familia gaussiana, pero
pueden ser necesarias correciones para otros casos.
Valor: El modelo seleccionado stepwise es devuelto, con hasta dos componentes
adicionales. Hay una componente `'anova” correspondiente a los pasos tomados en la
búsqueda, como también una componente `'keep” si el argumento `keep=' fue
proporcionado. La columna `'Resid. Dev” de la tabla de análisis del deviance se refiere a
una constante menos dos veces el log de verosimilitud maximizado: Será un deviance sóloen los casos donde un modelo saturado sea bien definido.
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 función tiene una implementación mínima. Usar la función stepAIC de la librería
MASS para un rango de objetos más amplio.
Autor: B. D. Ripley.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 244/344
244
Ver también: `stepAIC' (en librería MASS), `add1', `drop1'
Ejemplo: Tomado Directamente de R:
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
Residual standard error: 7.165 on 41 degrees of freedom
Multiple R-Squared: 0.7067, Adjusted R-squared: 0.671
F-statistic: 19.76 on 5 and 41 DF, p-value: 5.594e-10
slm1 <- step(lm1)
Start: AIC= 190.69
Fertility ~ Agriculture + Examination + Education + Catholic +
Infant.Mortality
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 245/344
245
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
Step: AIC= 189.86
Fertility ~ Agriculture + Education + Catholic + Infant.Mortality
Df Sum of Sq RSS AIC
<none> 2158.1 189.9
- Agriculture 1 264.2 2422.2 193.3
- Infant.Mortality 1 409.8 2567.9 196.0
- Catholic 1 956.6 3114.6 205.1
- Education 1 2250.0 4408.0 221.4
> summary(slm1)
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 **
---
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 246/344
246
Signif. codes: 0 `***' 0.001 `**' 0.01 `*' 0.05 `.' 0.1 ` ' 1
Residual standard error: 7.168 on 42 degrees of freedomMultiple R-Squared: 0.6993, Adjusted R-squared: 0.6707
F-statistic: 24.42 on 4 and 42 DF, p-value: 1.717e-10
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
9.4.5 Medidas de Influencia
El siguiente conjunto de funciones permiten calcular algunos de los diagnósticos de
regresión discutidos en Belsley, Kuh and Welsch(1980), y en Cook and Weisberg (1982).
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 = ...)
hat(x, intercept = TRUE)
Argumentos:
• lm.obj: El objeto resultante devuelto por lm.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 247/344
247
• infl: Estructura de influencia como la retornada por la función lm.influence.
• res: Residuales, posiblemente ponderados.
• sd: Desvaición estándar a usar.
• x: X o la matriz de diseño.
• intercept: Debería una columna intercepto ser pre anexada a X?
Detalles: La función principal es influence.measures que produce un objeto
tabular de clase “infl” mostrando los DFBETAS para cada variable del modelo, DFFITS,
covariance ratios, Cook's distances y los elementos de la diagonal de la matriz Hat. Los
casos que son influenciales para cualquiera de estas medidas son marcados con asterisco.
Las funciones dfbetas, dffits, covratio y cooks.distance proporcionan
acceso directo a las correspondientes cantidades de diagn'ostico. Las funcionesrstandard y rstudent dan respectivamente, los residuales estandarizados y
estudentizados.
Los argumentos opcionales `infl', `res' y `sd' están allí para el uso de estas funciones de uso
directo, cuando por ejemplo, las medidas subyacentes de influencia básicas (de
lm.influence) ya están disponibles.
Referencias.
• Belsley, D. A., Kuh, E. and Welsch, R. E. (1980) Regression Diagnostics. New York:
Wiley.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 248/344
248
• 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 sólo 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
#Obteniendo una medida específica:
covratio(lm.SR)
Australia Austria Belgium Bolivia Brazil
1.1928303 1.2678392 1.1761879 1.2238199 1.0823332
Canada Chile China Colombia Costa Rica
1.3283009 0.6547098 1.1498637 1.1666845 0.9681384
Denmark Ecuador Finland France Germany
0.9344047 1.1393880 1.2031561 1.2262654 1.2256855
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 249/344
249
Greece Guatamala Honduras Iceland India
1.1396174 1.0852720 1.1855450 0.8658808 1.2024438
Ireland Italy Japan Korea Luxembourg1.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 Malaysia0.5116454 1.1995171 1.1872025 2.0905736 1.1126445
9.5. Mínimos cuadrados no lineales: Función nls
En el paquete nls se halla la función nls que permite hallar estimaciones de los
parámetros en modelos no lineales.
nls(formula, data, start, control = nls.control(),
algorithm = "default", trace = FALSE, subset,
weights, na.action)
Argumentos:
• formula: Fórmula de un modelo no lineal que incluye variables y parámetros.
• data: Un data frame opcional en el cual se hallen las variables en `formula'.
• start: Una lista de denominación o vector numérico de estimaciones iniciales.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 250/344
250
• control: Una lista opcional de ajustes de control.
• algorithm: Cadena de caracteres especificando algoritmo a usar. Por defecto es el
algoritmo Gauss-Newton. Puede ser también “ plinear ”, el algoritmo Golub-Pereyra
para modelos mínimo cuadrados parcialmente lineales.
• trace: Argumento lógico para solicitar traza de las iteraciones. Por defecto es
`FALSE'.
• subset: Vector opcional para especificar un subconjunto de observaciones a ser
usados en el ajuste.
• weights: Vector opcional de pesos. Si se da, la función objetivo es de mínimos
cuadrados ponderados. No está implementada.
• na.action: Función de acción para valores `NA's.
Valor: Una lista con:
• m: Un objeto `nlsModel'.
• data: Los datos sobre los que se ajustó.
Autor: Douglas M. Bates and Saikat DebRoy
Ejemplos:
library(nls)
data( DNase )
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 251/344
251
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 )
Formula: density ~ SSlogis(log(conc), Asym, xmid, scal)
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
Residual standard error: 0.01919 on 13 degrees of freedom
Correlation of Parameter Estimates:
Asym xmid
xmid 0.9868
scal 0.9008 0.9063
## usando linealidad condicional
> fm2DNase1 <- nls( density ~ 1/(1 + exp(( xmid - log(conc) )/scal ) ),
data = DNase1,start = list( xmid = 0, scal = 1 ),
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 252/344
252
alg = "plinear", trace = TRUE )
0.7139315 : 0.000000 1.000000 1.453853
0.1445295 : 1.640243 1.390186 2.4617540.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
> summary( fm2DNase1 )
Formula: density ~ 1/(1 + exp((xmid - log(conc))/scal))
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
Residual standard error: 0.01919 on 13 degrees of freedom
Correlation of Parameter Estimates:
xmid scal
scal 0.9063
.lin 0.9868 0.9008
##Sin linealidad condicional:
fm3DNase1 <- nls( density ~ Asym/(1 + exp(( xmid - log(conc) )/scal ) ),
data = DNase1,
start = list( Asym = 3, xmid = 0, scal = 1 ),
trace = TRUE )
14.32279 : 3 0 1
0.4542698 : 2.1152456 0.8410193 1.2000640
0.05869601 : 2.446376 1.747516 1.189515
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 253/344
253
0.005663523 : 2.294087 1.412198 1.020463
0.004791528 : 2.341429 1.479688 1.040758
0.004789569 : 2.345135 1.483047 1.0414390.004789569 : 2.345179 1.483089 1.041454
>
> summary( fm3DNase1 )
Formula: density ~ Asym/(1 + exp((xmid - log(conc))/scal))
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
Residual standard error: 0.01919 on 13 degrees of freedom
Correlation of Parameter Estimates:
Asym xmid
xmid 0.9868
scal 0.9008 0.9063
9.6. Análisis Multivariable
El análisis multivariable trata con datos que contienen observaciones con dos o más
variables obtenidas por cada sujeto. Vamos a suponer que nuestra matriz de datos se llamaDATOS y que es numérica. Cada fila representa las variables observadas a cada sujeto y
cada columna representa el conjunto de observaciones para una variable.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 254/344
254
9.6.1 Discriminación, Función: lda
El problema de clasificación consiste en clasificar un individuo en una de k poblaciones P 1 ,
P 2 , ... ,P k . Para ello se utiliza una regla construida teniendo como base las mediciones de d
variables de n individuos, digamos x1 , x2 , ... , xn, los cuales sabemos a cuales poblaciones
pertenecen con certeza. La técnica para construir la regla se conoce como discriminación.
La función R Disponible en el paquete mass, lda permite realizar análisis discriminante
lineal.
lda(formula, data, prior = proportions, tol = 1.0e-4,
subset, na.action = na.fail,
method, CV = FALSE, nu)
lda(x, grouping, prior = proportions, tol = 1.0e-4,
subset, na.action = na.fail,
method, CV = FALSE, nu)
Argumentos:
• formula: Una fórmula de la forma `groups~x1+x2+...' , es decir la respuesta
es el factor de agrupamiento y el lado derecho especifica los discriminadores.
• data: Data frame dese el cual se toman las variables especificadas en fórmula.
• x: Se requiere si no se da ninguna fórmula. Es una matriz de datos o data frame ouna matriz con las variables explicatorias.
• grouping: Se requiere si no de da ninguna fórmula. Es un factor que especifica la
clase de cada observación.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 255/344
255
• 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 función para especificar la acción a tomar con valores `NA's.
• method: “moment” para estimadores estándar de media y varianza, “mle”, para
estimadores MLE, “mve” para usar `cov.mve', o “t” para usar estimaciones robustas
basadas en la distribución t.
• CV: Si es TRUE, devuelve resultados (clases y probabilidades posteriores) para
validación cruzada. Si las probabilidades posteriores son estimadas, las proporciones
en el conjunto total de datos son usadas.
• nu: Grados de libertad para `method = “t” '.
•
...: Argumentos pasados a o desde otros métodos.
Esta función puede ser llamada dando un fórmula y un data frame opcional, o una matriz y
un factor de agrupamiento como los primeros dos argumentos. Los otros argumentos son
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 256/344
256
opcionales, pero `subset=' y `na.action=', si son requeridos, deben ser nombrados
completamente.
Valor: un objeto de clase “lda” que contiene los siguiente componentes:
• prior: Las probabilidades apriori usadas.
• means: Las medias de grupos.
• scaling: Una matriz que transforma las observaciones a funciones discriminantes,
normalizadas de manera que la matriz de covarianza dentro de los grupos es esférica.
• svd: Los valores singulares, los cuales dan la razón de las desviaciones estándar
entre y dentro de los grupos en las variables discriminantes lineales. Sus cuadrados
son los estadísticos F canónicos.
• N: El número de observaciones usadas.
• call: La llamada de la función
• class: La clasificación MAP.
• posterior: Las probabilidades posteriores para las clases.
Ejemplos:
library(mass)
data(iris3)
Iris <- data.frame(rbind(iris3[,,1], iris3[,,2], iris3[,,3]),
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 257/344
257
Sp = rep(c("s","c","v"), rep(50,3)))
train <- sample(1:150, 75)
table(Iris$Sp[train])
z <- lda(Sp ~ ., Iris, prior = c(1,1,1)/3, subset = train)
>z
Call:
lda.formula(Sp ~ ., data = Iris, prior = c(1, 1, 1)/3, subset = train)
Prior probabilities of groups:
c s v
0.3333333 0.3333333 0.3333333
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
Coefficients of linear discriminants:
LD1 LD2
Sepal.L. 0.5831979 -0.3812877Sepal.W. 1.8356729 2.6112610
Petal.L. -2.3052398 -0.7051669
Petal.W. -2.3131828 2.5428727
Proportion of trace:
LD1 LD2
0.9892 0.0108
predict(z, Iris[-train, ])$class
[1] s s s s s s s s s s s s s s s s s s s s s s s s s s s s c c c c c c c c c c[39] c c c c c c c c c c c c c v v v v v v v v v v v v v v v v v v v v v v v v
Levels: c s v
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 258/344
258
9.6.2 Función 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).
mahalanobis(x, center, cov, inverted=FALSE)
Argumentos:
• x: Vector o matriz de datos con p columnas.
• center: Vector de medias de la distribución o el segundo vector de datos de longitud
p.
• cov: Matriz de covarianza (p x p) de la distribución.
• inverted: Argumento lógico. Si es `TRUE', se supone que el argumento cov'
contiene la inversa de la matriz de covarianza.
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
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 259/344
259
[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)
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 260/344
260
Figura 9.1: Gráfico 2
que nos permite evaluar el supuesto de multinormalidad
9.6.3 Función cov.wt
Esta función proporciona una lista que contiene estimaciones de la matriz de covarianza
ponderada y la media de los datos , y opcionalmente, la matriz de correlación ponderada.
cov.wt(x, wt = rep(1/nrow(x), nrow(x)), cor = FALSE, center = TRUE)
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 número de filas de `x'.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 261/344
261
• cor: Un argumento lógico para indicar si también deberá retornarse la matriz de
correlación estimada ponderada.
• center: Puede ser un argumento lógico o especificarse como un vector numérico
dando el centro a usar para calcular las covarianzas. Si es TRUE, se usa la media
ponderada de cada variable, ysi es FALSE, se usa cero. Si se especifica un vector, su
longitud debe ser igual al número de variables.
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 estimación usual insesgada de la matriz de
covarianza con divisor (n-1) es retornada.
Valor: Esta función arroja una lista con las siguientes componentes:
• cov: La matriz de covarianza ponderada estimada.
• center: Una estimación para el centro de los datos.
• n.obs: El número de observaciones.
• wt: Los pesos usados en la estimación. Sólo los devuelve cuando sean
especificados.
• cor:
La matriz de correlación estimada. Es devuelta sólo si el argumento
`cor=TRUE'.
9.6.4 Función prcomp
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 262/344
262
Esta función está disponible en el paquete mva, y permite realizar un análisis de
componentes principales sobre una matriz de datos dada y devuelve los resultados como un
objeto de clase `prcomp'.
prcomp(x, retx = TRUE, center = TRUE, scale. = FALSE, tol = NULL)
Argumentos:
• x: Matriz o data frame con los datos.
• retx: Argumento lógico para indicar si deben retornarse las variables rotadas.
• center: Argumento lógico para indicar si las variables deben ser desviadas para
centrarlas en cero. Alternativamente, puede ser un vector de longitud igual al número
de columnas de la matriz de datos. El valor es pasado a scale'.
• scale: Argumento lógico para indicar si las variables deberían ser escaladas para
que tengan varianza unitaria antes de que se realice el análisis. El valor por defecto
es `FALSE' . También puede proporcionarse un vector de longitud igual al número
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 deberían
ser omitidas. Las componentes son omitidas si sus desviaciones estándar son
menores o iguales a `tol' por la desviación estándar de la primera componente. Otros
ajustes pueden ser tol = 0' o `tol =sqrt(.Machine$double.eps)', lo cual podría omitir
componentes constantes.
Detalles: El cálculo es realizado mediante la descomposición SVD de la matriz de datos
centrada y escalada. Este es el método preferido por exactitud numérica. El método `print'
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 263/344
263
para estos objetos imprime los resultado en un buen formato y el método `plot' produce un
scree plot.
Valor: La función devuelve una lista de clase `'prcomp”, que contiene los siguientes
componentes:
• sdev: Las desviaciones estándar de las componentes principales, es decir, las raíces
cuadradas de los valores propios de la matriz de covarianza/correlación.
• rotation: La matriz de los loadings de las variables (es decir, una matriz cuyas
columnas son los vectores propios). La función princomp devuelve esto en el
elemento loadings'.
• x: Si `retx' es TRUE son devueltos los datos rotados (Los datos multiplicados por la
matriz de rotación).
Referencias:
• Mardia, K. V., J. T. Kent, and J. M. Bibby (1979) Multivariate Analysis, London:
Academic Press.
• Venables, W. N. and B. D. Ripley (1997, 9) Modern Applied Statistics with S-PLUS,
Springer-Verlag.
Ver también: `princomp', cor', cov', svd', `eigen'.
Ejemplos:
##Las varianzas en las variables en los datos
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 264/344
264
##USArrests varían 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.1Delaware 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.3Louisiana 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.5Nevada 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
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 265/344
265
North Dakota 0.8 45 44 7.3
Ohio 7.3 120 75 21.4
Oklahoma 6.6 151 68 20.0Oregon 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.7Washington 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
prcomp(USArrests, scale = TRUE)
Standard deviations:
[1] 1.5748783 0.9948694 0.5971291 0.4164494
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
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 266/344
266
Rape -0.5434321 0.1673186 -0.8177779 -0.08902432
plot(prcomp(USArrests))
summary(prcomp(USArrests, scale = TRUE))
Importance of components:
PC1 PC2 PC3 PC4
Standard deviation 1.57 0.995 0.5971 0.4164
Proportion of Variance 0.62 0.247 0.0891 0.0434
Cumulative Proportion 0.62 0.868 0.9566 1.0000
9.6.5 Función biplot.princomp
Esta función (disponible en librería mva) produce un biplot de los reultados del análisis de
componentes principales realizado con la función princomp.
biplot(x, choices = 1:2, scale = 1, pc.biplot = FALSE, ...)
Argumentos:
• x: Un objeto de clase `'princomp”.
• choices: Vector de longitud 2 para especificar las componentes a graficar.
• 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.
• pc.biplot: Si es TRUE, usa biplot de componente principal, con las observaciones
escaladas por arriba por la raíz cuadrada de n y las variables escaladas por abajo por
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 267/344
267
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.
• ...: Argumentos gráficos opcionales.
Referencias:
• Gabriel, K. R. (1971). The biplot graphical display of matrices with applications to
principal component analysis. Biometrika, 58, 453-467.
• Gabriel, K. R. and Odoroff, C. L. (1990). Biplots in biomedical research. Statistics in
Medicine, 9, 469-485.
9.6.6 Función biplot
Realiza un biplot de datos multivariados sobre el dispositivo gráfico actual. Un biplot es un
gráfico que pretende presentar tanto las observaciones y las variables de una matriz de
datos multivariados sobre un mismo gráfico. Hay muchas variaciones de un biplot y quizá
la más ampliamente usada es la implementada en la función biplot.princomp.
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:
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 268/344
268
• 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.
• y: El segundo conjunto de puntos o una matriz de dos columnas, usualmente
asociada con las variables.
• var.axes: Si es igual a `TRUE' el segundo conjunto de puntos tiene filas
representándolas como ejes.
• col: Un vector de longitus 2 dando los colores para el primer y segundo conjunto de
puntos respectivamente (y de los correspondientes ejes). Si sólo se especifica un
coloreste será usado en ambos conjuntos.
• cex: Factor de expación de caracter usado para etiquetar los puntos. Las estiquetas
pueden ser de diferentes tamaños para los dos conjuntos proporcionando un vector de
longitud 2.
• xlabs: Un vector de cadena de caracteres para etiquetar el primer conjunto de
puntos. Por defecto usa el nombre de dimensión de la fila de `y', o 1:n si la
dimensión es 'NULL'.
• expand: Un factor de expansión para aplicar cuando se traza el segundo conjunto de
puntos en relación al primero. Puede utilizarse para obtener los dos conjuntos sobre
una escala físicamente comparable.
• 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'.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 269/344
269
• xlim, ylim, ...: Parámetros gráficos.
Nota: La función biplot.default proporciona meramente el código subyacente
para graficar dos conjuntos de variables sobre la misma figura.
Autor: B.D. Ripley.
Referencias:
• K. R. Gabriel (1971). The biplot graphical display of matrices with application to
principal component analysis. Biometrika 58, 453-467.
• J.C. Gower and D. J. Hand (1996). Biplots. Chapman \& Hall.
Ejemplo:
data(USArrests)library(mva)
biplot(princomp(USArrests),cex=0.5,expand = 2.5,xlim=c(-0.6,0.4))
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 270/344
270
Figura 9.2: Gráfico Biplot de los datos en data(USArrest), en el análisis de
componentes principales
9.6.7 Función screeplot
Disponible en el paquete mva, realiza gráfico de las varianzas vs. el número de la
componente principal, con el fin de identificar el “codo” para decidir respecto al número de
componentes a dejar.
screeplot(x, npcs = min(10, length(x$sdev)), type = c("barplot",
"lines"), main = deparse(substitute(x)), ...)
Argumentos:
• x: un objeto de clase “ princomp”
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 271/344
271
• npcs: El número de componentes principales a graficar.
• type: El tipo de gráfico.
• main, ...: Parámetros gráficos.
Ejemplo:
library(mva)
data(USArrests)(pc.cr <- princomp(USArrests, cor = TRUE))
screeplot(pc.cr,type="lines")
Figura 9.3: Gráfico screeplot de los datos en data(USArrest), en el análisis de
componentes principales. Nos indica que las dos primeras componentes son
significativas.
9.6.8 Función factanal
Permite realizar análisis de factor mediante máxima verosimilitud, sobre una matriz de
covarianza o una matriz de datos. Disponible en le paquete mva.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 272/344
272
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 fórmula o una matriz numérica o un objeto que puede ser forzado a ser una
matriz numérica. factors: The number of factors to be fitted.
• data: Un data frame.
• covmat: Una matriz de covarianza, o una lista de covarianzas como la producida por
`cov.wt'.
• n.obs: El número de observaciones, usado si `covmat' es una matriz de covarianza.
• subset: Una especificación de los casos a usar, si `x' es usado como una matriz o
fórmula.
• na.action: El `na.action' a usar si `x' es usado como una fórmula.
• start: `NULL' o matriz de valores iniciales, con cada columna dando un conjunto
inicial de unicidades.
• scores: Tipo de scores a producir. Por defecto es ninguno, `'regression” da los
scores Thompson, `'Bartlett” da los scores mínimo cuadrados de Bartlett.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 273/344
273
• rotation: Caracter. `'none” o el nombre de una función a usar para rotar los factores:
será llamada con el primer argumento la matriz de loadings.
• control: Una lista de valores de control:
1. nstart: El número de valores de inicio a ser intentados si `start = NULL', por
defecto es 1.
2. trace logical: ¿Información de seguimiento de la salida? Por defecto es `FALSE'.
3. lower: El límite inferior para las unicidades durante la optimización. Debe ser
positivo, por defecto es 0.005.
4. opt: Una lista de valores de control a pasar al argumento `control' de `optim'.
5. rotate: Una lista de argumentos adicionales para la función de rotación.
• ...: Componentes de `control' pueden suministrarse como argumentos.
Detalles: El modelo de análisis de factor es x=Lambda f+e para un vector fila x de p
elementos, una matriz de loadings p x k un vector de scores de k elementos y un vector
de errores de p elementos. Excepto x ningún otro elemento es observado, los scores son
incorrelacionados y de varianza unitaria, y los errores son independientes con varianza , la
unicidad. Por tanto el análisis de factor en un modelo para la matriz de covarianza de x,
Sigma=Lambda'Lambda+Psi.
Las unicidades están restringidas al intervalo entre cero y 1, pero valores cercanos a cero
son problemáticos por lo que la optimización se hace con un valor frontera de
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 274/344
274
`control$lower'. Los scores pueden producirse si de da una matriz de datos. El primer
método usado es el método de regresión de Thomson (1951), el segundo es del método de
mínimos cuadrados ponderados de Bartlett (1937). Ambo se estiman los scores f no
observados.
Valor: Un objeto de clase “factanal” con los siguientes componentes:
• 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.
• uniquenesses: Las unicidades calculadas.
• correlation: Matriz de correlación usada.
• criteria: Resultados de la optimización: el valor negativo del log de verosimilitud e
información en las iteraciones usadas.
• factors: El argumento `factors'.
• dof: El número de grados de libertad del modelo de análisis de factor.
• method: Siempre es “mle”.
• scores: Si son requeridos, Una matriz de scores.
• n.obs: El número de observaciones disponibles.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 275/344
275
• call: Coincide la llamada?.
Autor: B. D. Ripley
Ver: `print.loadings', varimax', princomp', `ability.cov'
Ejemplos:
library(mva)
# v2 es como v1 con ruido v2 is just v1 with noise,
# lo mismo para v4 vs. v3 y v6 vs. v5
# los últimos casos en cada vector sólo agregan ruido
# e introducen un múltiplo positivo
v1 <- c(1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,4,5,6)
v2 <- c(1,2,1,1,1,1,2,1,2,1,3,4,3,3,3,4,6,5)
v3 <- c(3,3,3,3,3,1,1,1,1,1,1,1,1,1,1,5,4,6)
v4 <- c(3,3,4,3,3,1,1,2,1,1,1,1,2,1,1,5,6,4)
v5 <- c(1,1,1,1,1,3,3,3,3,3,1,1,1,1,1,6,4,5)
v6 <- c(1,1,1,2,1,3,3,3,4,3,1,1,1,2,1,6,5,4)
m1 <- cbind(v1,v2,v3,v4,v5,v6)
cor(m1)
v1 v2 v3 v4 v5 v6
v1 1.0000000 0.9393083 0.5128866 0.4320310 0.4664948 0.4086076
v2 0.9393083 1.0000000 0.4124441 0.4084281 0.4363925 0.4326113
v3 0.5128866 0.4124441 1.0000000 0.8770750 0.5128866 0.4320310
v4 0.4320310 0.4084281 0.8770750 1.0000000 0.4320310 0.4323259
v5 0.4664948 0.4363925 0.5128866 0.4320310 1.0000000 0.9473451
v6 0.4086076 0.4326113 0.4320310 0.4323259 0.9473451 1.0000000
#Rotación varimax
factanal(m1, factors=3)
Call:
factanal(x = m1, factors = 3)
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 276/344
276
Uniquenesses:
v1 v2 v3 v4 v5 v60.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
Factor1 Factor2 Factor3
SS loadings 1.889 1.887 1.800
Proportion Var 0.315 0.315 0.300
Cumulative Var 0.315 0.629 0.929
The degrees of freedom for the model is 0 and the fit was 0.4755
#Rotación 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 Factor3v1 0.984
v2 0.951
v3 1.003
v4 0.867
v5 0.910
v6 1.033
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 277/344
277
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
9.6.9 Función cancor
Esta función permite calcular las correlaciones canónicas entre dos matrices de datos. Está
disponible en el paquete mva. El análisis de correlación canónica 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 relación es simétrica en
cuanto a que `también son explicadas'.
cancor(x, y, xcenter = TRUE, ycenter = TRUE)
Argumentos:
• x: Una matriz numérica de tamaño n× p1 que contiene las coordenadas x.
• y: Una matriz numérica de tamaño n× p1 que contiene las coordenadas y.
• xcenter: Un argumentológivo o un vector numérco de longitud p1 describiendo
cualquier centramiento a ser hecho sobre los valores de x antes del análisis. Si es
`TRUE' (el valor por defecto), las medias de las columnas son substraidas. Si es
`FALSE', no se ajustan las columnas. Cuando se especifica como un vector, los
valores de éste son substraidos de las columnas.
• ycenter: Semejante a `xcenter', pero sobre los valores de y.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 278/344
278
Valor: Una lista que contiene las siguientes componentes:
• cor: Las correlaciones.
• xcoef: Los coeficientes estimados para las variables `x'.
• ycoef: Los coeficientes estimados para las variables `y'.
• xcenter: Los valores usados para ajustar a las variables `x'.
• ycenter: Los valores usados para ajustar a las variables `y'.
Referencias:
• Hotelling H. (1936). Relations between two sets of variables. Biometrika, 28, 321-
327.
• Seber, G. A. F. (1984). Multivariate Observations. New York: Wiley, p. 506f.
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
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 279/344
279
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.80Denmark 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.54Ireland 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.48Panama 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.70Turkey 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
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 280/344
280
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.71Malaysia 4.71 47.20 0.66 242.69 5.08
pop <- LifeCycleSavings[, 2:3]
oec <- LifeCycleSavings[, -(2:3)]
library(mva)
cancor(pop, oec)
$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
Análisis de Agrupamientos (Cluster)
El análisis de agrupamientos tiene como objetivo agrupar objetos similares usando la
información obtenida de los objetos. Veamos algunas funciones.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 281/344
281
9.6.10 Función dist
Esta función 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.
dist(x, method = "euclidean", diag = FALSE, upper = FALSE)
print.dist(x, diag = NULL, upper = NULL, ...)
as.matrix.dist(x)
as.dist(m, diag = FALSE, upper = FALSE)
Argumentos:
• x: Una matriz o data frame.
• method: Medida de distancia a usar. “euclidean”(distancia euclidiana), “maximum”
distancia máxima), “manhattan” (distancia absoluta entre vectores), “canberra”
i i i i
i
x y x y + + + +
o “ binary” (aka asymmetric binary). Puede usarse cualquier
sustracción ambigua.
• diag: Argumento lógico que indica si la diagonal de la matriz de distancias deberá
ser impresa por `print.dist'.
• upper: Argumento lógico que indica si el triángulo superior de la matriz de
distancias deberá ser impresa por `print.dist'.
• m: Una matriz de distancias a ser convertida en un objeto “dist”.
• ...: Argumentos adicionale para el método `print'.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 282/344
282
Son permitidos valores faltantes, que son omitidos de los cálculos las filas donde ocurren.
si alguna columna es omitida en los cálculos con Euclidean, Manhattan o Canberra, la suma
es escalada proporcionalmente al número de columnas usadas. Las funciones
as.matrix.dist() y as.dist() se usan para convertir objetos de clase “dist” y
matrices de distancias convencionales.
Valor: Un objeto de clase “dist”: el triángulo inferior de la matriz de distancia guardado
por columnas en un sólo vector.
Referencias: Mardia, K. V., Kent, J. T. and Bibby, J. M. (1979) Multivariate Analysis.
London: Academic Press.
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.0000003 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
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 283/344
283
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.1964024 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
9.6.11 Función kmeans
Realiza clustering K-Means.
kmeans(x, centers, iter.max = 10)
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 284/344
284
Argumentos:
• x: Una matrix de datos numérica o un objeto que puede ser forzado a matriz, tal
como un data frame con todas las columnas numéricas.
• centers: Puede ser el número 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.
• iter.max: El número máximo de iteraciones permitidas.
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
están en la media de sus conjuntos Voronoi (los conjuntos de puntos que están más cerca al
centro del cluster).
Valor: Una lista con los siguientes componentes:
• cluster: Un vector de enteros indicando el cluster en el cual quedó ubicado cada
punto.
• centers: Una matriz de centros de clusters.
• withinss: La suma de cuadrados dentro de cluster para cada cluster.
• size: El número de puntos en cada cluster.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 285/344
285
Referencias: Hartigan, J.A. and Wong, M.A. (1979). A K-means clustering algorithm.
Applied Statistics 28, 100-108.
Ejemplos:
# Un ejemplo en dos dimensiones
x <- rbind(matrix(rnorm(100, sd = 0.3), ncol = 2),
matrix(rnorm(100, mean = 1, sd = 0.3), ncol = 2))
library(mva)
cl <- kmeans(x, 2, 20)
cl
$cluster
[1] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2
[38] 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 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 1 1 1 1 1 1 1 1
$centers
[,1] [,2]
1 0.97672987 0.91615525
2 -0.05270322 0.03347406
$withinss
[1] 10.69373 7.91773
$size
[1] 52 48
plot(x, col = cl$cluster,pch=cl$cluster)
points(cl$centers, col = 1:2, pch = 20,cex=2)
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
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 286/344
286
$centers
sr pop15 pop75 dpi ddpi
1 10.920556 26.13611 3.636111 2262.3750 3.2644442 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
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 287/344
287
Figura 9.5: Gráfico de clusters de los datos en data(USArrest), en
el análisis con kmeans
9.6.12 Función hclust
Esta función (del paquete mva) realiza análisis de clustering jerárquico 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 más similares, continuando hasta que haya un sólo cluster. En cada etapa las
distancias entre clusters son recalculadas por la fórmula actualizada de disimilaridad de
Lance-Williams de acuerdo al método particular de clustering que se esté usando.
hclust(d, method = "complete", members=NULL)
plot(x, labels = NULL, hang = 0.1,
axes = TRUE, frame.plot = FALSE, ann = TRUE,
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 288/344
288
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:
• d: Una estructura de disimilaridad como la producida por la función dist.
• method: El método de aglomeración a ser usado. Este podría ser uno de los
siguientes `ward', `single', `complete', `average', `mcquitty', `median' o `centroid'.
• members: `NULL' o un vector con longitud `d'.
• x, tree: Un objeto del tipo producido por `hclust'.
• hang: La fracción de la altura del gráfico par la cual las etiquetas deberían colgar
por debajo del resto del gráfico. 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 números de las filas de los datos originales. Si
`labels=FALSE' no se colocan etiquetas.
• axes, frame.plot, ann: Argumentos lógicos como en `plot.default'.
• main, sub, xlab, ylab: Cadena de caracteres para `title'. `sub' and `xlab'.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 289/344
289
• ...: Argumentos gráficos adicionales. Ver par en ayuda del R.
• unit, level, hmin, square, plot.: Argumentos aún no implementados de `plclust'
para compatibilidad con S-plus.
Detalles:
Diferentes métodos de clustering son proporcionados. El método de mínima varianza de
Ward apunta a hallar clusters esféricos compactos. El método de linkeo completo halla
clusters similares. El método de linkeo único adopta la estrategia de clustering `amigos de
amigos'. Los otros métodos pueden considerarse como apuntando a clusters con
características entre los métodos de linkeo único y completos.
Si `members!=NULL', `d' es tomado como una matriz de disimilaridad entre clusters en
vez de disimilaridades entre individuos y `members' da el número de observaciones por
cluster. De esta forma el algoritmo de cluster jerárquico puede ser iniciado en la mitad del
dendrograma, es decir, con el fin de reconstruir la parte del árbol arriba del corte. Lasdisimilaridades entre cluster pueden calcularse eficientemente sólo para un número limitado
de combinaciones de distancia/linkeo, siendo la más simple de ellas la distancia euclidiana
cuadrada y el linkeo centroide. En este caso las disimilaridades entre clusters corresponden
a las distancias euclidianas cuadradas entre medias de clusters.
El algoritmo usado en hclust ordena los sub árboles de modo que el cluster más
apretado esté a la izquierda (el más 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 más apretados posibles y las uniones incluyen dos observaciones colocadas en
orden según el número de su la secuencia de observación.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 290/344
290
Valor: La función 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
observación -j fue unida en esta etapa. Si j es positiva entonces la unión 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.
• height: Un conjunto de of n-1 valores reales no decrecientes. La altura del
clustering, es decir, el valor del criterio asociado con el método de clustering para la
aglomeración particular.
• order: Un vector dando la permutación de las observaciones originales apropiada
para graficar, en el sentido de que un gráfico de cluster usando este ordenamiento y la
matriz `merge' no tendrá cruce de ramas.
• labels: Las etiquetas para cada uno de los objetos que están siendo clustered.
• call: La llamda que produjo el resultado.
• method: El método de cluster que ha sido usado.
• dist.method: La distancia usada para crear a `d' (únicamente es devuelta si el objeto
distancia tiene un atributo `method' ).
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 291/344
291
Hay un método `print' y `plot' para los objetos `hclust' . La función plclust() básicamente es la misma que el método plot, `plot.hclust', principalmente para
compatibilidad con S-plus.
Autor: Esta función está basada en el código fortran contribuido a STATLIB por F.
Murtagh.
Referencias:
• Everitt, B. (1974). Cluster Analysis. London: Heinemann Educ. Books.
• Hartigan, J. A. (1975). Clustering Algorithms. New York: Wiley.
• Sneath, P. H. A. and R. R. Sokal (1973). Numerical Taxonomy. San Francisco:
Freeman.
• Anderberg, M. R. (1973). Cluster Analysis for Applications. Academic Press: NewYork.
• Gordon, A. D. (1999). Classification. Second Edition. London: Chapman and Hall /
CRC
• Murtagh, F. (1985). “Multidimensional Clustering Algorithms”, in COMPSTAT
Lectures 4. Wuerzburg: Physica-Verlag .
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 292/344
292
9.6.13 Función cutree
Disponible en el paquete mva, permite cortar un árbol obtenido previamente con la fucnón
hclust, en varios grupos bien sea mediante la indicación del número de grupos deseados
o la altura del corte.
cutree(tree, k=NULL, h=NULL)
Argumentos:
• tree: Un árbol producido por `hclust'
• k: Un entero o un vector de enteros con el número deseado de grupos.
• h: Un número 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 función 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:
#require( ) también permite cargar paquetes
#como library( ):
require(mva)
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 293/344
293
Loading required package: mva
[1] TRUE
data(USArrests)hc <- hclust(dist(USArrests), "ave")
plot(hc,cex=0.5,main="Dendrograma Cluster data USArrest\nmediante método
'average' ")
plot(hc, hang = -1,cex=0.5,main="Dendrograma Cluster data USArrest\nmediante
método 'average' ")
## Clusters usando el método centroide y la
##distancia euclidiana cuadrada. Corte del árbol
##en 10 clusters y reconstrucción 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 simultáneamente:
hc <- hclust(dist(USArrests))
cutree(hc, k=1:5)#k = 1 es trivial
1 2 3 4 5
Alabama 1 1 1 1 1
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 294/344
294
Alaska 1 1 1 1 1
Arizona 1 1 1 1 1
Arkansas 1 2 2 2 2California 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 3Iowa 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 1Missouri 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 5Ohio 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
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 295/344
295
South Dakota 1 2 3 3 5
Tennessee 1 2 2 2 2
Texas 1 2 2 2 2Utah 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 California1 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 Jersey2 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
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 296/344
296
Arkansas 2 2
California 1 1
Colorado 2 2Connecticut 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 3Kentucky 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 3Nebraska 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 2Oregon 2 2
Pennsylvania 2 3
Rhode Island 2 2
South Carolina 1 1
South Dakota 2 3
Tennessee 2 2
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 297/344
297
Texas 2 2
Utah 2 3
Vermont 2 3Virginia 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
Figura 9.6: Efecto de la función cutree sobre un dendrograma
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 298/344
298
Figura 9.7: Efecto del argumento hang=-1, en el plot del dendrograma: Observe
la organización de las etiquetas debajo de cada rama
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 299/344
299
A continuación presentamos un conjunto de funciones para realizar pruebas corrientes en
análisis multivariable.
#Esta funcion realiza una prueba de Hotelling para Ho:u1=u2
# muestras independientes, normales y con igual dispersion
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")
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 300/344
300
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=" ")
}
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 301/344
301
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")
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 302/344
302
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")
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 303/344
303
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("======================================",
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 304/344
304
"\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-1cov.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(
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 305/344
305
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()
}
# Determinante de una matrixdeterminante<-function(A){
if(ncol(A)!=nrow(A)) stop("Matriz no es cuadrada!")
y<-eigen(A)
det<-prod(y$values)
det
}
# Pruebas para matrices de covarianzas
independencia.covarianzas<-function(X,c1,c2,alpha){
Sigma<-var(X)Sigma1<-Sigma[c1,c1]
Sigma2<-Sigma[c2,c2]
d<-determinante(Sigma)
if(d==0) stop("Covarianza no singular")
d1<-determinante(Sigma1)
d2<-determinante(Sigma2)
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 306/344
306
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")
}
9.7. Análisis de Datos Categóricos
9.7.1 Función cut:
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 función
automáticamente halla los puntos de corte equiespaciados. Esta función 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)
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 307/344
307
Si deseamos que los puntos de corte sean con un formato presentable, podemos usar la
función pretty()
>cut(edad,pretty(edad))
La sintaxis general es:
cut(x, ...)
cut.default(x, breaks, labels = NULL,
include.lowest = FALSE, right = TRUE, dig.lab = 3, ...)
Argumentos:
• x: Un vector numérico a ser convertido en factor con cut.
• breaks: Puede ser un vector con puntos de corte o un número indicando el número
de intervalos en los cuales se ha de dividir a `x'.
• labels: Etiquetas para los niveles de la categoría resultante. Por defecto las etiquetas
son de la forma “(a,b]”. Si `labels = FALSE', se usan códigos enteros.
• include.lowest: Argumento lógico. Si s `TRUE', un valor igual al punto de corte es
incluido en el intervalo.
• right: rgumento lógico 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 número de dígitos a usar
en el formato de los números de corte.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 308/344
308
• ...: Argumentos adicionales pasados a o desde otros métodos.
Valor: La función devuelve un factor, a menos que `labels = FALSE' en cuyo caso sólo
devuelve los códigos enteros de los niveles.
Nota: `hist(x, br, plot = FALSE)' es más eficiente y usa menos memoria
que `table(cut(x, br))'.
Ver también: `split', factor', tabulate', table'.
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
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 309/344
309
9.7.2 Función table:
Esta función permite crear una tabla de contingencia. Por ejemplo,
>edad<-c(22,31,37,23,22,35,23,19,42,35,33,36,18)
>table(cut(edad,breaks=3))
Otro ejemplo un poco más 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)
9.7.3 Función levels
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 asignación levels<- es unafunción genérica y nuevos métodos pueden ser escritos para éste.
levels(x)
levels(x) <- value
x es un objeto, como un factor.
9.7.4 Función factor
La función factor se usa para codificar un como factor. `is.factor',
`is.ordered', `as.factor' and `as.ordered' son las funciones miembro y de coerción para
estas clases de objetos.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 310/344
310
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:
• x: Un vector de datos (no tiene restricción respecto al tipo).
• levels: Un vector opcional con los valores que debió tomar `x'. El valor por defecto
son los valores de `x', ordenados en forma creciente.
• labels: Un vectro opcioanl de etiquetas para los niveles, en el orden de `levels'
después de remover aquellos en `exclude', o una cadena de caracteres de longitud 1.
• 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 lógico para indicar si los niveles deben ser considerados como
ordenados en el orden dado.
• ...: Cualquiera de los anteriores para la función `ordered'.
Debe tenerse en cuenta que los factore y los factores ordenados difieren sólo en sus clase,
pero los métodos y las funciones de ajuste de modelos tratan a ambos de modo muy
diferente.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 311/344
311
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 códigos
numéricos de la misma longitud de `x' con unos atributos “levels” de modo `character'. Si
`ordered' es TRUE, el resultado tiene clase `c(“ordered”, “factor ”)'.
`is.factor' devuelve un TRUE o FALSE dependiendo de si el argumento es o no un factor.
`is.ordered' devuelve un TRUE o un FALSE dependiendo de si el argumento está o no
ordenado.
`as.factor'forza a su argumento a ser un factor.
`as.ordered(x)' devuelve a `x' si este está ordenado, y `ordered(x)' en caso contrario.
Ver también: `gl' para construir factores balanceados y `C' para factores con contrastes
específicos. `levels' y `nlevels' para accesar a niveles y `codes' para ontener códigosenteros.
9.7.5 Función binom.test:
Permite realizar pruebas de hipótesis exactas acerca de (probabilidad de éxito) en una
población dicótoma.
binom.test(x, n, p = 0.5,alternative = c("two.sided", "less",
"greater"),conf.level = 0.95)
Argumentos:
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 312/344
312
• x: Número de éxito o un vector de longitud 2 dando el número de éxitos y fracasos.
• n: Número de ensayos; es ignorado si `x' tiene longitud 2.
• p: Probabilidad de éxito hipotetizada.
• alternative: La hipótesis alternativa y debe ser una de las siguientes “two.sided”,
“greater ”, “less”.
• conf.level: Nivel de confianza para el intervalo devuelto.
Los intervalos de confianza son obtenidos según 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 más cortos.
Valor:
Una lista con clase “htest” con los siguientes componentes:
• statistic: El número de éxitos.
• parameter: El número de ensayos.
•
p.value: El valor p de la prueba.
• conf.int: Un intervalo de confianza para la probabilidad de éxito.
• estimate: La probabilidad de éxito estimada.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 313/344
313
• null.value: La probabilidad de éxito bajo la hipótesis nula.
• alternative: Cadena de caracteres que describen la hipótesis alternativa.
• method: La cadena de caracteres “Exact binomial test”.
• data.name: Cadena de caracter que da el nombre de los datos.
Referencias:
• Clopper, C. J. \& Pearson, E. S. (1934). The use of confidence or fiducial limits
illustrated in the case of the binomial. Biometrika, 26, 404-413.
• Conover, W. J. (1971), Practical nonparametric statistics. New York: John Wiley \&
Sons. Pages 97-104.
• Myles Hollander \& Douglas A. Wolfe (1973), Nonparametric statistical inference. New York: John Wiley \& Sons. Pages 15-22.
Ver también: `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
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 314/344
314
alternative hypothesis: true probability of success is not equal to 0.5
95 percent confidence interval:
0.3219855 0.5228808sample 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.0666alternative 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 100number 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
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 315/344
315
[1] 0.3372368 0.5072341
attr(,"conf.level")
[1] 0.9
9.7.6 Función loglin
Esta función es usada para ajustar modelos log lineales a tablas de contingencia
multidimensionales mediante ajuste proporcional iterativo.
loglin(table, margin, start = rep(1, length(table)), fit = FALSE,
eps = 0.1, iter = 20, param = FALSE, print = TRUE)
Argumentos:
• table: Una tabla de contingencia obtenida típicamente con table.
• margin: Una lista de vectores con los totales marginales a ser ajustados. Los
modelos log lineales pueden especificarse en términos de estos totales marginalesdando 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
parámetros 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 estimación inicial para la tabla ajustada. Esútil para tablas incompletas con estructura de ceros en `table'. En este caso, las
entradas en `start' deberán ser cero y ls otras pueden ser uno.
• fit: Argumento lógico para indicar si los valores ajustados deben ser devueltos.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 316/344
316
• eps: Desviación máxima permitida entre los márgenes observados y ajustados.
• iter: Número máximo de iteraciones.
• param: Argumento lógico para indicar si los valores de los parámetros deben ser
devueltos.
• print: Argumento lógico. Si es `TRUE', el número de iteraciones y la desviación
final son devueltos.
Si no hay ceros estructurales los estadísticos de razón de verosimilitud y el estadístico de
prueba de pearson tiene distribuc\i'on asintótica ji cuadrado.
Valor: Una lista con los siguientes componentes:
• lrt: Estadístico de prueba de razón de verosimilitud.
• pearson: el estadístico de prueba de Pearson.
• df: Los grados de libertad para el modelo ajustado. No hay ajuste para ceros
estructurales.
• margin: Lista de las márgenes que fueron ajustadas. Básicamente las mismas a la
entrada de `margin', pero con los números reemplazados por nombres cuando esto es posible.
• fit: Un arreglo que contiene los valores ajustados. Sólo es devuelto si `fit' es TRUE.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 317/344
317
• param: Una lista con los parámetros estimados del modelo. Sólo 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
## Modelo de la independencia conjunta de
##sexo de cabello y color ojos:
fm <-loglin(HairEyeColor, list(c(1, 2), c(1, 3), c(2, 3)))
fm
$lrt
[1] 8.187009
$pearson
[1] 8.50081
$df
[1] 9
$margin
$margin[[1]]
[1] "Hair" "Eye"
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 318/344
318
$margin[[2]]
[1] "Hair" "Sex"
$margin[[3]][1] "Eye" "Sex"
##El modelo sin interacción
##de los tres factores ajusta bien:
1 - pchisq(fm$lrt, fm$df)
[1] 0.5154158
Considere la siguiente tabla de frecuencias
Factor B
Factor 222 115
A 240 185
y suponga queremos ajustar un modelo log-lineal saturado y obtener los parámetros 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]
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 319/344
319
[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 opción 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 instrucción es
> loglin(frecuencias.obs,list(1,2),fit=T,param=T)
Si queremos un modelo donde no hay efecto de A
> loglin(frecuencias.obs,list(1),fit=T,param=T)
Como se observa con la opción list() nosotros introducimos el modelo a ser estimado.
9.7.7 Función split
Permite dividir los datos de un vector `x' en grupos definidos por `f'. Las formas de
asignación reemplazan los valores correspondientes a tal división. unsplit reversa el
efecto de split.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 320/344
320
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:
• x: Vector o marco de datos con los valores a ser divididos en grupos.
• 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' sólo funciona con listas de vectores. El método data frame puede usarse también
para particionar una matriz en una lista de matrices.
Valor: Esta función 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 serán de longitud cero.
Ejemplos:
n <- 10
nn <- 100
##generando un vector, aleatoriamente
##con los números que identifican
##el nivel del factor al que pertenecen cada una de
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 321/344
321
##1000 observaciones. Los niveles
##numerados de 0 a 10.
g <- factor(round(n * runif(n * nn)))
##Definiendo el vector de valores a
##particionar en 11 grupos:
x <- rnorm(n * nn) + sqrt(as.numeric(g))
##Particionando el vector x de acuerdo
##a la asignación de factores en g:
xg <- split(x, g)
boxplot(xg, col = "lavender", notch = TRUE, varwidth = TRUE)sapply(xg, length)
0 1 2 3 4 5 6 7 8 9 10
54 114 74 103 112 107 75 100 103 111 47
sapply(xg, 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
##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
## Calculando scores z por grupo:xgs<-sapply(xg,scale)
z<-unsplit(xgs,g)
tapply(z,g,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
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 322/344
322
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
## Dividir una matriz en una lista por columna
ma <- cbind(x = 1:10, y = (-4:5)^2)
ma
x y
[1,] 1 16
[2,] 2 9
[3,] 3 4
[4,] 4 1
[5,] 5 0
[6,] 6 1[7,] 7 4
[8,] 8 9
[9,] 9 16
[10,] 10 25
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"
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 323/344
323
[1] 2 4 6 8 10
Warning message:
argument lengths differ in: split(x, f)
9.8. Modelo Lineal Generalizado: Función glm
Uno de los atractivos de R es su facilidad de manejo para modelos. Entre ellos tenemos el
modelo lineal generalizado con la función glm(). Esta función permite realizar ajuste de
modelos lineales generalizados, mediante la especificación de una fórmula que describe
simbólicamente el predictor lineal y una descripción de la distribucón del error.
glm(formula, family = gaussian, data, weights = NULL, subset =
NULL, na.action, start = NULL, offset = NULL, control =
glm.control(...), model = TRUE, method = "glm.fit", x = FALSE, y =
TRUE, contrasts = NULL, ...)
glm.fit(x, y, weights = rep(1, nrow(x)), start = NULL, etastart =
NULL, mustart = NULL, offset = rep(0, nrow(x)), family =
gaussian(), control = glm.control(), intercept = TRUE)
weights.glm(object, type = c("prior", "working"), ...)
Argumentos:
• formula: Una descripción simbólica del modelo a ser ajustado.
• family: Una descripción de la distribución del error y la función de linkeo a ser
usada en el modelo.
• 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 función glm .
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 324/344
324
• weights: Un vector opcional con pesos a utilizar en el ajuste.
• subset: Un vector opcional especificando un subconjunto de observaciones a ser
usadas en el ajuste.
• na.action: Una función que indica lo que debería pasar cuando los datos tienes
valores faltantes (`NA's). El valor por defecto corresponde al ajuste dado por
`na.action' de `options'.
• start: Valores de inicio para los parámetros en el predictor lineal.
• etastart: Valores de inicio para el predictor lineal.
• mustart: Valores de inicio para el vector de medias.
• offset: Puede utilizarse para especificar una componente conocida apriori a ser
incluida en el predictor lineal durante el ajuste.
• control: Una lista de parámetros para controlar el proceso de ajuste. Ver
`glm.control'.
• model: Un valor lógico que indica si el marco del modelo debe ser incluido como
una componente del valor retornado.
• method: El método a ser usado en el ajuste. Por defecto (y es el único por el
momento) se usa mínimos cuadrados ponderados iterativamente (IWLS ).
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 325/344
325
• x, y: Valores lógicos que indican si el vector de respuesta y la matriz de diseño usada
en el ajuste deben ser devueltos en la salida del procedimiento.
• contrasts: Una lista opcional. Ver `contrasts’ de `model.matrix.default'.
• object: Un objeto de la clase`glm'.
• type: Caracter que indica el tipo de pesos a extraer del objeto modelo ajustado.
• intercept: Argumento lógico para indicar si el modelo incluye intercepto.
• ...: Argumentos adicionales pasados a o desde otros métodos.
Detalles: El modelo típico tiene la forma `respuesta~términos' donde
`respuesta' es el vector respuesta numérico y `términos' es una serie de términos que
especifican un predictor lineal para `respuesta' . En los modelos binomiales (`binomial') la
respuesta puede especificarse como un `factor' (cuando el primer nivel corresponde afracaso y los demás casos son éxitos) o como una matriz de dos columnas con las columnas
dando los números de éxitos y fracasos. Una especificación como `primero+segundo'
indica todos los términos en `primero' junto con todos los términos en `segundo' con las
duplicaciones eliminadas.
Valor:
• glm devuelve un objeto de clase `glm' el cual desciende de la clase lm'. La
función summary (`summary.glm') puede usarse para obtener o imprimir un
resumen de los resultados, y la función anova (`anova.glm') retorna una tabla de
análisis de varianza.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 326/344
326
• Las funciones genéricas coefficients, effects, fitted.values y
residuals pueden utilizarse para extraer estos valores del objeto `glm'.
• La función weights extrae un vector de pesos, para cada caso en el ajuste.
Un objeto de clase `glm' es una lista que contiene los siguientes componentes:
• coefficients: Un vector de coeficientes.
• residuals: Residuales en la iteración final del ajuste IWLS (residuos de trabajo).
• fitted.values: Valores medios ajustados, obtenidos transformando los predictores
lineales por la invers ade la función de linkeo.
• rank: El rango numérico del modelo lineal ajustado.
• family: La familia usada.
• linear.predictors: El ajuste lineal sbre la escala de linkeo.
• deviance: Una constante menos dos veces el log de verosimilitud maximizado.
Donde sea sensible, la constante es elegida de modo que el modelo saturado tenga
deviance igual a cero.
• aic: Criterio de información de Akaike, menos dos veces el log de verosimilitud
maximizado más dos veces el número de coeficientes (asumiendo que la dispersi'on
es conocida).
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 327/344
327
• 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.
• iter: El número de iteraciones del IWLS.
• weights: De los residuoales de trabajo, es decir los pesos en la iteracción final del
ajuste IWLS.
• prior.weights: Los pesos inicialemtne suminstrados.
• df.residual: Los grados de libertad residuales.
• df.null: Los grados de libertad residuales para el modelo nulo.
• y: El vector `y' usado.
• converged: Argumento lógico para indicar si el algoritmo IWLS convergió.
• boundary: Argumento lógico para indicar si el valor ajustado está sobre la frontera
de los valores alcanzados.
• formula: La fórmula proporcionada.
• terms: El objeto `terms' usado.
• data: El `data argument'.
• offset: El vector offset usado.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 328/344
328
• control: El valor del argumento `control' usado.
• method: El nombre de la función filtro usada. Siempre es `glm.fit'.
• contrasts: El contraste usado.
• xlevels: Un registro de los niveles de los factores usados en el ajuste.
Los ajustes no nulos tendrán componentes `qr', `R' y `effects' en relación 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 proporción de éxitos.
Los offsets especificados en `offset' no se incluirán en las predicciones por `predict.glm',
en tanto que los especificados por un término offset en la fórmula si lo serán.
Referencias:
• McCullagh P. and Nelder, J. A. (1989) Generalized Linear Models. London:
Chapman and Hall.
• Dobson, A. J. (1990) An Introduction to Generalized Linear Models. London:
Chapman and Hall.
• Venables, W. N. and Ripley, B. D. (1999) Modern Applied Statistics withe S-PLUS.
New York: Springer.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 329/344
329
Ver también: `anova.glm', `summary.glm', etc. `anova', `summary', `effects',
`fitted.values', y `residuals'.
Ejemplos:
## Dobson (1990) Pag. 93: Experimentos
##aleatorizados controlados
conteos <- c(18,17,15,20,10,20,25,13,12)
#Generando un factor de 3 niveles con
#1 réplica y resultado de longitud 1,
#para las salidas.
salidas<- gl(3,1,9)
#Generando un factor de 3 niveles con
#3 réplicas para los tratamientos:
tratamiento <- gl(3,3)
print(d.AD <- data.frame(tratamiento, salidas, conteos))
tratamiento salidas conteos
1 1 1 18
2 1 2 17
3 1 3 15
4 2 1 20
5 2 2 10
6 2 3 20
7 3 1 25
8 3 2 13
9 3 3 12
glm.D93 <- glm(conteos~ salidas + tratamiento, family=poisson())
anova(glm.D93)
Analysis of Deviance Table
Model: poisson, link: log
Response: conteos
Terms added sequentially (first to last)
Df Deviance Resid. Df Resid. Dev
NULL 8 10.5814
salidas 2 5.4523 6 5.1291
tratamiento 2 0.0000 4 5.1291
summary(glm.D93)
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 330/344
330
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.0000tratamiento3 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)
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 331/344
331
Null deviance: 3.512826 on 8 degrees of freedom
Residual deviance: 0.016730 on 7 degrees of freedom
AIC: 37.99Number 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
9.8.1 Función family
Permite especificar una familia de distribución para los modelos lineales generalizados en
la función 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")
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 332/344
332
quasibinomial(link = "logit")
quasipoisson(link = "log")
Argumentos:
• link: Una especificación para la función de linkeo del modelo. La familia
`binomial' admite funciones de linkeo `logit', `probit', `log', and `cloglog' (log–log
complementaria); la familia `Gamma' admite las funciones `identity', `inverse', y
`log'; La familia `poisson', las funciones `identity', `log', y `sqrt'; la familia `quasi'
los links `logit', `probit', `cloglog', `identity', `inverse', `log', `1/mu^2' y `sqrt'. Lafunción `power' puede usarse para crear una función linkeo de potencia para la
familia `quasi' . La familia `gaussian' sólo admite la función `identity' y la familia
`inverse.gaussian' la función 1/mu^2'.
• variance: Para todas las familias excepto la familia `quasi' , la función 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 función varianza.
• object: La función family accesa a los objetos `family' que son guardados dentro
de los objetos creado spor las funciones de modelación.
• ...: Argumentos adicionales para los métodos.
Detalles: Las familias `quasibinomial' y `quasipoisson' difieren de las familias `binomial'
y `poisson' respectivamente, en que el parámetro de dispersión no están fijados en uno, por
lo que estos pueden modelar con sobredispersión.
Ejemplos:
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 333/344
333
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))
9.9. Análisis de Varianza: Función aov
Con esta función podemos ajustar un modelo de análisis de varianza aplicando la función
lm a cada estrato, en diseños balanceados y desbalanceados.
aov(formula, data = NULL, projections = FALSE, qr = TRUE,
contrasts = NULL, ...)
Argumentos:
• formula: Una fórmula que especifica el modelo. Puede especificar respuestas
múltiples.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 334/344
334
• data: Un data frame en el cual se hallan las variables especificadas en la fórmula. Si
no se especifica, las variables son buscadas en el ambiente desde el cual se llamó la
función aov.
• projections: Argumento lógico. ¿Deberá retornarse las proyecciones?
• qr: Argumento lógico. ¿Deberá retornarse la descomposición QR?
• contrasts: Una lista de los contrastes a usar para alguno de los factores en la
fórmula. No son usados para ningún término de `Error'. Proporcional contrastes para
los factores únicamente en el término de `Error' dará una advertencia.
• ...: Argumentos a ser pasados a la función \tt lm , tal como subset', o na.action'.
Si la fórmua contiene sólo un término 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 múltiples respuestas, o de clase “aovlist” para estratos de error múltiples.
Autor: B. D. Ripley
Ejemplo: Para ilustrar un modelo completamente aleatorizado con un factor consideremos
el siguiente ejemplo de Lentner y Bishop, pp. 44: El problema trata del entrenamiento de
unos vendedores. Se dividen en cuatro grupos, cada vendedor es asignado al azar en uno de
los grupos, y a cada grupo se le entrena con un programa diferente. Luego de cinco
semanas se registran las comisiones obtenidas por cada vendedor. Se desea verificar si hay
diferencias entre los programas. El programa en R podría ser el siguiente.
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 335/344
335
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
Si deseamos hacer un análisis gráfico el programa puede modificarse así:
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.51585Estimated 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
---
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 336/344
336
Signif. codes: 0 `***' 0.001 `**' 0.01 `*' 0.05 `.' 0.1 ` ' 1
Un ejemplo de Venables and Ripley (1997) p.210. (tomado de R Documentation)
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)
( npk.aov <- aov(yield ~ block + N*P*K, npk) )
Call:
aov(formula = yield ~ block + N * P * K, data = npk)
\end verbatim
\scriptsize
\begin verbatim
Terms:
block N P K N:P N:K P:K
Sum of Squares 343.2950 189.2817 8.4017 95.2017 21.2817 33.1350 0.4817
Deg. of Freedom 5 1 1 1 1 1 1
Residuals
Sum of Squares 185.2867
Deg. of Freedom 12
Residual standard error: 3.929447
1 out of 13 effects not estimable
Estimated effects may be unbalanced
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
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 337/344
337
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
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 338/344
338
Capítulo 10: Apéndice: Datos
10.1. Datos de Velocidades de Autos
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 4056 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
10.2. Datos de Precios de Carros Reanult 4 y 12
Los siguientes datos corresponden al modelo (R-4 o R-12), el año 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.20r4 77 2.45
r4 71 2.00
r4 88 4.90
r4 74 1.78
r4 73 1.70
r4 80 2.90
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 339/344
339
r12 80 4.60
r12 76 3.80
r12 78 4.80r12 79 4.70
r12 76 3.60
r12 78 4.50
r12 74 3.50
r12 74 3.50
10.3. Datos de las pruebas nacionales del ICFES
• 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 años.
• 1a. variable: SEXO (Alfanumérica: F:femenino, M:masculino)
• 2a. : Año en que se tomo la prueba
• 3a. : Resultado en Biología
• 4a. :Resultado en Química
• 5a. :Resultado en Física
• 6a. :Resultado en Sociales
• 7a. :Resultado en Aptitud Verbal
• 8a. :Resultado en Español y Literatura
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 340/344
340
• 9a. :Resultado en Aptitud Matemática
• 10a. :Resultado en Conocimientos en Matemáticas
• 11a. :Resultado en Electiva
• 12a. : Electiva (Alfanumérica):
MET: Metalmecánica, CON: Contabilidad ING:Inglés, ELE:Electricidad, MEC:
Razonamiento Mecánico, MET:Metalmecánica
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 ABSM 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 MECF 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
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 341/344
341
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 ELEF 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 ELEF 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 ELEM 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 METF 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
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 342/344
342
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 INGF 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 MECM 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 CONM 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 INGF 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
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 343/344
343
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 INGM 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 ElEM 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 INGF 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
5/12/2018 MANUAL_Rb - slidepdf.com
http://slidepdf.com/reader/full/manualrb 344/344
Capítulo 11: Referencias
• Becker R. A., Chambers, J. M. y Wilks, A. R. (1988) The New S Language.
Wadsworth & Brooks/Cole Advanced Books & Software.
• Chambers, J. M. y Hastie, T. J. (1992). Statistical Models in S . Wadsworth &
Brooks/Cole Advanced Books & Software.
• Jonhson R.A y Wichern D. W. Applied Multivariate Statistical Análisis. 4ª . Ed.
Prentice may, 1998
• Lentner, M y Bishop, T. (1986) Experimental Design and Analysis . Valley Book
Company: Blacksburg.
• R Documentation (Help R 1.5.0).