Universidad Nacional Aut onoma de M...

146
Universidad Nacional Aut´ onoma de M´ exico Facultad de Qu´ ımica, UNAM Curso b´ asico sobre R 1 Marcelo F. Lugo L. Enero de 2015 1 Basado en: Alain F. Zuur, Elena N. Ieno, Erik H.W.G.Meesters, A beginner’s Guide to R, Springer, 2009.

Transcript of Universidad Nacional Aut onoma de M...

Universidad Nacional Autonoma de Mexico

Facultad de Quımica, UNAM

Curso basico sobre R1

Marcelo F. Lugo L.

Enero de 2015

1Basado en: Alain F. Zuur, Elena N. Ieno, Erik H.W.G.Meesters, A beginner’s Guideto R, Springer, 2009.

R fq-unam

Introduccion

R es un lenguaje de computadora que permite escribir funciones, efectuar calcu-los, aplicar muchas tecnicas de estadıstica, crear graficos e incluso escribir bi-bliotecas de funciones propias.

Ademas R es gratuito.

Muchas personas no lo usan porque R tiene una curva de aprendizaje.

Su uso requiere de la programacion y aunque existen varias versiones graficases muy difıcil prescindir de la programacion.

En general, la curva de aprendizaje requiere de utilizar la programacion yahecha por otras personas y modificarla de acuerdo con las necesidades del usua-rio. R fue desarrollado principalmente para calculo estadıstico, por lo que setiene una doble curva de aprendizaje, una para la programacion y otra para laestadıstica.

M. Lugo 2 Curso basico de R

R fq-unam

La instalacion

La instalacion del programa requiere primero de su adquisicion a traves dewww.r-project.org, luego se selecciona un sitio (cran= Comprehensive RArchive Network) para descargar el programa en la computadora e instarlarlo.

La primera impresion

A diferencia de la mayorıa de lo programas comerciales, la ventana inicial de R

solo contiene algunos “botones” con opciones.

Esto es comun en muchos programas de distribucion libre como Python,Maxima, LaTeX, POV-Ray, etcetera.

La figura 1 muestra la ventana de inicio a la que llamaremos una sesion deR.

M. Lugo 3 Curso basico de R

R fq-unam

Fig. 1. En Windows, ası aparece la ventana de una sesion de R.

M. Lugo 4 Curso basico de R

R fq-unam

Como muchos otros programas, es posible tener varias sesiones abiertas si-multaneamente, cada una con su propio proceso.

A partir del sımbolo “>”, se puede iniciar cualquier operacion admitida porel programa o bien ejecutar cualquiera de las funciones que tiene integradas.

Para empezar, a continuacion del sımbolo “>” pulse 2 + 2 y luego la tecla“Enter”, con lo que en la ventana de la sesion aparecera:

> 2 + 2

[1] 4

mas adelante se describira el significado de [1], por lo que ahora solo observa-remos la respuesta: 4, como ya se esperaba.

Realice las diferentes operaciones aritmeticas que conozca.

M. Lugo 5 Curso basico de R

R fq-unam

R se instala con manuales de ayuda.

En el menu Ayuda se encuentran varias opciones para solicitar ayuda y paraleer los manuales.

Por ejemplo, la opcion FAQ en R del menu Ayuda, despliega las preguntas yrespuestas que se han presentado con mayor frecuencia a lo largo del tiempo.

La mayor parte de la informacion y ayuda existente en la actualidad estaescrita en ingles, sin embargo, tambien hay mucha informacion en espanol y enotros idiomas. Quizas la forma mas rapida de encontrar la solucion a algunasde las preguntas se logra escribiendolas en el “browser” preferido y dejar quelos motores de busqueda muestren las opciones disponibles en internet.

Independientemente del idioma, los comandos siempre son los mismos en R,de modo que cuando se copian una o mas instrucciones encontradas en la red yse “pegan ” en la ventana de una sesion de R, es posible observar los resultadosy hacer las modificaciones pertinentes al problema que se desea resolver.

M. Lugo 6 Curso basico de R

R fq-unam

La finalizacion de una sesion

Para teminar una sesion en R basta con escribir en la consola el comando q(),con lo que apaecera un cuadro de dialogo en el que se decide si se guarda o noel conjunto de instrucciones que se hayan usado hasta el momento, o bien secancela la finalizacion de la sesion para continuar trabajando en R.

M. Lugo 7 Curso basico de R

R fq-unam

La insercion de datos

Ademas de que el programa se puede utilizar como una calculadora comun, enmuchas ocasiones lo que se utilizan son datos o parametros.

Ası, podrıan insertarse datos como:

> a <- 59

> b <- 55

> c <- 53.5

> d <- 53

> e <- 52.5

El sımbolo “<-” es el de asignacion de valores, aunque tambien se puede usar“=” en su lugar. Ası, al escribir a y luego la tecla Enter se obtendra

> a

[1] 59

M. Lugo 8 Curso basico de R

R fq-unam

El programa acepta nombres alfanumericos:

> paso1 <- 11

> paso2 <- 13

> paso3 <- 15

> paso4 <- 17

> paso5 <- 19

y es posible efectuar operaciones

> paso1 + paso2

[1] 24

Aunque el programa efectua las operaciones, no almacena los resultados, por loque es mejor definir, si es necesario, nuevas variables, como

> resultado1 <- paso1 + paso2

> resultado1

[1] 24

M. Lugo 9 Curso basico de R

R fq-unam

La concatenacion de datos con la funcion c

Cuando se registran datos experimentales de una o dos variables, lo convenientees insertarlos como sigue:

> x <- c(1, 2, 3, 7, 11, 13, 17, 19, 23, 29)

> x

[1] 1 2 3 7 11 13 17 19 23 29

donde la funcion c ha creado un vector de longitud 10, que se puede conocercomo sigue:

> length(x)

[1] 10

Los elementos o componentes del vector x se llaman como sigue, por ejemplo,los elementos 1, 4, y 9:

> x[1]

M. Lugo 10 Curso basico de R

R fq-unam

[1] 1

> x[4]

[1] 7

> x[9]

[1] 23

o bien

> x[1]; x[4]; x[9]

[1] 1

[1] 7

[1] 23

o elementos consecutivos

> x[3:7]

[1] 3 7 11 13 17

Para ver todos los elementos, excepto el segundo

M. Lugo 11 Curso basico de R

R fq-unam

> x[-2]

[1] 1 3 7 11 13 17 19 23 29

como puede observarse, el signo “−” omite al valor del elemento.

Es posible utilizar otras funciones con los vectores, por ejemplo

> sum(x) #la suma de los valores de x

[1] 125

> max(x) #el mayor valor contenido en x

[1] 29

> mean(x) #la media o promedio del conjunto de valores de x

[1] 12.5

> sd(x) #la desviacion tıpica o estandar de x

[1] 9.489761

M. Lugo 12 Curso basico de R

R fq-unam

Supongamos que registramos otra variable y la insertamos en R:

> y <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

y deseamos aplicar un modelo de regresion lineal

> M <- lm(y~x)

> M

Call:

lm(formula = y ~ x)

Coefficients:

(Intercept) x

1.5595 0.3152

M. Lugo 13 Curso basico de R

R fq-unam

Para ver con detalle lo que contiene la variable M obtenida despues de aplicarla funcion lm se escribe

> names(M)

[1] "coefficients" "residuals" "effects"

[4] "rank" "fitted.values" "assign"

[7] "qr" "df.residual" "xlevels"

[10] "call" "terms" "model"

Entonces

> M$coefficients

(Intercept) x

1.5595312 0.3152375

contiene los parametros (interseccion y pendiente) del modelo lineal que, paraefectos de calculos posteriores, se pueden almacenar o guardar usando

> interseccion <- M$coefficients[[1]]

M. Lugo 14 Curso basico de R

R fq-unam

> pendiente <- M$coefficients[[2]]

> interseccion

[1] 1.559531

> pendiente

[1] 0.3152375

Los graficos de los datos

Si se consideran los vectores x y y, dados ya anteriormente:

> x <- c(1, 2, 3, 7, 11, 13, 17, 19, 23, 29)

> y <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

y se desea trazar un grafico que los represente com oparejas de puntos en unplano cartesiano, lo primero que debe considerarse es que ambos vectores tenganla misma “longitud”, es decir, el mismo numero de datos como sigue:

> length(x)

M. Lugo 15 Curso basico de R

R fq-unam

[1] 10

> length(y)

[1] 10

como puede observarse, ambos vectores contienen el mismo numero de datos,es decir, son de la misma longitud, por lo que el trazo de un grafico se puedehacer como sigue:

> plot(x,y)

con esta funcion, se abrira una ventana en la que aparecera el grafico, comoen la figura 52. Es importante recordar que no existe el verbo “graficar”, asıque cada vez que se hable de un grafico se refiere al resultado de trazar puntos,segmentos de recta o de curva en un grafico.

M. Lugo 16 Curso basico de R

R fq-unam

Fig. 2. Las parejas de datos aparecen como cırculos.

M. Lugo 17 Curso basico de R

R fq-unam

Notese que, a diferencia de muchos otros programas, basta insertar comoargumento los nombres de la variables o vectores ya definidos.

Los graficos en R se trazan de la manera mas simple posible. Como puedeverse en la figura 52, la funcion plot muestra todos los puntos dentro de unaescala ajustada automaticamente, sin intervencion del usuario.

Sin embargo, como se vera mas adelante, es posible anadir elementos infor-mativos al grafico.

Debe tomarse en cuenta que cada vez que se utiliza la funcion plot, se creauna nueva ventana para el grafico en cuestion.

En cada ventana de un grafico es posible anadir varios conjuntos de datos,con la condicion de que el trazo de cada conjunto estara limitado a la escalaestablecida de acuerdo con el primer conjunto de datos que se hayan trazado.

M. Lugo 18 Curso basico de R

R fq-unam

Los vectores con elementos NA

Suponga que se tienen las siguientes variables

> Wingcrd <- c(59, 55, 53.5, 55, 52.5, 57.5, 53, 55)

> Tarsus <- c(22.3, 19.7, 20.8, 20.3, 20.8, 21.5, 20.6, 21.5)

> Head <- c(31.2, 30.4, 30.6, 30.3, 30.3, 30.8, 32.5, NA)

> Wt <- c(9.5, 13.8, 14.8, 15.2, 15.5, 15.6, 15.6, 15.7)

y que se desea conocer la suma de los valores del vector Head

> sum(Head)

[1] NA

