6 votos

Cómo probar el efecto de la variable en la distribución espacial de los puntos en R

Estoy tratando de encontrar una prueba estadística (o procedimiento) que sea capaz de descubrir patrones en la distribución espacial de los puntos. Esbozo el problema dando el ejemplo sobre la posición de los territorios de las aves y la personalidad de las mismas.

1. Cargue los datos de este ejemplo ( son completamente fabricados ). Los datos consisten en las coordenadas geográficas de los territorios y el nivel de agresión de cada ave.

Ejemplo de datos:

x_coor<-rep(c(2,2.5,3,3.5,4,17,17.5,18,18.5,19,19.5,20,20.5,21,21.5,22,17.5,
18,18.5,19,31.5,32,32.5,33,33.5,1,1.5,2,3,4,5,16,17,18,19,20,21,22,23,24,25,
26,16,16.5,17,18,19,20,27.5,28.5,29.5,30.5,31,31.5,32,33,34,2,3,4,5,6,7,8,9,
12,13,14,15,16,18,20,21,22,23,24,25,26,28,29,30,31,32,33,34,1,7,8,10,14,22,
26,28,33),c(5,5,5,3,2,1,2,3,3,3,2,3,2,2,1,1,1,4,4,3,2,3,3,8,4,8,1,4,4,4,4,3,
2,2,2,2,2,2,3,3,3,1,1,1,3,5,5,7,1,2,3,3,3,1,5,5,5,4,1,2,2,3,2,2,3,1,2,4,3,3,
2,3,1,5,2,4,1,2,3,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2))
y_coor<-c(15,15.5,16,16.5,17,16,16.5,17,17.5,18,16,17,17.5,18,18.5,17.5,18,
18.5,18,18.5,22,22,22.5,21.5,22,22.5,21.5,22,22.5,21.5,22,22.5,21.5,22,21.5, 
22,22.5,22,22.5,22,22.5,22.5,22.5,7,6,6.5,7,7.5,5.5,6,6.5,7,5,5.5,6,16,16.5,
15,15.5,16,14,14.5,15,11,11.5,12,12.5,13,13.5,14,14.5,11.5,12,12.5,13,10,11,
12,13,14,15,16,17,18,13,14,19,20,14,15,20,21,15.5,16.5,20,21,17,18,19,20,21,
22,23,21,24,20,24,20,23.5,20,23.5,21,23.5,21,23.5,22,23,24,22,23,24,22,23,24,
23,7,6,4,5,8,2,3,4,5,8.5,1,2,3,4,8,1,2,3,4,5,6,7,16,16,17,16,17,18,16,17,18,
10,14,15,17.5,9,10,11,12,13,8,9,10,16,17,8,9,10,14,15,6,8,23,25,11,9,23,13,
25,11,15,22,18,20,14,23,16,18,20,6,3,9,1,6,22,24,4,9,19,2,12,26,11,18,10,18,
26,12,2,4,6,8,26,10,19,2,4,6,8,16,20,26,14,22,25,9,20,12,7,20,6,18,1,2,8,26,
15,15,10,4,1,25)
aggr_low<-1:35
aggr_mid<-25:65
aggr_big<-50:75
aggr_max<-70:100
aggression<-c(sample(aggr_low,75,replace=TRUE),sample(aggr_mid,100,
replace=TRUE),sample(aggr_big,62,replace=TRUE),sample(aggr_max,10,replace=TRUE))
my.data <- data.frame(x_coor, y_coor, aggression)
rbPal <- colorRampPalette(c("blue","red"))
my.data$Col <- rbPal(10)[as.numeric(cut(my.data$aggression,breaks = 10))]
par(mfrow=c(1,2))
plot(x_coor,y_coor,pch = 20,col = my.data$Col)

2. Como se puede ver en el gráfico, los territorios de las aves poco agresivas ( azul ) tienen tendencia a acumularse, mientras que las aves agresivas son solitarias ( rojo ).

Pasé mucho tiempo buscando un método estadístico que pudiera confirmar dicho patrón (en este caso claramente visible).

Mi primer intento fue correlacionar las matrices de distancia de agresión de las aves y la posición espacial de los territorios. Luego, aplicando mantel.test para la similitud de estas dos matrices. Sin embargo, esto no funcionó porque mantel.test es incapaz de absorber la información sobre el aislamiento espacial de las agrupaciones de territorios poco agresivos. Se espera que si los pájaros poco agresivos están juntos, estarán todos juntos en un gran grupo (no en cuatro grupos diferentes como se ve en la parcela). Así que mantel.test no puede confirmar ni refutar la hipótesis sobre la influencia de la agresión en la distribución espacial de los territorios.

3. He notificado que cuatro clústeres no se conocen entre sí, gracias a las largas distancias entre ellos, así que intento un enfoque diferente.

Hice de nuevo la matriz de distancia de todos los territorios...

geo.dist<-dist(cbind(x_coor, y_coor))
geo.dist<-as.matrix(geo.dist)

...pero sigo sólo las distancias de los vecinos más cercanos fijando el umbral de distancia (manualmente para que sean las 3 unidades de distancia)

geo.dist[geo.dist > 3] <- NA

Esto crea la círculos imaginarios alrededor de cada territorio y pude contar el número de vecinos de cada uno de ellos.

no.neighbours<-numeric(ncol(geo.dist))
for (i in 1:ncol(geo.dist))
no.neighbours[i]<-sum(!is.na(geo.dist[ ,i]))-1

Y como puedes ver en esta trama...

plot(aggression,no.neighbours,col = my.data$Col, pch=20)

Hay correlación negativa clara entre el número de vecinos y la agresión.

cor.test(aggression, no.neighbours)

¿Es correcto utilizar estos pasos para confirmar (o falsificar) esta hipótesis? ("La agresión de las aves influye en la posición de los territorios") ¿Alguien conoce alguna solución más adecuada o el nombre de una prueba comúnmente utilizada para este tipo de problemas?

3voto

SiegeX Puntos 355

Moran's I es capaz de comprobar si la correlación espacial está presente en los datos. En otras palabras, puede responder tres tipos de hipótesis :

1: Son puntos con valores similares ( aves con personalidad similar ) cerca uno del otro?

En este caso es Valor p<0,05 y Moran.I$observed será positivo número

2: ¿Los puntos con valores similares están más alejados entre sí? (como el patrón del tablero de ajedrez, donde los vecinos tienen valores opuestos)

En este caso también es Valor p<0,05 pero Moran.I$observed será negativo número

3: Hay un patrón aleatorio en los datos (no hay correlación espacial)

En este caso Valor p>0,05

Cálculo:

library(ape)
# matrix of all distances...
my.dists <- as.matrix(dist(cbind(my.data$x_coor, my.data$y_coor)))
# ...which is inversed...
my.dists.inv <- 1/my.dists
# ...and their diagonals set to "0"
diag(my.dists.inv) <- 0

# than inserted into Moran.I with tested variable
Moran.I(my.data$aggression, my.dists.inv)

Resultado: La I de Moran reveló una correlación espacial positiva entre los puntos

Muchas gracias a Andy W

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X