2.28. Datos, gráficos, estadística y juegos para aprender: Usando R. Nivel medio
Creando animaciones
Crearemos una animación que desplace un punto por la curva de la función seno entre -pi y pi
for(i in seq(-pi,pi,0.1)){plot(sin,-pi,pi);points(i,sin(i))}
Con un poco de control sobre el tiempo se puede apreciar mejor:
for(i in seq(-pi,pi,0.1)){plot(sin,-pi,pi);abline(h=0,col="grey");points(i,sin(i));Sys.sleep(0.1)}
Cuando las cosas se complican
Vaya lio … es necesario un poco de organización: R + editor = solución: vim, emacs, gvim
xemacs, gedit, kedit, tinn-R, nano, … block de notas. La ayuda se mejora cuando el
editor nos muestra las pareja de los paréntesis, corchetes o llaves.
for (i in seq(-pi, pi, 0.1)){
plot(sin, -pi, pi)
abline(h = 0, col = "grey")
points(i, sin(i))
Sys.sleep(0.1)
}
Otro ejemplo:
for (i in 1:360) {
plot(1, ann = F, type = "n", axes = F)
text(1, 1, "Animation", srt = i, col = rainbow(360)[i], cex = 7 * i/360)
Sys.sleep(0.01)}
Extraido de esta página.
Salidas gráficas
Para obtener la lista de formatos de salida puede utilizarse ?Devices: pdf(), postscript(), png(), …
En ellos puede definirse más de un gráfico por página mediante la función par(), por ejemplo: par(mfrow=c(2,3)),
para una división regular del área gráfica; o mediante layout(), que permite un reparto del área más completo.
Lectura de un fichero de datos
Para leer datos de un fichero, local en red, utilizaremos la función read.table().
read.table("http://www.um.es/docencia/emc/datos/evolpobmun.dat") -> x
Cuando se utiliza fichero de datos datos de otros directorios siempre (winxx, linux, …) se utiliza el caraćter \ para
describir el nombre:
read.table("c:/tesis/experimento/lote1/datos.dat") -> x
Debe cuidarse siempre de que el fichero se lee con las especificaciones adecuadas: separador de campos, caracter para separar los decimales, tipo de codificación de los caracteres, …
read.table("http://www.um.es/docencia/emc/datos/din.pob.dat",sep=",")
Una vez leido el fichero, y para el data.frame obtenido: x, puede comprobarse que se corresponde con lo esperado utilizando las
siguientes funciones:
ncol(x)ynrow(x): proporciona el número de columnas y filas de x.dim(x): vector con el número de columnas y filas de xcolnames(x): nombre de las columnas de x.rownames(x): nombre de las filas de xt(x): traspone la tabla (cuidado con la homogendidad de las variables).
Otros objetos en R: Historia de un histograma
Desribiremos el comportamiento de una variables mediante un histograma y analizaremos que es un objeto de la clase histograma
read.table("http://www.um.es/docencia/emc/datos/iris.dat") -> x
attach(x)
hist(lonsep, 5)
hist(lonsep, 5, freq = F)
hist(lonsep, 5, plot = F)
hist(lonsep, 5, plot = F)->x.hist
Una vez construido el objeto histograma x.hist conoceremos su propiedades mediante:
names(x.hist) str(x.hist)
Podemos acceder a los elemento el objeto escrinbiendo x.hist$ y pulsando el tabulador
lines(x.hist$mids,x.hist$density,lwd=5) lines(x.hist$mids,x.hist$density,lwd=2,col=2)
La función attributes() nos ayuda a identificar rápidamente el tipo de objeto:
attributes(x.hist) attributes(x) attributes(x)$class
Algo de probabilidad
Para cada una de las funciones de R que describen distribuciones de probabilidad hay las cuatro variantes que se identifican por la inicial:
dffff(x) | para el valor la funcion de distribución en x |
pffff(x) | para la probabilidad acumulada hasta el valor x |
qffff(p) | para el percentil que acumula la probabilidad p |
rffff(n) | que genera n valores aleatorios de la distribución |
Siendo ffff:
unif | distribución uniforme |
norm | distribución normal |
pois | distribución de Poisson |
binom | distribución binomial |
gamma | distribución gamma |
| … | apropos (“^r”) para echar un vistazo rápido |
Calculando y representando valores de la normal:
plot(dnorm,-3,3) dnorm(0) pnorm(2) qnorm(0.975) plot(pnorm,-3,3) plot(qnorm,0,1) plot(rnorm,-3,3) plot(rnorm,-3,3,ylim=c(-3,3))
Estadísticos y condiciones
Media de los individuos por grupos:
split(lonsep,especie,mean) lapply(split(lonsep,especie),mean)
as.matrix(lapply(split(lonsep,especie),mean))
Otra opción:
by(lonsep, especie, mean) as.matrix(by(lonsep, especie, mean))
Todas las variables a la vez:
aggregate(x, by=list(especie), FUN = "mean")
Análisis multivariante de una matriz de datos
Utilizaremos el fichero de datos evolpobmun.dat, que ya hemos comprobado antes:
read.table("http://www.um.es/docencia/emc/datos/evolpobmun.dat") -> x
Se puede hacer una selección de filas automáticamente:
apply(x,1,sum) #¿Hay problemas con NA? !is.na(apply(x,1,sum))->seleccion.casos
Una clasificación por k-means
kmeans(x[seleccion.casos, ], 8) kmeans(x[seleccion.casos, ], 8) -> x.km8
Una clasificación jerárquica:
plot(hclust(dist(x[seleccion.casos,]),method="mc"),hang=-1)
Transformado los datos para otro análisis:
tc <- (x[seleccion.casos,1:9] - x[seleccion.casos,2:10]) / x[seleccion.casos,1:9] plot(hclust(dist(tc),method="mc")->tc.hcl,hang=-1)
Comparando las dos clasificaciones:
cutree(tc.hcl,8) ->tc.h8 table(x.km8$cl,tc.h8)
- talleres/rticemedio.txt
- Última modificación: 2008/02/15 14:19
- (editor externo)