como puede verse, la respuesta del programa no es la esperada, pues el ultimodato o elemento del vector es NA (Not Available).

Sin embargo, a pesar de esto, es posible calcular la suma si se hace lo siguiente:

> sum(Head, na.rm = TRUE)

M. Lugo 19 Curso basico de R

R fq-unam

[1] 216.1

donde na.rm (rm=remove) indica al programa que omita la presencia de elemen-tos NA y la respuesta corresponde al calculo de los valores numericos solamente.

Cuando se utilizan otras funciones tambien es valido usar na.rm=TRUE paraomitir toda presencia de NA.

La combinacion de variables

Hasta ahora se tienen cuatro vectores o variables con datos. Recordando que lafuncion c se usa para concatenar valores o variables se puede crear una nuevavariable:

BirdData <- c(Wingcrd, Tarsus, Head, Wt)

por lo que

> BirdData

M. Lugo 20 Curso basico de R

R fq-unam

[1] 59.0 55.0 53.5 55.0 52.5 57.5 53.0 55.0 22.3 19.7 20.8

[12] 20.3 20.8 21.5 20.6 21.5 31.2 30.4 30.6 30.3 30.3 30.8

[23] 32.5 NA 9.5 13.8 14.8 15.2 15.5 15.6 15.6 15.7

que es un vector con 32 elementos o de longitud 32, pero aparecen de tal maneraque es indistinguible a cual de las variables corresponde cada valor.

Los numeros [1], [12] y [23] son el ındice del primer elemento de cadarenglon.

Es posible construir un vector con valores de identificacion. Sabemos que lalongitud de cada variable es de 8, por lo que:

> Id <- rep(c(1, 2, 3, 4), each = 8)

> Id

[1] 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 4 4 4

[28] 4 4 4 4 4

M. Lugo 21 Curso basico de R

R fq-unam

Ası, el vector Id contiene 32 elementos, numericos, que permiten identificara cual variable corresponden los elementos de BirdData, revisando simplementela lista de valores y la de identificacion. Tambien

> Id <- rep(1 : 4, each = 8)

> Id

[1] 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 4 4 4

[28] 4 4 4 4 4

Como puede advertirse, escribir c(1, 2, 3, 4) es equivalente a escribir 1:4

> 1:4

[1] 1 2 3 4

Otra forma de crear la secuencia de valores:

> a <- seq(from = 1, to = 4, by = 1)

> a

M. Lugo 22 Curso basico de R

R fq-unam

[1] 1 2 3 4

Hasta aquı solo se han concatenado valores, pero supongamos que nos in-teresa crear un vector Id2 de longitud 32 y que contenga la palabra “Wingcrd”8 veces, la palabra “Tarsus” 8 veces, etcetera.

Se crea primero al vector VarNames:

> VarNames <- c("Wingcrd", "Tarsus", "Head", "Wt")

> VarNames

[1] "Wingcrd" "Tarsus" "Head" "Wt"

Debe notarse que estos son nombres y no variables, entonces

> Id2 <- rep(VarNames, each = 8)

> Id2

[1] "Wingcrd" "Wingcrd" "Wingcrd" "Wingcrd" "Wingcrd"

[6] "Wingcrd" "Wingcrd" "Wingcrd" "Tarsus" "Tarsus"

[11] "Tarsus" "Tarsus" "Tarsus" "Tarsus" "Tarsus"

M. Lugo 23 Curso basico de R

R fq-unam

[16] "Tarsus" "Head" "Head" "Head" "Head"

[21] "Head" "Head" "Head" "Head" "Wt"

[26] "Wt" "Wt" "Wt" "Wt" "Wt"

[31] "Wt" "Wt"

y si se omitiera each=, se obtenrıa

> rep(VarNames, 8)

[1] "Wingcrd" "Tarsus" "Head" "Wt"

[5] "Wingcrd" "Tarsus" "Head" "Wt"

[9] "Wingcrd" "Tarsus" "Head" "Wt"

[13] "Wingcrd" "Tarsus" "Head" "Wt"

[17] "Wingcrd" "Tarsus" "Head" "Wt"

[21] "Wingcrd" "Tarsus" "Head" "Wt"

[25] "Wingcrd" "Tarsus" "Head" "Wt"

[29] "Wingcrd" "Tarsus" "Head" "Wt"

La funcion cbind permite combinar variables en columnas:

M. Lugo 24 Curso basico de R

R fq-unam

> Z <- cbind(Wingcrd, Tarsus, Head, Wt)

> Z

Wingcrd Tarsus Head Wt

[1,] 59.0 22.3 31.2 9.5

[2,] 55.0 19.7 30.4 13.8

[3,] 53.5 20.8 30.6 14.8

[4,] 55.0 20.3 30.3 15.2

[5,] 52.5 20.8 30.3 15.5

[6,] 57.5 21.5 30.8 15.6

[7,] 53.0 20.6 32.5 15.6

[8,] 55.0 21.5 NA 15.7

Si se dese tener acceso a los datos de la primera columna:

> Z[,1]

[1] 59.0 55.0 53.5 55.0 52.5 57.5 53.0 55.0

o bien, los primeros tres elementos de la primera columna:

M. Lugo 25 Curso basico de R

R fq-unam

> Z[1:3,1]

[1] 59.0 55.0 53.5

Para conocer el segundo renglon:

> Z[2, ]

Wingcrd Tarsus Head Wt

55.0 19.7 30.4 13.8

Otras operaciones de acceso a los datos de Z:

> Z[1, 1] #acceso al primer valor de Wingcrd

Wingcrd

59

M. Lugo 26 Curso basico de R

R fq-unam

> Z[,2:3] #todos los datos de las columnas 2 y 3

Tarsus Head

[1,] 22.3 31.2

[2,] 19.7 30.4

[3,] 20.8 30.6

[4,] 20.3 30.3

[5,] 20.8 30.3

[6,] 21.5 30.8

[7,] 20.6 32.5

[8,] 21.5 NA

> X<-Z[4, 4] #el peso de la cuarta ave

> X

Wt

15.2

M. Lugo 27 Curso basico de R

R fq-unam

> Y<-Z[,4] #igual que Wt

> Y

[1] 9.5 13.8 14.8 15.2 15.5 15.6 15.6 15.7

> W<-Z[,-3] #W contiene todas las variables, excepto Head

> W

Wingcrd Tarsus Wt

[1,] 59.0 22.3 9.5

[2,] 55.0 19.7 13.8

[3,] 53.5 20.8 14.8

[4,] 55.0 20.3 15.2

[5,] 52.5 20.8 15.5

[6,] 57.5 21.5 15.6

[7,] 53.0 20.6 15.6

[8,] 55.0 21.5 15.7

M. Lugo 28 Curso basico de R

R fq-unam

> D<-Z[, c(1, 3, 4)] #D contiene las columnas 1, 3 y 4 de Z

> D

Wingcrd Head Wt

[1,] 59.0 31.2 9.5

[2,] 55.0 30.4 13.8

[3,] 53.5 30.6 14.8

[4,] 55.0 30.3 15.2

[5,] 52.5 30.3 15.5

[6,] 57.5 30.8 15.6

[7,] 53.0 32.5 15.6

[8,] 55.0 NA 15.7

M. Lugo 29 Curso basico de R

R fq-unam

> E<-Z[, c(-1, -3)] #E contiene las columnas 2 y 4 de Z

> E

Tarsus Wt

[1,] 22.3 9.5

[2,] 19.7 13.8

[3,] 20.8 14.8

[4,] 20.3 15.2

[5,] 20.8 15.5

[6,] 21.5 15.6

[7,] 20.6 15.6

[8,] 21.5 15.7

El acceso a los datos de cualquiera de las variables que se han definido an-teriorment es importante tomar en cuenta el numero de renglones y columnasde cada variable para evitar escribir ındices que no corresponden a la variable,por ejemplo, al escribir Z[4,1], nos referimos al renglon 4 y la columna 1 de Z

M. Lugo 30 Curso basico de R

R fq-unam

> Z[4,1]

Wingcrd

55

Y si escribimos

> E[4,3]

Error en E[4, 3] : subındice fuera de los lımites

se observa el hecho de que la variable E no tiene una tercera columna, aunqueel aviso de error no lo especifica, indicando simplemente que la variable tienemenos de 4 renglones o tiene menos de 3 columnas.

Para conocer el numero de renglones y columnas basta con escribir:

> dim(Z)

[1] 8 4

lo que indica que la variable tiene 8 renglones y 4 columnas.

M. Lugo 31 Curso basico de R

R fq-unam

La funcion rbind permite combinar variables en renglones:

> Z2 <- rbind(Wingcrd, Tarsus, Head, Wt)

> Z2

[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]

Wingcrd 59.0 55.0 53.5 55.0 52.5 57.5 53.0 55.0

Tarsus 22.3 19.7 20.8 20.3 20.8 21.5 20.6 21.5

Head 31.2 30.4 30.6 30.3 30.3 30.8 32.5 NA

Wt 9.5 13.8 14.8 15.2 15.5 15.6 15.6 15.7

La combinacion de datos con la funcion vector : En lugar de la funcion c

se puede usar la funcion vector para almacenar datos. Si se conoce la longituddel vector, entonces se puede escribir lo siguiente:

> W <- vector(length = 8)

> W[1]<- 59

> W[2]<- 55

> W[3]<- 53.5

M. Lugo 32 Curso basico de R

R fq-unam

> W[4]<- 55

> W[5]<- 52.5

> W[6]<- 57.5

> W[7]<- 53

> W[8]<- 55

> W

[1] 59.0 55.0 53.5 55.0 52.5 57.5 53.0 55.0

Notese que el resutlado es practicamente igual al de la funcion c, excepto quecon la funcion vector es posible definir de antemano la longitud del vector, quese puede utilizar en tareas que incluyan ciclos, por ejemplo.

Tambien se pueden combinar datos mediante la funcion matrix .

Primero se crea la matriz y se observa su contenido:

> Dmat <- matrix(nrow = 8, ncol = 4)

> Dmat

M. Lugo 33 Curso basico de R

R fq-unam

[,1] [,2] [,3] [,4]

[1,] NA NA NA NA

[2,] NA NA NA NA

[3,] NA NA NA NA

[4,] NA NA NA NA

[5,] NA NA NA NA

[6,] NA NA NA NA

[7,] NA NA NA NA

[8,] NA NA NA NA

Lo que se observa es la creacion de una matriz vacıa. Para llenarla se hace losiguiente:

