Análisis descriptivo y exploratorio de datos geoestad

Anuncio
Análisis descriptivo y exploratorio de datos geoestadı́sticos en R
Estadı́stica espacial
2009 – I
En cualquier análisis estadı́stico las primeras herramientas y quizá una de las más útiles son las
técnicas descriptivas y exploratorias, ya que ellas permiten formarse una idea del comportamiento del
fenómeno estudio y en algunos casos evaluar el cumplimiento de una serie de supuestos sobre los cuales
están construidas las técnicas inferenciales. En este sentido, las técnicas exploratorias son múltiples y
dependiendo el área de estudio en algunos casos son propias.
La siguiente es una guı́a con las funciones disponibles en R para implementar algunas de las herramientas
propias del análisis de datos exploratorio espacial que son base para la formulación de modelos de
predicción vı́a geoestadı́stica. Para el desarrollo de la actividad es necesario la instalación y el cargué de
los siguientes paquetes:
require(akima)
require(gstat)
require(geoR)
require(sgeostat)
require(lattice)
Los datos empleados para el desarrollo de la guı́a se llaman coal ash y se encuentran adjuntos en formato
de archivo plano.
El análisis se dividirá en dos partes, la primera permite identicar el comportamiento general de la variable
en el espacio a través de diagramas de datos situados, gráficos de contornos, mapas de sı́mbolos entre
otros. La segunda parte consiste en identificar problemas en los datos observados que puedan afectar el
modelamiento de la estructura de dependencia espacial, en particular, problemas en la estimación del
variograma experimental y en la hipótesis de estacionariedad del proceso.
Actividad inicial
1. Realice la lectura del conjunto de datos por medio de la función recuerde que puede usar la función
read.table o en el menu Datos de la interface del paquete Rcmdr .
2. Realice una exploración de la variable coal (ceniza de carbón), es decir, genere informes con medidas
resumen, histogramas, diagramas de caja y gráficos de probabilidad normal. Para ello se encuentran
en R las funciones
summary(coal.ash$coal)
hist(coal.ash$coal)
boxplot(coal.ash$coal)
qqnorm(coal.ash$coal)
qqline(coal.ash$coal)
#Tambien puede usar la función qq.plot si se tiene
#cargado el paquete Rcmdr
qq.plot(coal.ash$coal)
3. Concluya respecto del comportamiento univariado de variable. El promedio es un buen indicador
resumen de la ceniza de carbón? Hay datos atı́picos? La variable es asimétrica? Qué puede decir del
supuesto de normalidad?
Como se puede observar el análisis realizado hasta el momento no tiene en cuenta la naturaleza espacial
del fenómeno, es decir, si el promedio es igual para toda el área de estudio o si por el contrario cambia
en algunas zonas o sitios particulares, lo cual puede explicar posibles comportamientos asimétricos, de
otra parte, si hay datos atı́picos estos se pueden encontrar distribuidos en toda la zona o por el contrario
focalizados en algunas regiones. Es por esto, que dentro del análisis descriptivo es necesario construir
gráficos resumen que nos muestren como se comporta la variable en la zona.
Segunda Actividad
Los primeros gráficos en ser construidos permiten conocer como fueron tomadas las mediciones en el
espacio y que valores asumen, entre estas herramientas se cuentan con gráficos de datos situados (data
posting), mapas de sı́mbolos, mapas indicadores, etc. Las instrucciones necesarias para generar este tipo
de gráficos se muestran acontinuación
1. Data posting.
par(mfrow=c(2,2))
plot(coal.ash$x,coal.ash$y)
plot(coal.ash$x,coal.ash$y,type="n")
text(coal.ash$x,coal.ash$y,labels=coal.ash$coal,cex=.4)
Según los resultados obtenidos, hay alguna lozalización extraña? los datos parecen tener alguna
tendencia? hay zonas que presenten poco muestreo?
2. Mapas de sı́mbolos.
grupos=cut(coal.ash$coal,breaks=c(min(coal.ash$coal),8.3,9.2,9.8,10.7,max(coal.ash$coal)),
plot(coal.ash$x,coal.ash$y,type="n")
text(coal.ash$x,coal.ash$y,labels=grupos,cex=.5)
grupos1=ifelse(coal.ash$coal>=min(coal.ash$coal)&coal.ash$coal<=8.3,1,
ifelse(coal.ash$coal>
8.3
&coal.ash$coal<=9.2,2,
ifelse(coal.ash$coal>
9.2
&coal.ash$coal<=9.8,3,
ifelse(coal.ash$coal>
9.8
&coal.ash$coal<=10.7,4,
ifelse(coal.ash$coal>
10.7
&coal.ash$coal<=max(coal.ash$coal)
,5,coal.ash$coal)))))
coal.mat=tapply(grupos1,list(factor(coal.ash$x),factor(coal.ash$y)),function(x)x)
for(i in 1:dim(coal.mat)[1]){
fil=coal.mat[i,]
fil=fil[!is.na(fil)]
for(j in 1:dim(coal.mat)[2]){
col=coal.mat[,j]
col=col[!is.na(col)]
if(is.na(coal.mat[i,j])) coal.mat[i,j]=median(c(col,fil))
}
}
zmin=min(coal.mat)
zmax=max(coal.mat)
image(coal.mat,zlim=c(zmin,zmax))
Cúál de los gráficos considera usted presenta mejor los datos?, Qué puede decir del comportamiento
de la variable al repecto de posibles tendencias en alguna dirección particular?
Pruebe generando ahora 4 clases en la cual hayan el 25 % de los datos en cada una de ellas.
3. Mapas de indicadores. Al ser una sucesión de mapas de sı́mbolos, la generación de ellos se realiza
modificando las instrucciones anteriores.
z1=ifelse(coal.ash$coal<=8.3,1,0)
z2=ifelse(coal.ash$coal<=9.2,1,0)
z3=ifelse(coal.ash$coal<=9.8,1,0)
z4=ifelse(coal.ash$coal<=10.7,1,0)
#Vistos en numeros
par(mfrow=c(2,2))
plot(coal.ash$x,coal.ash$y,type="n",main="coal<=8.3")
text(coal.ash$x,coal.ash$y,labels=z1,cex=.5)
plot(coal.ash$x,coal.ash$y,type="n",main="coal<=9.2")
text(coal.ash$x,coal.ash$y,labels=z2,cex=.5)
plot(coal.ash$x,coal.ash$y,type="n",main="coal<=9.8")
text(coal.ash$x,coal.ash$y,labels=z3,cex=.5)
plot(coal.ash$x,coal.ash$y,type="n",main="coal<=10.7")
text(coal.ash$x,coal.ash$y,labels=z4,cex=.5)
#Vistos en colores
x11()
par(mfrow=c(2,2))
coal.mat=tapply(z1,list(factor(coal.ash$x),factor(coal.ash$y)),function(x)x)
for(i in 1:dim(coal.mat)[1]){
fil=coal.mat[i,]
fil=fil[!is.na(fil)]
for(j in 1:dim(coal.mat)[2]){
col=coal.mat[,j]
col=col[!is.na(col)]
if(is.na(coal.mat[i,j])) coal.mat[i,j]=median(c(col,fil))
}
}
zmin=min(coal.mat)
zmax=max(coal.mat)
image(coal.mat,zlim=c(zmin,zmax),main="coal<=8.3",col=gray(0:1))
coal.mat=tapply(z2,list(factor(coal.ash$x),factor(coal.ash$y)),function(x)x)
for(i in 1:dim(coal.mat)[1]){
fil=coal.mat[i,]
fil=fil[!is.na(fil)]
for(j in 1:dim(coal.mat)[2]){
col=coal.mat[,j]
col=col[!is.na(col)]
if(is.na(coal.mat[i,j])) coal.mat[i,j]=median(c(col,fil))
}
}
zmin=min(coal.mat)
zmax=max(coal.mat)
image(coal.mat,zlim=c(zmin,zmax),main="coal<=9.2",col=gray(0:1))
coal.mat=tapply(z3,list(factor(coal.ash$x),factor(coal.ash$y)),function(x)x)
for(i in 1:dim(coal.mat)[1]){
fil=coal.mat[i,]
fil=fil[!is.na(fil)]
for(j in 1:dim(coal.mat)[2]){
col=coal.mat[,j]
col=col[!is.na(col)]
if(is.na(coal.mat[i,j])) coal.mat[i,j]=median(c(col,fil))
}
}
zmin=min(coal.mat)
zmax=max(coal.mat)
image(coal.mat,zlim=c(zmin,zmax),main="coal<=9.8",col=gray(0:1))
coal.mat=tapply(z4,list(factor(coal.ash$x),factor(coal.ash$y)),function(x)x)
for(i in 1:dim(coal.mat)[1]){
fil=coal.mat[i,]
fil=fil[!is.na(fil)]
for(j in 1:dim(coal.mat)[2]){
col=coal.mat[,j]
col=col[!is.na(col)]
if(is.na(coal.mat[i,j])) coal.mat[i,j]=median(c(col,fil))
}
}
zmin=min(coal.mat)
zmax=max(coal.mat)
image(coal.mat,zlim=c(zmin,zmax),main="coal<=10.7",col=gray(0:1))
Cuál de las presentaciones considera es más ilustrativa? hay alguna dirección de variación de los
datos de ceniza de carbón?
Genere los mapas indicadores, dejando en cada mapa el 25 % de la información.
4. Mapas de contornos. La idea de esta parte más que generar una interpolación bastante exacta, es
conocer el comportamiento de forma global del fenómeno. Para ello se usará el paquete akima.
int.coal=interp(x=coal.ash$x,y=coal.ash$y,z=coal.ash$coal)
contour(int.coal)
points(coal.ash$x,coal.ash$y)
Cómo puede calificar el comportamiento de la variable?
Explore las ayudas de la función interp del paquete akima y utilice otro tipo de interpolación.
5. Resúmenes por filas o columnas. Cuando el conjunto de datos es grillado, es posible graficar el
comportamiento de las medidas de tendencia central por filas y/o columnas de tal manera que se
pueda identificar si hay cambios en la tendencia.
par(mfrow=c(2,2))
plot(coal.ash$x,coal.ash$y,axes=F,xlab="",ylab="")
plot(tapply(coal.ash$coal,coal.ash$y,median),1:23,xlab="% coal ash",ylab="Rows",xlim=c(8,1
points(tapply(coal.ash$coal,coal.ash$y,mean),1:23,pch="x")
plot(1:16,tapply(coal.ash$coal,coal.ash$x,median),xlab="% coal ash",ylab="Columns",ylim=c(
points(1:16,tapply(coal.ash$coal,coal.ash$x,mean),pch="x")
plot(coal.ash$x,coal.ash$y,axes=F,type="n",xlab="",ylab="")
text(1,22,"◦ = Median %coal ash", adj=0)
text(1,19,"x = Mean %coal ash", adj=0)
Se puede afirmar que la media del proceso es la misma en toda el área de estudio?
Costruya los estadı́sticos de la prueba de hipótesis de la media y la mediana por filas y concluya.
6. Dispersogramas rezagados. La primera forma de explorar la autocorrelación y los datos atı́picos
espaciales es generando los dispersogramas rezagados. En el caso de datos grillados algunos de ellos
se pueden obtener ası́:
x11()
par(mfrow=c(1,2))
grid.mat=tapply(coal.ash$coal,list(factor(coal.ash$x),factor(coal.ash$y)),function(x)x)
plot(grid.mat[,-1],grid.mat[,-23],xlab="coal ash% in column Z",ylab="coal ash% in column Z
identify(grid.mat[,-1],grid.mat[,-23],label=grid.mat[,-1])
plot(grid.mat[-1,],grid.mat[-16,],xlab="coal ash% in row Z",ylab="coal ash% in row Z+1")
identify(grid.mat[-1,],grid.mat[-16,],label=grid.mat[-1,])
Existen observaciones atı́picas? Parece haber autocorrelación espacial en las direcciones y rezagos
analizados? Por qué?
7. Suavizamiento de medianas. En el caso de existir un comportamiento no estacionario de forma
global se puede considerar trabajar con los residuales del ajuste. La visualización de los resultados
se pueden obtener ası́:
coal.mat=tapply(coal.ash$coal,list(factor(coal.ash$x),factor(coal.ash$y)),function(x)x)
for(i in 1:dim(coal.mat)[1]){
fil=coal.mat[i,]
fil=fil[!is.na(fil)]
for(j in 1:dim(coal.mat)[2]){
col=coal.mat[,j]
col=col[!is.na(col)]
if(is.na(coal.mat[i,j])) coal.mat[i,j]=median(c(col,fil))
}
}
coal.mp=medpolish(coal.mat)
coalsig.mat=coal.mat-coal.mp$residuals
x11()
par(mfrow=c(1,2))
par(pty="s")
zmin=min(coal.mat,coalsig.mat)
zmax=max(coal.mat,coalsig.mat)
image(coal.mat,zlim=c(zmin,zmax),main="Coal ASH")
image(coalsig.mat,zlim=c(zmin,zmax),main="Ajustados por suavizamiento de medianas")
Estudie los resultados del ajuste, cuál (es) de las filas y columnas tienen efectos mayores? Hay
evidencia de tados atı́picos espaciales? Cuáles? Sugiere usted modelar los residuales del ajuste de
medianas o los datos originales de ceniza de carbón?
Descargar