• No results found

5.3 Usage of Knowledge Management Tools in Alpha and Beta

5.3.1 The Tools in General

Con todas las herramientas que ya se estudiaron, ahora es posible estudiar una aplicaci´on.

Si bien casi todos los programas actuales permiten efectuar c´alculos con el m´etodo de los cuadrados m´ınimos, son pocos los que efect´uan los c´alculos consi- derando las incertidumbres en los datos. Todos los programas pueden presentar gr´aficamente las incertidumbres o barras de error, pero pocos las incluyen en los c´alculos.

La diferencia que resulta al hacer el ajuste por cuadrados m´ınimos tomando en cuenta o no las incertidumbres se puede observar al calcuoar el coeficiente de regresi´on, que siempre es m´as 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 que llamaremos x y y y sus respectivas incertidumbres ux y uy.

Los datos que se usar´an 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 almacenar´an en una estructura data.frame como sigue:

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

Entonces, empezaremos a hacer el ajuste por cuadrados m´ınimos definiendo algunas operaciones y almacen´andolas en variables.

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 n´umero, N , de parejas de datos de las variables independiente, x, y dependiente y. Com haremos un trabajo completo, tambi´en definimos el n´umero de grados de libertad, df necesario al establecer la banda de confianza. Luego, pueden verse la sumas (con incerti- dumbres) necesarias en la construccion de la matriz cuyo determinante se usar´a para efectuar los c´alculos por cuadrados m´ınimos.

de t´erminos independientes y se resuelve el sistema. N´otese que el resultado de c´ada c´alculo 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 par´ametros:

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

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

A continuaci´on se calcula el coeficiente de regresi´on, R, el error est´andar, std err, el valor de intervalo de confianza, CI, y la funci´on para establecer la banda de confianza, conf y

> 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 construir´an las funciones que formar´an la frontera de la banda de confianza:

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

Ya con los resultados num´ericos listos procederemos a trazar los gr´aficos, primero el marco para los datos experimentales:

> 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 recta ajustada:

> 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)

Ahora se trazar´a la banda de confianza:

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

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

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

N´otese que se han insertado nuevas funciones que no hab´ıamos considerado hasta ahora, a saber rev y polygon . Tambi´en se ha incluido una forma diferente para definir un color (el de la banda de confianza). En este caso el color est´a definido por #FFAAff y la transparencia como 90, con el fin de que la mancha de color debida a la funci´on polygon “deje ver” los gr´aficos que, de otro modo, quedar´ıan ocultos a la vista.

Ahora se insertar´an 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))

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 profundizar´a en describir las nuevas funciones insertadas, b´astele al lector con conocer su uso, por ahora. Si requiere de mayor informaci´on solicite la ayuda al programa, usando, por ejemplo, help(legend).

Y para completar el trabajo, debe trazarse el gr´afico 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)

Gr´aficos en 3D

Con ejercicios se observar´an gr´aficos 3D de potenciales electrost´aticos debidos a la presencia de una o m´as part´ıculas en el espacio.

Antes de trazar un gr´afico 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))

En la figura 52 se observa el resultado

Lo que se observa es nua imagen est´atica, sin embargo, usando el rat´on y pulsando el bot´on izquierdo del mismo es posible hacer rotaciones de la imagen en diferentes direcciones.

En el caso de usar Windows, la rueda con la que cuenta el rat´on permite hacer acercamientos o alejamientos de las im´agenes sin detrimento de su calidad.

El almacenamiento de este tipo de im´agenes puede hacerse mediante captura de pantallas o ventanas.

A continuaci´on 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) >

En la figura 51 se observa el resultado despu´es de rotar la imagen.

El trazo de superficies aunque muy atractivo visualmente es tan s´olo uno de los ejemplos del trazo de gr´aficos 3D.

En los experimentos de laboratorio lo que se tiene son datos puntuales. Si bien el programa puede representar “puntos”, la opci´on s (s= sphere) permite usar esferas para representar a los puntos, como se muestra a continuaci´on.

Recordando que en todo gr´afico de R es posibleasignar una gran variedad de colores, a continuaci´on se ver´a 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)

Cuando se estudiaron los gr´aficos de dispersi´on en dos dimensiones, result´o interesante la posibilidad de insertar m´as elementos gr´aficos en una misma ven- tana, pues a veces es necesario completar el gr´afico con informaci´on adicional a la que permite ya la funci´on plot.

Aqu´ı, en el caso de los gr´aficos 3D tambi´en es posible a˜nadir tambi´en ele- mentos gr´aficos e incluso resultados de funciones, con la opci´on add, dentro de la funci´on 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, despu´es de hacer una rotaci´on, el resultado se observa como en la figura 53

Sin menospreciar a los gr´aficos de dispersi´on en 3D:

> library(rgl) > attach(mtcars)

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