> Dmat[,1]<- c(59, 55, 53.5, 55, 52.5, 57.5, 53, 55)

> Dmat[,2]<- c(22.3, 19.7, 20.8, 20.3, 20.8, 21.5, 20.6, 21.5)

> Dmat[,3]<- c(31.2, 30.4, 30.6, 30.3, 30.3, 30.8, 32.5, NA)

> Dmat[,4]<- c(9.5, 13.8, 14.8, 15.2, 15.5, 15.6, 15.6, 15.7)

M. Lugo 34 Curso basico de R

R fq-unam

Ahora:

> Dmat

[,1] [,2] [,3] [,4]

[1,] 59.0 22.3 31.2 9.5

[2,] 55.0 19.7 30.4 13.8

[3,] 53.5 20.8 30.6 14.8

[4,] 55.0 20.3 30.3 15.2

[5,] 52.5 20.8 30.3 15.5

[6,] 57.5 21.5 30.8 15.6

[7,] 53.0 20.6 32.5 15.6

[8,] 55.0 21.5 NA 15.7

Como puede observarse, el resultado es casi el mismo que el que se obtuvo con lafuncion cbind, excepto que Dmat carece de encabezados, pues no se han escritoaun.

M. Lugo 35 Curso basico de R

R fq-unam

Para asignar nombres a las columnas se puede utilizar la funcion colnames :

> colnames(Dmat) <- c("Wingcrd", "Tarsus", "Head","Wt")

> Dmat

Wingcrd Tarsus Head Wt

[1,] 59.0 22.3 31.2 9.5

[2,] 55.0 19.7 30.4 13.8

[3,] 53.5 20.8 30.6 14.8

[4,] 55.0 20.3 30.3 15.2

[5,] 52.5 20.8 30.3 15.5

[6,] 57.5 21.5 30.8 15.6

[7,] 53.0 20.6 32.5 15.6

[8,] 55.0 21.5 NA 15.7

Hasta aquı, el proceso de la construccion de la matriz ha sido largo, sin em-bargo, recordando que ya se tienen los vectores Wingcrd, Tarsus, Head, Wt,entonces:

M. Lugo 36 Curso basico de R

R fq-unam

> Dmat2 <- as.matrix(cbind(Wingcrd, Tarsus, Head, Wt))

> Dmat2

Wingcrd Tarsus Head Wt

[1,] 59.0 22.3 31.2 9.5

[2,] 55.0 19.7 30.4 13.8

[3,] 53.5 20.8 30.6 14.8

[4,] 55.0 20.3 30.3 15.2

[5,] 52.5 20.8 30.3 15.5

[6,] 57.5 21.5 30.8 15.6

[7,] 53.0 20.6 32.5 15.6

[8,] 55.0 21.5 NA 15.7

como ya se habıa obtenido anteriormente.

Otra funcion util para la combinacion de datos es data.frame , ası:

> Dfrm <- data.frame(WC = Wingcrd, TS = Tarsus, HD = Head, W = Wt)

> Dfrm

M. Lugo 37 Curso basico de R

R fq-unam

WC TS HD W

1 59.0 22.3 31.2 9.5

2 55.0 19.7 30.4 13.8

3 53.5 20.8 30.6 14.8

4 55.0 20.3 30.3 15.2

5 52.5 20.8 30.3 15.5

6 57.5 21.5 30.8 15.6

7 53.0 20.6 32.5 15.6

8 55.0 21.5 NA 15.7

Con este tipo de datos es posible hacer otras operaciones sin alterar a Dfrm, porejemplo:

> M <- lm(WC~Wt, data = Dfrm)

> M

M. Lugo 38 Curso basico de R

R fq-unam

Call:

lm(formula = WC ~ Wt, data = Dfrm)

Coefficients:

(Intercept) Wt

65.5315 -0.7239

o bien

> summary(M)

Call:

lm(formula = WC ~ Wt, data = Dfrm)

Residuals:

Min 1Q Median 3Q Max

-1.8115 -1.2589 -0.0984 0.5618 3.2609

M. Lugo 39 Curso basico de R

R fq-unam

Coefficients:

Estimate Std. Error t value Pr(>|t|)

(Intercept) 65.5315 4.6113 14.211 7.59e-06 ***

Wt -0.7239 0.3159 -2.291 0.0618 .

---

Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.757 on 6 degrees of freedom

Multiple R-squared: 0.4666, Adjusted R-squared: 0.3777

F-statistic: 5.249 on 1 and 6 DF, p-value: 0.06184

M. Lugo 40 Curso basico de R

R fq-unam

Almacenamiento de la tabla de valores

Si por alguna razon se desea almacenar a Dfrm en un archivo se puede proce-der como sigue, primero se especifica el directorio, mediente la funcion setwd ,en el que se almacenara o guardara la informacion y luego se utiliza la funcionwrite.table o write.csv para guardar la tabla en un archivo:

> setwd("d:/Working/Quimica/Ejercicios/Presentaciones/")

> write.table(Dfrm,"Dfrm.txt")

donde "d:/Working/Quimica/Ejercicios/Presentaciones/" indica el direc-torio en el que se almacenara el archivo y write.table(Dfrm,"Dfrm.txt") esla instruccion que contiene como argumento el objeto Dfrm que se almacenaraen el archivo Dfrm.txt.

Seleccione el archivo Dfrm.txt en el directorio especificado y verifique que elcontenido es el esperado.

M. Lugo 41 Curso basico de R

R fq-unam

Si se desea suprimir los numeros de renglon y los encabezados de las columnasbasta con escribir:

> write.table(Dfrm,"Dfrm.txt", row.names=FALSE, col.names=FALSE)

con lo que el archivo de texto guardado aparecera sin los numeros de renglon ysin los encabezados.

Una vez que se ha especificado el directorio de almacenamiento de archivos,es posible almacenar el contenido de Dfrm con otro formato:

> write.csv(Dfrm,"Dfrm.csv", row.names=FALSE)

donde las siglas “csv” significan comma separated values.

Este tipo de archivo es comun, y es posible editarlo con hojas de calculo comoMS Excel. Para los usuarios acostumbrados a MS Excel, los archivos de datosseparados por comas son muy atractivos, aunque pronto dejaran a un lado adicho programa cuando consideren la eficiencia y facilidad de uso de R.

M. Lugo 42 Curso basico de R

R fq-unam

El trazo de graficos y sus opciones

Aunque ya se ha dado un ejemplo del trazo de graficos es ahora cuando inicia-remos un uso mas completo en la presentacion de graficos de datos.

El primer tipo de grafico que estudiaremos sera el de dispersion.

Un grafico de dispersion de datos de dos variables x y y se presenta en R conla funcion plot como se describe a continuacion.

Suponga que se tienen dos conjuntos de datos:

> x <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

> y <- c(1, 2, 3, 7, 11, 13, 17, 19, 23, 29)

Para representarlos como puntos en un grafico de dispersion como puntos enel plano, basta con escribir

> plot(x,y)

M. Lugo 43 Curso basico de R

R fq-unam

El programa presenta una venta-na exclusiva para el trazo de losgraficos como el de la figura 53.Notese que se trata del grafico dedispersion mas sencillo que per-mite la funcion plot.

Si el usuario esta satisfechocon este tipo de grafico, puedequedarse tal com se observa.

Para usuarios mas exigentes,la funcion plot tiene opcionesque pueden modificar la presen-tacion del grafico, como por ejem-plo, se pueden cambiar las etique-tas de los ejes. Fig. 3. Grafico de dispersion.

M. Lugo 44 Curso basico de R

R fq-unam

El usuario puede especificar las etiquetas de los ejes como sigue:

> plot(x,y, xlab="variable independiente",

ylab="variable dependiente")

Fig. 4. Las etiquetas de los ejes las define el usuario.

M. Lugo 45 Curso basico de R

R fq-unam

El usuario puede especificar los sımbolos de los puntos:

> plot(x,y, xlab="variable independiente",

ylab="variable dependiente", pch=0)

Fig. 5. Se pueden tener diferentes sımbolos (pch=0, 1, 2..., 25, o cracteres ASCII)para trazar los puntos.

M. Lugo 46 Curso basico de R

R fq-unam

Los sımbolos pueden aparecer unidos mediante segmentos de recta:

> plot(x,y, xlab="X", ylab="Y", pch=16, type="b")

Fig. 6. Se pueden tener diferentes sımbolos unidos por segmentos de recta.

M. Lugo 47 Curso basico de R

R fq-unam

O simplemente segmentos de recta:

> plot(x,y, xlab="X", ylab="Y", type="l")

Fig. 7. La representacion por segmentos de recta.

M. Lugo 48 Curso basico de R

R fq-unam

Tambien se puede dar color:

> plot(x,y, xlab="X", ylab="Y", type="b", pch=19, col=2)

Fig. 8. Los colores anaden diferente impresion a la vista.

M. Lugo 49 Curso basico de R

R fq-unam

Se puede cambiar el espesor de la lınea:

> plot(x,y, xlab="X", ylab="Y", type="b", pch=19, col=2, lwd=3)

Fig. 9. Los colores anaden diferente impresion a la vista.

M. Lugo 50 Curso basico de R

R fq-unam

Se puede anadir una retıcula alineada con las marcas de la escala:

> plot(x,y, xlab="X", ylab="Y", pch=19,col=4,

panel.first=grid(col="orange"))

Fig. 10. Las retıculas con color se usan como guıas visuales.

M. Lugo 51 Curso basico de R

R fq-unam

Se puede anadir un tıtulo y un subtıtulo:

> plot(x,y, xlab="X", ylab="Y", main="Tıtulo", sub="Subtıtulo",

pch=19, col=4, panel.first=grid(col=3))

Fig. 11. Los tıtulos y subtıtulos dan informacion adicional.

M. Lugo 52 Curso basico de R

R fq-unam

Mas de un grupo de datos en los graficos

Hasta ahora, olamente se ha utilizado un par de vectores que contienen el mismonumero de datos, es decir, son vectores de la misma longitud.

En muchas ocasiones se tiene la necesidad de trazar mas de un par de vectoreso variables en un grafico de dispersion o bien comparar dos graficos por separado.

A continuacion consideraremos dos conjuntos de datos de dos variables cadauno, es decir, como si se tratara de datos de dos experimentos, a saber,

x <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

y <- c(1, 2, 3, 7, 11, 13, 17, 19, 23, 29)

y

xx <- c(1, 2, 3, 4, 5, 6, 7, 8, 9)

