Hasta ahora, se han trazado gr´aficos 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 par´ametro type que puede tener valores como type="l" (lines), type="n" (ninguno), type="b" (ambos, l´ıneas y s´ımbolos), type="p" (s´ımbolos) entre otros.
La funci´on points se utiliza s´olo para a˜nadir puntos representados por s´ımbo- los en un gr´afico creado previamente con la funci´on plot. Los diferentes s´ımbolos se seleccionan con la funci´on pch, como ya se vi´o anteriormente.
Adem´as existen otras funciones para el trazo de gr´aficos, entre ellas est´an lines , segments y arrows . Con estas funciones se pueden a˜nadir elementos a los gr´aficos creados perviamente con la funci´on plot.
Primero se utilizar´a 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 gr´afico 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, "Par´abola", line = 0)
Fig. 38.El trazo de los puntos experimentales.
mentales con un s´ımbolo, a saber, un c´ırculo en color rojo. A continuaci´on se construir´a una funcion que se ajuste a los valores expereimentales.
Ahora haremos un ajuste semejante al de los cuadrados m´ınimos mediante la funci´on lm que ya se encuentra en el programa desde que inici´o la sesi´on. Los resultados del c´alculo se almacenar´an 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 informaci´on necesaria en la construcci´on de la curva ajustada. La formula tiene la forma de una par´abola m´as que de un arecta, por esa raz´on, el ajuste se hace usando lm(formula = y ~ I(x^2)). La extracci´on de los coeficientes del polinomio ajustado se extraen como sigue:
> 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 funci´on ajustada:
> 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
As´ı, ya se puede usar la funci´on lines , como sigue:
> lines(x, Y(x), lty=6, col=4, lwd=2)
A continuaci´on se trazar´a una funci´on y se utilizar´a la funci´on arrows Para hacer algunos se˜nalamientos.
La funci´on es g(x; µ, σ) = A σ√2πe −1 2 x − µ σ 2 donde se usar´an 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 gr´afico 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)
> 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)
Ahora se a˜nadir´an algunos elementos usando la funci´on arrows .
> text(5, 8, "m´aximo", pos=2)
> arrows(5, 8, 12.5, g(12.5), col=2, length=0.1)
Fig. 41. Se identifica al m´aximo de la funci´on.
> text(12.5, 2, "puntos de inflexi´on", 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)
La construcci´on y trazo de vectores
Con las herramientas que ya conocemos, estamos en condiciones de abordar el estudio de los vectores, tanto num´erica com gr´aficamente.
Simb´olicamente, los vectores en el plano se representan como v = vxˆi + vyˆj,
as´ı que adoptaremos esta notaci´on
Primero abordaremos los vectores num´ericamente, considerando los vectores de posici´on (auqellos cuyo extremo inicial es el origen del sistema de coordena- das.)
> v <- c(2, 3) > w <- c(1, 4)
> 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
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 se
sabe del curso de ´algebra.
Pr´acticamente todas la operaciones algebraicas entre vectores en R se ha- cen componente a componente, como acaba de verse; esto facilita mucho las operaciones y c´alculos entre vectores.
A continuaci´on se har´a la representaci´on gr´afica de los tres vectores, v, w y suma. Recuerde que se dijo que se tratar´ıa de vectores de posici´on (todos tienen su extremo inicial en el origen del sistema de coordenadas), pues todos los vectores en el plano est´an definidos mediante dos puntos: inicio y fin.
> 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)
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 las abscisas en una variable y todas las ordenadas en otra variable, por ejemplo, si se tienen tres vectores de posici´on cuyos extremos finales son (2, 3), (1, 4) y (5, 1) conviene escribirlos como sigue:
> y <- c(3, 4, 1)
De modo que al trazarlos en un gr´afico
> 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 funci´on arrow traza a los tres vectores con los mismos atributos, excepto por las cooredenadas de sus extremos finales, considerandolos como vectores de posici´on, ver la figura 44.
Y la suma tambi´en es sencilla
> s <- c(sum(x), sum(y))
> arrows(0, 0, s[1], s[2], length=0.2, col=4)
La traslaci´on de los vectores
La definici´on de “vector” incluye la indicaci´on de cu´al es la localizaci´on del extremo inicial y la del final, es decir un vector queda completamente definido gr´aficamente como sigue:
v = (x1− x0)ˆi + (y1− y0)ˆj
donde (x0, y0) son las coordenadas del extremo inicial y (x1, y1) (donde se traza
la punta de flecha).
Cuando se trata de un vector de posici´o, claramente (x0, y0) = (0, 0) y
v = x1ˆi + y1ˆj.
As´ı, es posible distinguir un vector de posici´on de uno que no lo es pero, ¿por qu´e es dif´ıcil hacer la distincion?, la respuesta es sencilla, porque al escribir expl´ıcitamente los vectores, la mayor´ıa de las ocasiones escribirmos el resultado de las resta, m´as que los valores de los extremos inicial y final del vector.
Esto da lugar a considerar la traslaci´on como una operaci´on que suma n´ume- ros reales a los extremos de los vectores, para trasladarlos, as´ı si la traslaci´on a lo largo del eje horizontal es T x = 1 y a lo largo del eje vertical es T y = 2, entonces, la traslaci´on convertir´ıa a
v = (x1− x0)ˆi + (y1− y0)ˆj en v = ((T x + x1) − (T x + x0))ˆi + ((T y + y1) − (T y + y0))ˆj v = ((1 + x1) − (1 + x0))ˆi + ((2 + y1) − (2 + y0))ˆj o v = ((1 + x1) − (1 + 0))ˆi + ((2 + y1) − (2 + 0))ˆj o v = ((1 + x1) − 1)ˆi + ((2 + y1) − 2)ˆj
y, como es de esperarse, si se desarrollan todas las operaciones v = x1ˆi + y1ˆj.
¡se trata del mismo vector!... como ya se sab´ıa, pues una de las propiedades de los vectores es que se pueden trasladar sin que esto lo afecte en magnitud y direcci´on.
Esperando que quede claro el procedimiento para distinguir a un vector de posici´on de uno que no lo es, veamos un ejercicio a continuaci´on. Primero se definen y trazan los vectores de posicion y luego indicamos los valores de la traslaci´on en cada direccion y tres colores diferentes entre s´ı para asignar un color 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, 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 ilustrar el hecho de que todos los resultados son coherentes con las operaciones y la notaci´on que se usa en R
Com puede notarse, basta una sola instrucci´on para trazar los tres vectores que se sumar´an y el vector que resulta de la suma se traza por separado, con otro color, con el fin de distinguirlo de los vectores de los que procede.
Una vez trazados los vectores de posici´on se procede a definir la traslaci´on y los 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 traslaci´on 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, adem´as de los de posicion y, en ambos casos, el vector suma, pues ´este tambi´en debe resul- tar trasladado. As´ı, cuando se efect´uen operaciones num´ericas con vectores y adem´as deban trazarse, es indispensable definir ambos extremos de cada vector.
Si se hace una nueva traslaci´on de los vectores originales, con T x = 4 y T y = 2, se obtiene el gr´afico de la figura 2: