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)