yy <- c(0.7, 4.5, 10, 15, 23, 38, 50, 61, 85)

Los cuatro vectores son diferentes, como puede observarse en sus definiciones.

M. Lugo 53 Curso basico de R

R fq-unam

Tracemos primero las variableso vectores x y y, con puntos decolor azul:plot(x,y, xlab="X", ylab="Y",

pch=19, col=4,

panel.first=grid(col=

"orange"))

Fig. 12. Grafico de dispersion de las varia-bles x y y.

M. Lugo 54 Curso basico de R

R fq-unam

El trazo de xx y yy en el mismografico con puntos en color rojose hace con la funcion points :points(xx, yy, pch=19,

col=2)

Como puede observarse, soloaparecen cinco de los diez pun-tos, debido a que la escala quedodefinida a partir del primer parde variables.

Fig. 13. Aparecen solo algunos puntos delsegundo par devariables.

M. Lugo 55 Curso basico de R

R fq-unam

Entonces lo conveniente es tra-zar primero xx y yy y despuesx y yplot(xx,yy, xlab="X",

ylab="Y", pch=19, col=4,

panel.first=grid(col=

"orange"))

points(x, y, pch=19, col=2)

Como puede observarse en lafigura 29.

Fig. 14. Aparecen todos los puntos de lascuatro variables.

M. Lugo 56 Curso basico de R

R fq-unam

En otras condiciones, a veces se requiere de trazar las parejas de variables engraficos separados.

Ya se uso la funcion plot que abre una ventana para trazar un grafico dedispersion o bien traza el grafico en una ventana grafica ya abierta.

Para trazar otro grafico en otra ventana grafica se usa la funcion windows()

que permite abrir una ventana grafica vacıa, que permite insertar varios tiposde graficos demas de los graficos de dispersion. Mas adelante se considerara elcontenido del argumento de esta funcion, que permite especificar las condicionesen las que se abre cada nueva ventana, Dado que por ahora el argumento estavacıo, la ventana grafica que se abre tiene las especificaciones establecida poromision.

El hecho de crear mas de una ventana grafica permite mover a cada unaa traves de la consola o ventana de una sesion de manera independiente. Acontinuacion se describe el proceso de creacion de mas de una ventana grafica.

M. Lugo 57 Curso basico de R

R fq-unam

plot(x,y, xlab="X", ylab="Y", pch=19, col=4,

panel.first=grid(col="orange"))

windows()

plot(xx,yy, xlab="X", ylab="Y", pch=19, col=4,

panel.first=grid(col="orange"))

Fig. 15. Dos graficos en dos ventanas independientes.

M. Lugo 58 Curso basico de R

R fq-unam

Varios graficos en una misma ventana

Ademas de que es posible abrir varias ventanas graficas que pueden contenerdiferentes tipos de graficos, en R existe la funcion par con una gran cantidadde opciones en su argumento para especificar una gran cantidad de parametrosen la presentacion de graficos.

Entre otras opciones, la funcion par permite la creacion de espacios para masde un grafico en una ventana grafica.

Por ejemplo, al hacer analisis multivariante se puede crear una “matriz” degraficos que permiten visualizar las dispersiones de datos entre varias parejasde variables.

A continuacion se describe como se presentaran los graficos correspondientesa las parejas x y y en un grafico y xx y yy en otro grafico, pero dentro de unamisma ventana grafica.

M. Lugo 59 Curso basico de R

R fq-unam

par(mfrow=c(1,2))

plot(x,y, xlab="X", ylab="Y", pch=19, col=4, panel.first=

grid(col="orange"))

plot(xx,yy, xlab="XX", ylab="YY", pch=19, col=4, panel.first=

grid(col="orange"))

La funcion par(mfrow=c(1,2)), indica que la ventana contendra dos espaciospara graficos, uno al lado de otro, ası, en cuanto se escribe esta funcion y sepulsa la tecla “Retorno” en el teclado, aparece una ventana vacıa, del mismomodo que cuando se uso la funcion windows, excepto que en este caso se haespecificado que la ventana tendra reservados dos espacios uno a la derecha delotro. En el primer espacio se trazara el grafico de dispersion de las variables xy y usando la funcion plot y en el espacio a la derecha del primero se trazarael grafico de dispersion de las variables xx y yy tambien con la funcion plot.

En la figura 51 se observa el resultado de la aplicacion de los comandosanteriores.

M. Lugo 60 Curso basico de R

R fq-unam

Fig. 16. Dos graficos en una ventana.

M. Lugo 61 Curso basico de R

R fq-unam

Es posible construir ventanas graficas con mas graficos cambiando los valoresde par(mfrow=c(m,n)), donde m es el numero de renglones y n el numero decolumnas que se dejaran como espacios para insertar graficos.

A partir de ahora los graficos se presentaran sin la ventana que se ha venidopresentando hasta este momento, pues se trataba de capturas de la pantalla.

Si bien las capturas de pantalla tienen la calidad suficiente para presentarlasen este documento, se hara uso de la capacidad de R para exportar los graficosen diferentes formatos y estos seran los que se presentaran a continuacion.

M. Lugo 62 Curso basico de R

R fq-unam

El control de la presentacion de los graficos

Como el usuario ya se habra percatado, los margenes alrededor de un graficoen una ventana grafica son amplios.

La separacion entre los valores de la escalas tambien son bastante amplios,por lo que resultarıa util o esteticamente mas atractivo cambiar estas condicio-nes.

Como ya se menciono anteriormente, la funcion par tiene muchas opcionespara ajustar muchos parametros (utilice help(par)) para consultar el manual.

En primer lugar se ajustaran los margenes alrededor del grafico.

La lınea de comandos par(mar=c(0, 0, 0, 0)) abre una ventana graficavacıa y ajusta los margenes inferior, izquierdo, superior y derecho a cero, 0,como sigue:

M. Lugo 63 Curso basico de R

R fq-unam

> par(mar=c(0, 0, 0, 0))

> plot(x,y, xlab="X", ylab="Y", pch=19, col=4,

panel.first=grid(col="orange"))

Fig. 17. Los margenes externos se ajustaron a cero, 0.

Notese que desaparecio el espacio necesario para la escala y sus marcas, e inclusotampoco queda espacio para escribir tıtulo ni subtıtulo.

M. Lugo 64 Curso basico de R

R fq-unam

El modo mas conveniente para controlar los ajustes que el programa utilizapor omision consiste en conocer algunas funciones mas, tanto para el control delas marcas de las escalas como los valores numericos de las mismas.

En el ejercicio que se presenta a continuacion se ha pretendido optimizartodos los parametros, pero el usuario los puede ajustar segun su deseo o nece-sidades.

Teniendo en mente que se optimizara el espacio para el trazo de los graficos,inserte los comandos siguientes:

> par(mar=c(3, 2, 1, 0.1))

> plot(x, y, axes = FALSE, xlab = NA, ylab = NA, type="n",

panel.first=grid(col="orange"))

La primera lınea de comandos establece los margenes inferior, izquierdo, superiory derecho dentro de los cuales se insertara el grafico, como puede verse, losvalores numericos corresponden a los margenes.

M. Lugo 65 Curso basico de R

R fq-unam

En el ejercicio anterior se ob-servo que un margen de cero nodeja espacio ni para que se mues-tren los lımites de la caja que con-tiene al grafico.

La segunda lınea de comandosinserta un grafico sin ejes (axes =

FALSE), sin etiquetas en los ejes(xlab = NA y ylab = NA), sinpuntos de los datos (type="n")pero sı con la retıcula.

Fig. 18. Grafico de dispersion “en blanco”.

M. Lugo 66 Curso basico de R

R fq-unam

Para crear un marco dentrodel cual se inserta el grafico seusa la funcion box . Usando estafuncion y points, se obtiene loque se observa en la figura 54.

> box(col=4)

> points(x,y, pch=19,

type="b", col=2)

Notese que ya es posible ob-servar los margenes alrededor delgrafico, que se han reservado pa-ra incluir las escalas, sus marcasy otros textos. Fig. 19. Grafico de dispersion con marco

delimitador.

M. Lugo 67 Curso basico de R

R fq-unam

Ahora, se colocaran las marcasde la escala dentro del grafico, co-mo en la figura 42. La funcion quepermite colocar las marcas de es-cala es axis .> axis(side = 1, tck = .01,

labels = NA, col=4)

donde side=1 se refiere al lado in-ferior de la grafica; el parametrotck=0.01 indica que las marcasde la escala tienen una longitudde un centesimo de la altura delgrafico. El parametro labels=NA

inhibe la colocacion automaticade los valores numericos de la es-cala.

Fig. 20. Grafico de dispersion al que se haanadido las marcas de la escala.

M. Lugo 68 Curso basico de R

R fq-unam

Ahora, se colocaran los valoresnumericos de la escala, como en lafigura 43:> axis(side = 1, lwd = 0,

line = -0.9, col=4)

donde lwd=0 inhibe la colocacionautomatica de las marcas de laescala en tanto que line = -0.9

indica la posicion en ala que secolocan los valores numericos dela escala.

Fig. 21. Grafico de dispersion al que se haanadido los valores numericos de la escala.

M. Lugo 69 Curso basico de R

R fq-unam

Ahora, se colocaran los valoresnumericos y las marcas de la es-cala, como en la figura 44:> axis(side = 2, tck = .01,

labels = NA, col=4)

> axis(side = 2, lwd = 0,

line = -0.9, las = 1,

col=4)

donde side=2 se refiere al mar-gen izquierdo del grafico y las=1

cambia la orientacion de los va-lores numericos de la escala, ve-rifique esto ultimo omitiendo elparametro las=1 en la funcionaxis. Fig. 22. Grafico de dispersion con marcas

de las escalas y valores numericos.

M. Lugo 70 Curso basico de R

R fq-unam

Ahora, se insertara la etiqueta del eje horizontal con la funcion mtext :

> mtext(side = 1, "x [unidades]", line = 1)

Fig. 23. Se ha insertado la etiqueta del eje horizontal.

M. Lugo 71 Curso basico de R

R fq-unam

Ahora, se insertara la etiqueta del eje vertical:

> mtext(side = 2, "y [unidades]", line = 1.2)

Fig. 24. Se ha insertado la etiqueta del eje vertical.

M. Lugo 72 Curso basico de R

R fq-unam

Ahora, se insertara el subtıtulo:

> mtext(side = 1, "Subtıtulo", line = 2)

Fig. 25. Se ha insertado el subtıtulo.

M. Lugo 73 Curso basico de R

R fq-unam

Finalmente se insertara el tıtulo:

> mtext(side = 3, "Tıtulo", line = 0)

Fig. 26. Se ha insertado el tıtulo.

M. Lugo 74 Curso basico de R

R fq-unam

Quizas esta forma de ir insertando elementos paso a paso haga pensar alusuario que se trata de un proceso tedioso, pero si se copian todas las instruc-ciones y se pegan en R para su compilacion, se observara la rapidez con la que sepuede trazar un grafico una vez que se han especificado razonablemente todoslos parametros.

El script completo es:

x <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

y <- c(1, 2, 3, 7, 11, 13, 17, 19, 23, 29)

par(mar=c(3, 2, 1, 0.1))

plot(x, y, axes = FALSE, xlab = NA, ylab = NA, type="n",

panel.first=grid(col="orange"))

box(col=4)

points(x,y, pch=19, type="b", col=2)

axis(side = 1, tck = .01, labels = NA, col=4)

axis(side = 1, lwd = 0, line = -0.9, col=4)

M. Lugo 75 Curso basico de R

R fq-unam

axis(side = 2, tck = .01, labels = NA, col=4)

axis(side = 2, lwd = 0, line = -0.9, las = 1, col=4)

mtext(side = 1, "x [unidades]", line = 1)

mtext(side = 2, "y [unidades]", line = 1.2)

mtext(side = 1, "Subtıtulo", line = 2)

mtext(side = 3, "Tıtulo", line = 0)

M. Lugo 76 Curso basico de R

R fq-unam

El trazo de un histograma

Ademas de los graficos de dispersion, a veces se necesita trazar histogramasde frecuencias para observar la forma en la que se distribuyen los datos de lasmediciones de una variable aleatoria.

A continuacion se describira la construccion de un histograma de frecuenciaspara representar una distribucion de datos.

La generacion de numeros aleatorios

Supongamos que los valores de la variable aleatoria son los que se presentana continuacion y que se asignan al vector x. Los valores se generan usando lafuncion rnorm :

> x <- rnorm(157, mean=12.5, sd=3.2)

M. Lugo 77 Curso basico de R

R fq-unam

Esta funcion genera 157 numeros aleatorios con distribucion gaussiana conmedia mean y desviacion tıpica sd ; si se omiten dichos parametros, entoncesse considera un adistribucion normal, con media igual a cero y desviacion tıpicaigual a 1.

En este ejercicio el lector no debe esperar obtener un grafico igual al quese obtiene de la distribucion de datos, pues en cada computadora los valoresaleatorios generados son diferentes. Sin embargo, a grosso modo, los histogramasse pareceran en algo, pues proceden de l amisma funcion generadora.

Adicionalmente a esto, el lector puede generar un conjunto de numeros alea-torios diferente si usa otro valor que no sea 157, y una media y desviaciontıpica de su agrado. A pesar de que puedan presentarse diferencias notables, elprocedimiento es el mismo en todos los casos.

Para trazar el histograma se usa la funcion hist que resulta en el graficode la figura 27:

M. Lugo 78 Curso basico de R

R fq-unam

> hist(x)

Fig. 27. Histograma de frecuencias.

M. Lugo 79 Curso basico de R

R fq-unam

Ası, se ha logrado trazar el histograma de frecuencias del modo mas simpleposible en R, dejando que el programa aplique los parametros de construccionque tiene ya por omision.

Sin embargo, lo que conviene es utilizar la lınea de comandos que se presentamas abajo, en la que la construccion del histograma se asigna a una variable,almacenando ası informacion que, a primera vista, esta oculta a los ojos delusuario.

> h <- hist(x)

en este caso, ademas de que el histograma aparece en una ventana grafica,los resultados de los calculos que hace el programa y no se muestran, quedanalmacenados en la variable h.

Antes de conocer el contenido de la variable h, quizas convenga averiguaralgunos valores de la distribucion, como:

M. Lugo 80 Curso basico de R

R fq-unam

> min(x)

[1] 2.963557

> max(x)

[1] 20.96525

> mean(x)

[1] 12.7569

> sd(x)

[1] 3.258798

Como puede verse, la media y la desviacion tıpica difieren de los valores es-pecificados al usar la funcion rnorm, pero la diferencia no es muy importantepor lo que se pueden aceptar los resultados que se obtuvieron con las funcionesanteriores (min, max, mean, sd). Despues de todo, la funcion rnorm se utilizapara generar muestras numeros aleatorios, ası que todo va bien hasta ahora.

Al igual que muchas de las funciones de R, hist cuenta con parametrosdefinidos por omision. Para conocerlos basta con escribir:

M. Lugo 81 Curso basico de R

R fq-unam

> h

que es la variable en la que se almacenaron los resultados de la funcion hist,para que se observe

$breaks

[1] 2 4 6 8 10 12 14 16 18 20 22

$counts

[1] 2 3 9 15 27 44 34 17 4 2

$density

[1] 0.006369427 0.009554140 0.028662420 0.047770701 0.085987261 0.140127389

[7] 0.108280255 0.054140127 0.012738854 0.006369427

$mids

[1] 3 5 7 9 11 13 15 17 19 21

M. Lugo 82 Curso basico de R

R fq-unam

$xname

[1] "x"

$equidist

[1] TRUE

attr(,"class")

[1] "histogram"

Como puede verse, aparecen los nombres de las secciones que contiene lavariable, como cuando escribimos names(hist), solo que ahora el programamuestra tambien los valores contenidos en cada seccion.

Analicemos algunas secciones. Para empezar veamos el contenido de la sec-cion breaks.

> h$breaks

M. Lugo 83 Curso basico de R

R fq-unam

[1] 2 4 6 8 10 12 14 16 18 20 22

Al observar el hsitograma y este conjunto de valores se tiene que

> min(h$breaks)

[1] 2

y que

> max(h$breaks)

[1] 22

y hagamos dos comparaciones:

primero min(h$breaks)<min(x) y luego max(h$breaks)>max(x)

ası, la construccion del histograma se hace considerando un intervalo de valoresmas amplio que x, por lo que la funcion hist, en su forma mas simple, desarrollalos calculos sin intervencion del usuario.

M. Lugo 84 Curso basico de R

R fq-unam

Luego

> h$counts

[1] 2 3 9 15 27 44 34 17 4 2

> length(h$counts)

[1] 10

Se trata de diez valores que contiene la seccion, que es el mismo numero debarras en el histograma. Cada uno de estos valores es igual a la frecuencia delintervalo de clase.

Otro modo de observar los valroes numericos de las frecuencias se logra pre-sentaandolos directamente sobre el histograma, como sigue:

> h <- hist(x, labels=TRUE)

Como se puede ver en la figura 28, los valores de las frecuencias aparecen en laparte superior de las columnas del histograma.

M. Lugo 85 Curso basico de R

R fq-unam

Fig. 28. Histograma de frecuencias con el numero de cuentas.

M. Lugo 86 Curso basico de R

R fq-unam

El numero de barras o columnas que aparecen se debe a que el programautiliza el criterio de Sturges, por omision, sin embargo, es posible cambiar elnumero de barras como sigue:

> h <- hist(x, labels=TRUE, breaks=15)

Fig. 29. Histograma de frecuencias con el numero de barras ajustado por el usuario.

M. Lugo 87 Curso basico de R

R fq-unam

Tambien puede dar color a las barras

> h <- hist(x, labels=TRUE, col="gray")

Fig. 30. Color en las barras del histograma.

M. Lugo 88 Curso basico de R

R fq-unam

Puede asignarse un color especıfico al borde de las barras

> h <- hist(x, labels=TRUE, col="gray", border="red")

Fig. 31. Color en las barras del histograma y en el brode de las barras.

M. Lugo 89 Curso basico de R

R fq-unam

Las barras pueden llenarse con un patron de lıneas

> h <- hist(x, border="red", density=10, angle=45, col="darkgreen")

Fig. 32. Barras con patron de lıneas.

M. Lugo 90 Curso basico de R

R fq-unam

La construccion de funciones

R tiene tambien la opcion de que el usuario construya sus propias funciones.

Cuando se conoce una funcion es posible trazarla en un grafico, de modosemejante al como ya se hizo en ocasiones pasadas.

Las funciones que R permite construir pueden contener uno o mas argumen-tos, f(x1, x2, ...).

Ademas, el programa permite construir funciones que tienen consisten enprocedimientos completos, como leer archivos de datos, escribir archivos de re-sultados, efectuar los calculos correspondientes, etcetera.

Considerando que R es un programa /lenguaje que se diseno originalmentesolo para hacer calculos estadısticos y calculo numerico es natural que todotipo de operaciones se haga alrededor de valores numericos. Sin embargo, laposibilidad de construir funciones y trazar graficos mucho mas comlicados quelos de dispersion han venido haciendo de R un programa muy atractivo.

M. Lugo 91 Curso basico de R

R fq-unam

La construccion de una funcion simple

En la cinematica se acostumbra a tratar con las leyes de Newton, de maneraque lo mas frecuente es escribir las ecuaciones de movimiento de una partıculapuntual.

Ası, la ecuacion de movimiento unidimensional de una partıcula en un mo-vimiento rectilıneo uniforme se expresa

x(t) = x0 + v0t

donde x0 es la posicion inicial de la partıcula y v0 la rapidez de movimiento.

La construccion de la ecuacion de movimiento en R se hace como sigue:

> x0 <- 1

> v0 <- 1.25

> x <- function(t) x0 +v0*t

M. Lugo 92 Curso basico de R

R fq-unam

Debe notarse la ausencia del argumento en la definicion de la funcion. Comopuede verse, el argumento se encuentra a continuacion de function y que losparametos x0(=x0) y v0(=v0) se han definido previamente, antes de escribir lafuncion.

Al tratarse de un progrma a base de comandos, se considerarıa atractivo quefuese posible excribir ındices o subındices en las variables, sin emabrgo, esto noes obstaculo alguno para programa suficientemente bien lo que se desea.

La evaluacion

La simple construccion de las funciones no es la meta, lo que se pretendees efectuar evaluaciones e incluso trazar graficos que representen aquello que sedesea transmitir.

Empecemos por evaluar la funcion x, para ello, basta con escribir, por ejem-plo:

M. Lugo 93 Curso basico de R

R fq-unam

> x(0)

[1] 1

como puede verse, el programa evalua la funcion tal como se esperaba, sinproblema alguno.

Pero en muchas ocasiones las funciones no se construyen para evaluar puntoa punto, se construyen para hacer evaluaciones usando conjuntos de valores.

Ası, si se desea evaluar la funcion usando valores t=(0, 1, 2, 3, 4, 5) seprocede como sigue:

> t <- seq(0,5,1)

> x(t)

[1] 1.00 2.25 3.50 4.75 6.00 7.25

los resultados son los esperados, pero como se acostumbra academicamente, lalectura de valores es mas atractiva si los resultados se persentan en forma detabla.

M. Lugo 94 Curso basico de R

R fq-unam

Dado que ya hemos aprendido a unir variables, entonces podemos escribir:

> data.frame(t, x=x(t))

t x

1 0 1.00

2 1 2.25

3 2 3.50

4 3 4.75

5 4 6.00

6 5 7.25

como se esperaba, los resultados aparecen en dos columnas.

El trazo de un grafico que involucre el uso de funciones se hace practicamentedel mismo modo que cuando se trazaron pares de vectores o variables. R trata alas variables de acuerdo con la estructura de su construccion, en este caso comovectores de n = 6 dimensiones o componentes.

M. Lugo 95 Curso basico de R

R fq-unam

Ası, pues, tracemos la funcion en un grafico de dispersion.

> par(mar=c(3, 2, 1, 0.1))

> plot(t, x(t), axes = FALSE, xlab = NA, ylab = NA, type="n",

panel.first=grid(col="orange"))

> box(col=4)

> points(t, x(t), pch=19, type="b", col=2)

> axis(side = 1, tck = .01, labels = NA, col=4)

> axis(side = 1, lwd = 0, line = -0.9, col=4)

> axis(side = 2, tck = .01, labels = NA, col=4)

> axis(side = 2, lwd = 0, line = -0.9, las = 1, col=4)

> mtext(side = 1, "t [s]", line = 1)

> mtext(side = 2, "x [m]", line = 1.2)

> mtext(side = 3, "Movimiento rectilıneo uniforme", line = 0)

En la figura 51 se presenta el grafico de dispersion.

M. Lugo 96 Curso basico de R

R fq-unam

Fig. 33. El trazo de una funcion.

M. Lugo 97 Curso basico de R

R fq-unam

Textos dentro de un grafico

Alguna veces es necesario incluir textos descriptivos dentro de un grafico,con el fin de resumir explicaciones que pudieanran ser de mayor longtud.

La insercion de textos dentro de un grafico requiere de localizar un puntodentro del grafico, de modo que al momento de incluir el texto, este no quefuera del area visible.

Aunque es posible dar algun formato a los textos, por el momento nos limi-taremos a escribir textos sencillo y cortos.

Por ejemplo:

> text(1, 7, "la posicion inicial xo=1.0 m")

> text(1, 6.7, "la rapidez inicial vo=1.25 m/s")

como puede observarse en el grafico de la figura 52, el texto queda colocado enel punto (1, 7) y (1, 6.7) y esta centrado con respecto a dicho punto.

M. Lugo 98 Curso basico de R

R fq-unam

Fig. 34. Grafico con texto en su interior.

M. Lugo 99 Curso basico de R

R fq-unam

Al texto tambien se le pueden asignar algunos atributos. Por ejemplo:

> text(1, 7, "la posicion inicial xo=1.0 m", col=2)

> text(1, 6.7, "la rapidez inicial vo=1.25 m/s", col=4)

Fig. 35. Grafico con texto en su interior de color.

M. Lugo 100 Curso basico de R

R fq-unam

O bien, atributos de alineacion:

> text(1, 7, "la posicion inicial xo=1.0 m", pos=4)

> text(1, 6.7, "la rapidez inicial vo=1.25 m/s", pos=4)

Fig. 36. Grafico con texto alineado por la izquierda.

M. Lugo 101 Curso basico de R

R fq-unam

Alineacion por la derecha:

> text(1, 7, "la posicion inicial xo=1.0 m", pos=2)

> text(1, 6.7, "la rapidez inicial vo=1.25 m/s", pos=2)

Fig. 37. Grafico con texto alineado por la derecha.

M. Lugo 102 Curso basico de R

R fq-unam

Otras funciones para el trazo de graficos

Hasta ahora, se han trazado graficos que incluyen sımbolos y lineas, combi-nados o por separado, para lo cual se han utilizado las funciones plot y points.

Como argumento de plot se incluye el parametro type que puede tenervalores como type="l" (lines), type="n" (ninguno), type="b" (ambos, lıneasy sımbolos), type="p" (sımbolos) entre otros.

La funcion points se utiliza solo para anadir puntos representados por sımbo-los en un grafico creado previamente con la funcion plot. Los diferentes sımbolosse seleccionan con la funcion pch, como ya se vio anteriormente.

Ademas existen otras funciones para el trazo de graficos, entre ellas estanlines , segments y arrows . Con estas funciones se pueden anadir elementosa los graficos creados perviamente con la funcion plot.

Su uso resulta claro a traves de los siguientes ejemplos.

M. Lugo 103 Curso basico de R

R fq-unam

Primero se utilizara el siguiente conjunto de datos:

> x <- c(1, 2, 3, 4, 5, 6, 7, 8, 9)

> y <- c(0.7, 4.5, 10, 15, 23, 38, 50, 61, 85)

y se traza el grafico correspondiente

par(mar=c(3, 2, 1, 0.1))

plot(x, y, axes = FALSE, xlab = NA, ylab = NA, pch=19, col=2)

box(col=4)

axis(side = 1, tck = .01, labels = NA, col=4)

axis(side = 1, lwd = 0, line = -0.9, col=4)

axis(side = 2, tck = .01, labels = NA, col=4)

axis(side = 2, lwd = 0, line = -0.9, las = 1, col=4)

mtext(side = 1, "x", line = 1)

mtext(side = 2, "y", line = 1.2)

mtext(side = 1, "Ajuste de datos", line = 2)

mtext(side = 3, "Parabola", line = 0)

Como puede verse en la figura 51, solo se han trazado los puntos experi-

M. Lugo 104 Curso basico de R

R fq-unam

Fig. 38. El trazo de los puntos experimentales.

mentales con un sımbolo, a saber, un cırculo en color rojo. A continuacion seconstruira una funcion que se ajuste a los valores expereimentales.

M. Lugo 105 Curso basico de R

R fq-unam

Ahora haremos un ajuste semejante al de los cuadrados mınimos mediantela funcion lm que ya se encuentra en el programa desde que inicio la sesion.Los resultados del calculo se almacenaran en la variable ajuste.

> ajuste <- lm(y~I(x^2))

> ajuste

Call:

lm(formula = y ~ I(x^2))

Coefficients:

(Intercept) I(x^2)

-0.3983 1.0203

Como puede verse, es necesario conocer el contenido de la variable ajuste,para extraer la informacion necesaria en la construccion de la curva ajustada.La formula tiene la forma de una parabola mas que de un arecta, por esarazon, el ajuste se hace usando lm(formula = y ~ I(x^2)). La extraccion delos coeficientes del polinomio ajustado se extraen como sigue:

M. Lugo 106 Curso basico de R

R fq-unam

> a <- ajuste$coefficients[[1]]

> b <- ajuste$coefficients[[2]]

> a; b

[1] -0.3982932

[1] 1.020297

Con los coeficientes asignados a una variable, es posible construir la funcionajustada:

> Y <- function(z) a + b*z^2

que ya se puede usar para hacer evaluaciones, por ejemplo

> tabla <- data.frame(x, Y=Y(x))

> tabla[1:3,]

x Y

1 1 0.6220038

2 2 3.6828947

3 3 8.7843796

donde solo se muestran algunos valores de la tabla.

M. Lugo 107 Curso basico de R

R fq-unam

Ası, ya se puede usar la funcion lines , como sigue:

> lines(x, Y(x), lty=6, col=4, lwd=2)

Fig. 39. El trazo de los puntos experimentales y la curva ajustada.

M. Lugo 108 Curso basico de R

R fq-unam

A continuacion se trazara una funcion y se utilizara la funcion arrows Parahacer algunos senalamientos.

La funcion es

g(x;µ, σ) =A

σ√

2πe−1

2

(x− µσ

)2

donde se usaran A = 90, µ =12.5 y σ =3.8.

> g <- function(x) 90*exp(-0.5*((x-12.5)/3.8)^2)/(3.8*sqrt(2*pi))

> x <- seq(0, 25, length.out=100)

y a continuacion el grafico de los cian valores.

> par(mar=c(3, 2, 1, 0.1))

> plot(x, g(x), axes = FALSE, xlab = NA, ylab = NA, type="l")

> box(col=4)

> axis(side = 1, tck = .01, labels = NA, col=4)

> axis(side = 1, lwd = 0, line = -0.9, col=4)

M. Lugo 109 Curso basico de R

R fq-unam

> axis(side = 2, tck = .01, labels = NA, col=4)

> axis(side = 2, lwd = 0, line = -0.9, las = 1, col=4)

> mtext(side = 1, "x", line = 1)

> mtext(side = 2, "y", line = 1.2)

> mtext(side = 1, "Puntos crıticos", line = 2)

> mtext(side = 3, "Gaussiana", line = 0)

Fig. 40. El trazo de la funcion gaussiana.

M. Lugo 110 Curso basico de R

R fq-unam

Ahora se anadiran algunos elementos usando la funcion arrows .

> text(5, 8, "maximo", pos=2)

> arrows(5, 8, 12.5, g(12.5), col=2, length=0.1)

Fig. 41. Se identifica al maximo de la funcion.

y luego

M. Lugo 111 Curso basico de R

R fq-unam

> text(12.5, 2, "puntos de inflexion", pos=1)

> arrows(12.5, 2, (12.5-3.8), g(12.5-3.8), col=2, length=0.1)

> arrows(12.5, 2, (12.5+3.8), g(12.5+3.8), col=4, length=0.1)

Fig. 42. Se identifica tambien a los puntos de inflexion.

M. Lugo 112 Curso basico de R

R fq-unam

La construccion y trazo de vectores

Con las herramientas que ya conocemos, estamos en condiciones de abordarel estudio de los vectores, tanto numerica com graficamente.

Simbolicamente, los vectores en el plano se representan como

v = vxi + vy j,

ası que adoptaremos esta notacion

Primero abordaremos los vectores numericamente, considerando los vectoresde posicion (auqellos cuyo extremo inicial es el origen del sistema de coordena-das.)

> v <- c(2, 3)

> w <- c(1, 4)

Para v se tiene vx = 2 y vy = 3, o bien

M. Lugo 113 Curso basico de R

R fq-unam

> v[1]

[1] 2

> v[2]

[1] 3

y para w se tiene

> w[1]

[1] 1

> w[2]

[1] 4

La suma se obtiene simplemente sumando como en el caso de los reales

> suma <- v+w

> suma

[1] 3 7

Es decir

suma = 3i + 7j.

M. Lugo 114 Curso basico de R

R fq-unam

o bien

> suma[1]

[1] 3

> suma[2]

[1] 7

que bien puede entenderse como sumax = 3 y sumay = 7, es decir, las compo-nentes del vector suma, o bien sumax = vx + wx y sumay = vy + wy, como sesabe del curso de algebra.

Practicamente todas la operaciones algebraicas entre vectores en R se ha-cen componente a componente, como acaba de verse; esto facilita mucho lasoperaciones y calculos entre vectores.

A continuacion se hara la representacion grafica de los tres vectores, v, wy suma. Recuerde que se dijo que se tratarıa de vectores de posicion (todostienen su extremo inicial en el origen del sistema de coordenadas), pues todoslos vectores en el plano estan definidos mediante dos puntos: inicio y fin.

M. Lugo 115 Curso basico de R

R fq-unam

> plot(c(0,10), c(0,10), type ="n", panel.first=grid(col="orange"))

> abline(h=0, v=0, lty=2)

> arrows(0, 0, v[1], v[2], length=0.2, col=2)

> arrows(0, 0, w[1], w[2], length=0.2, col=2)

> arrows(0, 0, suma[1], suma[2], length=0.2, col=4)

> text(v[1], v[2], "v", pos=3)

> text(w[1], w[2], "w", pos=3)

> text(suma[1], suma[2], "suma", pos=3)

Fig. 43. Representacion grafica de dos vectores y su suma.

M. Lugo 116 Curso basico de R

R fq-unam

Ahora algunos detalles.

La magnitud de cada uno de los vectores anteriores se obtiene como sigue.

> sqrt(sum(v^2))

[1] 3.605551

> sqrt(sum(w^2))

[1] 4.123106

> sqrt(sum(suma^2))

[1] 7.615773

Una forma alternativa y util para representar los vectores

Otro modo para escribir los vectores en R, consiste en escribir todas lasabscisas en una variable y todas las ordenadas en otra variable, por ejemplo, sise tienen tres vectores de posicion cuyos extremos finales son (2, 3), (1, 4) y (5,1) conviene escribirlos como sigue:

> x <- c(2, 1, 5)

M. Lugo 117 Curso basico de R

R fq-unam

> y <- c(3, 4, 1)

De modo que al trazarlos en un grafico

> par(mar=c(3, 2, 1, 0.1))

> plot(c(0,10), c(0,10), type ="n", xlab="", ylab="", axes=FALSE,

+ panel.first=grid(col="orange"))

> box(col=4)

> axis(side = 1, tck = .01, labels = NA, col=4)

> axis(side = 1, lwd = 0, line = -0.9, col=4)

> axis(side = 2, tck = .01, labels = NA, col=4)

> axis(side = 2, lwd = 0, line = -0.9, las = 1, col=4)

> mtext(side = 1, "x", line = 1)

> mtext(side = 2, "y", line = 1.2)

> mtext(side = 3, "Vectores", line = 0)

> arrows(0, 0, x, y, length=0.2, col=2)

no es necesario trazarlos uno a uno, la funcion arrow traza a los tres vectorescon los mismos atributos, excepto por las cooredenadas de sus extremos finales,considerandolos como vectores de posicion, ver la figura 44.

M. Lugo 118 Curso basico de R

R fq-unam

Fig. 44. Representacion grafica de tres vectores de posicion.

M. Lugo 119 Curso basico de R

R fq-unam

Y la suma tambien es sencilla

> s <- c(sum(x), sum(y))

> arrows(0, 0, s[1], s[2], length=0.2, col=4)

Fig. 45. Representacion grafica de tres vectores de posicion.

M. Lugo 120 Curso basico de R

R fq-unam

La traslacion de los vectores

La definicion de “vector” incluye la indicacion de cual es la localizacion delextremo inicial y la del final, es decir un vector queda completamente definidograficamente como sigue:

v = (x1 − x0)i + (y1 − y0)j

donde (x0, y0) son las coordenadas del extremo inicial y (x1, y1) (donde se trazala punta de flecha).

Cuando se trata de un vector de posicio, claramente (x0, y0) = (0, 0) y

v = x1i + y1j.

Ası, es posible distinguir un vector de posicion de uno que no lo es pero,¿por que es difıcil hacer la distincion?, la respuesta es sencilla, porque al escribirexplıcitamente los vectores, la mayorıa de las ocasiones escribirmos el resultadode las resta, mas que los valores de los extremos inicial y final del vector.

M. Lugo 121 Curso basico de R

R fq-unam

Esto da lugar a considerar la traslacion como una operacion que suma nume-ros reales a los extremos de los vectores, para trasladarlos, ası si la traslaciona lo largo del eje horizontal es Tx = 1 y a lo largo del eje vertical es Ty = 2,entonces, la traslacion convertirıa a

v = (x1 − x0)i + (y1 − y0)j

env = ((Tx+ x1)− (Tx+ x0))i + ((Ty + y1)− (Ty + y0))j

v = ((1 + x1)− (1 + x0))i + ((2 + y1)− (2 + y0))j

ov = ((1 + x1)− (1 + 0))i + ((2 + y1)− (2 + 0))j

ov = ((1 + x1)− 1)i + ((2 + y1)− 2)j

y, como es de esperarse, si se desarrollan todas las operaciones

v = x1i + y1j.

M. Lugo 122 Curso basico de R

R fq-unam

¡se trata del mismo vector!... como ya se sabıa, pues una de las propiedadesde los vectores es que se pueden trasladar sin que esto lo afecte en magnitud ydireccion.

Esperando que quede claro el procedimiento para distinguir a un vector deposicion de uno que no lo es, veamos un ejercicio a continuacion. Primero sedefinen y trazan los vectores de posicion y luego indicamos los valores de latraslacion en cada direccion y tres colores diferentes entre sı para asignar uncolor a cada vector (los del ejercicio anterior son tres vectores)

> x <- c(-2, 1, 5)

> y <- c(3, 4, -1)

> par(mar=c(3, 2, 1, 0.1))

> plot(c(-3,10), c(-2,10), type ="n", xlab="", ylab="", axes=FALSE, panel.first=grid

+ (col="orange"))

> box(col=4)

> abline(h=0, v=0)

> text(-0.25, -0.25, "0")

> axis(side = 1, tck = .01, labels = NA, col=4)

M. Lugo 123 Curso basico de R

R fq-unam

> axis(side = 1, lwd = 0, line = -0.9, col=4)

> axis(side = 2, tck = .01, labels = NA, col=4)

> axis(side = 2, lwd = 0, line = -0.9, las = 1, col=4)

> mtext(side = 1, "x", line = 1)

> mtext(side = 2, "y", line = 1.2)

> mtext(side = 3, "Vectores", line = 0)

> arrows(0, 0, x, y, length=0.2, col=2)

> s <- c(sum(x), sum(y))

> arrows(0, 0, s[1], s[2], length=0.2, col=4)

ver la figura 51.

Se han considerado abscisas y ordenadas con signo negativo para ilustrarel hecho de que todos los resultados son coherentes con las operaciones y lanotacion que se usa en R

Com puede notarse, basta una sola instruccion para trazar los tres vectoresque se sumaran y el vector que resulta de la suma se traza por separado, conotro color, con el fin de distinguirlo de los vectores de los que procede.

M. Lugo 124 Curso basico de R

R fq-unam

Fig. 46. Representacion grafica de tres vectores de posicion.

M. Lugo 125 Curso basico de R

R fq-unam

Una vez trazados los vectores de posicion se procede a definir la traslacion ylos colores,

> Tx <- 2

> Ty <- 4

> c1 <- rgb(240, 120, 65, maxColorValue=255)

> c2 <- rgb(221, 30, 180, maxColorValue=255)

> c3 <- rgb(25, 35, 45, maxColorValue=255)

A continuacion se hace las traslacion y se trazan los vectores trasladados,junto con el vector resultante de la suma:

> arrows(Tx, Ty, Tx + x, Ty+y, col=c(c1, c2, c3))

> arrows(Tx, Ty, Tx+s[1], Ty+s[2], length=0.2, col=4)

En la figura 52 se observa el conjunto de vectores trasladados, ademas de losde posicion y, en ambos casos, el vector suma, pues este tambien debe resul-tar trasladado. Ası, cuando se efectuen operaciones numericas con vectores yademas deban trazarse, es indispensable definir ambos extremos de cada vector.

M. Lugo 126 Curso basico de R

R fq-unam

Fig. 47. Representacion grafica de tres vectores de posicion y su traslacion.

M. Lugo 127 Curso basico de R

R fq-unam

Si se hace una nueva traslacion de los vectores originales, con Tx = 4 yTy = 2, se obtiene el grafico de la figura 2:

Fig. 48. Representacion grafica de tres vectores de posicion y su traslacion.

M. Lugo 128 Curso basico de R

R fq-unam

Ajuste de una recta mediante cuadrados mınimos

Con todas las herramientas que ya se estudiaron, ahora es posible estudiaruna aplicacion.

Si bien casi todos los programas actuales permiten efectuar calculos con elmetodo de los cuadrados mınimos, son pocos los que efectuan los calculos consi-derando las incertidumbres en los datos. Todos los programas pueden presentargraficamente las incertidumbres o barras de error, pero pocos las incluyen enlos calculos.

La diferencia que resulta al hacer el ajuste por cuadrados mınimos tomandoen cuenta o no las incertidumbres se puede observar al calcuoar el coeficientede regresion, que siempre es mas cercano a 1 cuando se consideran las incerti-dumbres en los datos que en el caso contrario.

Ası, consideremos el siguiente conjunto de mediciones de dos variables quellamaremos x y y y sus respectivas incertidumbres ux y uy.

M. Lugo 129 Curso basico de R

R fq-unam

Los datos que se usaran son los siguientes:

x <- c(5, 8, 11, 14, 17, 20, 23, 26, 29, 32, 35, 38, 41, 44, 47)

y <- c(88.12, 94.05, 97.45, 100.32, 103.09, 103.15, 109.32, 112.34, 115.32, 118.47,121.24, 124.43, 127.43, 132.00, 133.47)

y sus incertidumbres

ux <- c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)

uy <- c(1, 1.2, 1.8, 0.9, 0.7, 0.6, 1.2, 0.8, 0.6, 1.5, 0.8, 0.9, 1.5, 1.8, 0.9)

Estos datos y sus incertidumbres se almacenaran en una estructura data.framecomo sigue:

> datos <- data.frame(x, y, ux, uy)

Entonces, empezaremos a hacer el ajuste por cuadrados mınimos definiendoalgunas operaciones y almacenandolas en variables.

M. Lugo 130 Curso basico de R

R fq-unam

N <- length(x); alfa <- 0.05

df <- N-2

mx <- mean(x)

my <- mean(y)

Sx <- sum(x/uy^2)

Sy <- sum(y/uy^2)

Sxy <- sum(x*y/uy^2)

Sx2 <- sum(x^2/uy^2)

Su <- sum(1/uy^2)

Como puede verse, lo primero es determinar el numero, N , de parejas de datosde las variables independiente, x, y dependiente y. Com haremos un trabajocompleto, tambien definimos el numero de grados de libertad, df necesario alestablecer la banda de confianza. Luego, pueden verse la sumas (con incerti-dumbres) necesarias en la construccion de la matriz cuyo determinante se usarapara efectuar los calculos por cuadrados mınimos.

Ahora se construyen la matriz de coeficientes del sistema de ecuaciones y la

M. Lugo 131 Curso basico de R

R fq-unam

de terminos independientes y se resuelve el sistema. Notese que el resultado decada calculo siempre se almacena en una variable:

> matriz1 <- matrix(c(Sx2, Sx, Sx, Su), nrow=2, ncol=2)

> matriz2 <- matrix(c(Sxy, Sy), nrow=2, ncol=1)

> solucion <- solve(matriz1, matriz2)

La pendiente y la ordenada al origen se definen como:

> m <- solucion[1]

> b <- solucion[2]

que son elementos de solucion.

Las incertidumbres en los parametros:

> ub<-sqrt(Sx2/abs(det(matriz1)))

> um<-sqrt(Su/abs(det(matriz1)))

Luego la funcion de ajuste:

M. Lugo 132 Curso basico de R

R fq-unam

> fit <- function(z) m*z+b

A continuacion se calcula el coeficiente de regresion, R, el error estandar,std err, el valor de intervalo de confianza, CI, y la funcion para establecer labanda de confianza, confy

> R <-1-sum((y/uy^2-fit(x)/uy^2)^2)/sum((y/uy^2-mean(y/uy^2))^2)

> std_err <- sqrt(sum((y-my)^2)/df)

> CI <- qt(1-alfa, df)

> confy <- function(z) CI*std_err*sqrt(1/N + (z-mx)^2/(sum((x-mx)^2)))

Ahora se construiran las funciones que formaran la frontera de la banda deconfianza:

> y1 <- function(x) m*x+b+confy(x)

> y2 <- function(x) m*x+b-confy(x)

Ya con los resultados numericos listos procederemos a trazar los graficos,primero el marco para los datos experimentales:

M. Lugo 133 Curso basico de R

R fq-unam

> par(mar=c(2,2,1,1))

> plot(x, y, type="n", axes=FALSE, panel.first = grid(lty=4,lwd=1,col="orange"))

> box(col=4)

> axis(side = 1, tck = .01, labels = NA, col=4)

> axis(side = 2, tck = .01, labels = NA, col=4)

> axis(side = 1, lwd = 0, line = -0.9, col=4)

> axis(side = 2, lwd = 0, line = -0.9, las = 1, col=4)

> mtext(side = 1, "x", line = 1)

> mtext(side = 2, "y", line = 1.2)

Ahora los datos experimentales con sus barras de incertidumbre y la rectaajustada:

> points(x,y, pch=19, cex=0.5)

> arrows(x,y,x+ux,y, col=’blue’, length=0.02, angle=90)

> arrows(x,y,x-ux,y, col=’blue’, length=0.02, angle=90)

> arrows(x, y, x, y+uy, col=’blue’, length=0.02, angle=90)

> arrows(x, y, x, y-uy, col=’blue’, length=0.02, angle=90)

> z <- seq(0.9*min(x), 1.1*max(x), length.out=99)

> lines(z, fit(z), col="red", lwd=1)

M. Lugo 134 Curso basico de R

R fq-unam

Ahora se trazara la banda de confianza:

> xpol <- c(z,rev(z))

> ypol <- c(y1(z), rev(y2(z)))

> polygon(xpol, ypol, col="#FFAAff90", border="white")

Notese que se han insertado nuevas funciones que no habıamos considerado hastaahora, a saber rev y polygon . Tambien se ha incluido una forma diferente

para definir un color (el de la banda de confianza). En este caso el color estadefinido por #FFAAff y la transparencia como 90, con el fin de que la manchade color debida a la funcion polygon “deje ver” los graficos que, de otro modo,quedarıan ocultos a la vista.

Ahora se insertaran los textos siguientes:

pp <- paste("y(x)=", format(m, digits=2, nsmall=4), " *x +

(", format(b, digits=2, nsmall=4),")")

pp2 <- paste("Um=", format(um, digits=2, nsmall=4), ", Ub=",

format(ub, digits=2, nsmall=4))

M. Lugo 135 Curso basico de R

R fq-unam

pp3 <- paste("R^2=", format (R,digits=2,nsmall=4))

legend(min(x), max(y), pp, cex=0.8, bty="n")

legend(min(x), max(y)*0.95, pp2, cex=0.8, bty="n")

legend(min(x), max(y)*0.9, pp3, cex=0.8, bty="n")

No se profundizara en describir las nuevas funciones insertadas, bastele allector con conocer su uso, por ahora. Si requiere de mayor informacion solicitela ayuda al programa, usando, por ejemplo, help(legend).

Y para completar el trabajo, debe trazarse el grafico de residuos.

> windows(xpos=10, ypos=10)

> plot(x,fit(x)/y, type="b", main="Residuos", xlab="x", ylab="",

col="blue", panel.first = grid (lty=4,lwd=1,col="orange"))

> segments(0,1,max(x),1, col="black", lwd=2)

Ası, en la figura 51, se muestran ambos graficos:

M. Lugo 136 Curso basico de R

R fq-unam

Fig. 49. Graficos de dispersion: datos y de residuos.

M. Lugo 137 Curso basico de R

R fq-unam

Graficos en 3D

Con ejercicios se observaran graficos 3D de potenciales electrostaticos debidosa la presencia de una o mas partıculas en el espacio.

Antes de trazar un grafico en 3D se requiere de un package, a saber rgl

que se obtiene de internet.

Ası, com oprimer ejercicio se propone:

> library(rgl)

> f <- function(x,y) {2/sqrt((x-1)^2+(y+1)^2)

- 2/sqrt((x+1)^2+(y-1)^2)}

> open3d()

wgl

1

> plot3d(f, col = colorRampPalette(c("blue", "white", "yellow")),

xlab = "X", ylab = "Y", zlab = "Potencial",

xlim = c(-3,3), ylim = c(-3,3), zlim=c(-10,10),

aspect=c(1, 1, 1.5))

M. Lugo 138 Curso basico de R

R fq-unam

En la figura 52 se observa el resultado

Fig. 50. Grafico del potencial electrostatico debido a dos cargas puntuales.

M. Lugo 139 Curso basico de R

R fq-unam

Lo que se observa es nua imagen estatica, sin embargo, usando el raton ypulsando el boton izquierdo del mismo es posible hacer rotaciones de la imagenen diferentes direcciones.

En el caso de usar Windows, la rueda con la que cuenta el raton permite haceracercamientos o alejamientos de las imagenes sin detrimento de su calidad.

El almacenamiento de este tipo de imagenes puede hacerse mediante capturade pantallas o ventanas.

A continuacion se propone otro ejercicio:

> plot3d(f, col = colorRampPalette(c("red", "green", "blue")),

xlab = "", ylab = "", zlab = "",

xlim = c(-3,3), ylim = c(-3,3), zlim=c(-10,10),

aspect=c(1, 1, 1.5), box=FALSE, axes=FALSE)

>

M. Lugo 140 Curso basico de R

R fq-unam

En la figura 51 se observa el resultado despues de rotar la imagen.

Fig. 51. Grafico del potencial electrostatico debido a dos cargas puntuales.

M. Lugo 141 Curso basico de R

R fq-unam

El trazo de superficies aunque muy atractivo visualmente es tan solo uno delos ejemplos del trazo de graficos 3D.

En los experimentos de laboratorio lo que se tiene son datos puntuales. Sibien el programa puede representar “puntos”, la opcion s (s= sphere) permiteusar esferas para representar a los puntos, como se muestra a continuacion.

Recordando que en todo grafico de R es posibleasignar una gran variedad decolores, a continuacion se vera en el ejercicio el resultado de lo anterior.

> library(rgl)

> t<-seq(0,6*pi,0.35)

> x<-cos(t)

> y<-sin(t)

> z<-0.7*t

> plot3d(x,y,z,col=rainbow(10),type="s",radius=0.6)

M. Lugo 142 Curso basico de R

R fq-unam

Fig. 52. Esferas que pueden representar a puntos en el espacio.

M. Lugo 143 Curso basico de R

R fq-unam

Cuando se estudiaron los graficos de dispersion en dos dimensiones, resultointeresante la posibilidad de insertar mas elementos graficos en una misma ven-tana, pues a veces es necesario completar el grafico con informacion adicional ala que permite ya la funcion plot.

Aquı, en el caso de los graficos 3D tambien es posible anadir tambien ele-mentos graficos e incluso resultados de funciones, con la opcion add, dentro dela funcion plot3d, como se muestra en el ejercicio siguiente.

> x1<-rep(0,10)

> y1<-x1

> z1<-seq(-1,15,2)

> plot3d(x1,y1,z1,col=rainbow(10),type="s",radius=0.9,add=TRUE)

donde, despues de hacer una rotacion, el resultado se observa como en la figura53

M. Lugo 144 Curso basico de R

R fq-unam

Fig. 53. Graficos con diferentes parametros y opciones.

M. Lugo 145 Curso basico de R

R fq-unam

Sin menospreciar a los graficos de dispersion en 3D:

> library(rgl)

> attach(mtcars)

> plot3d(wt, disp, mpg, col="red", size=5)

Fig. 54. Graficos de disperson.

M. Lugo 146 Curso basico de R