Processing math: 100%

6 votos

Realización de análisis de clúster en R con conjuntos de datos de puntos

Soy un R-Principiante, pero quiero usarlo para algunos de estadística espacial. Quiero comprobar la relación entre la ocurrencia de las personas enfermas y de la existencia de agua en un área de interés. Para dar una idea más específica de casos de uso, he creado algunos datos de ejemplo:

En primer lugar, quiero trazar en un mapa, incluyendo un mapa base. Esto ya funciona!

persons_dataframe = read.csv("persons.csv", header = TRUE)
city_dataframe = read.csv("city.csv", header = TRUE)
water_dataframe = read.csv("water.csv", header = TRUE)
# plot them on a map
# load used packages
library(RgoogleMaps)
library(ggplot2)
library(ggmap)
library(sp)

persons_ggplot2 <- persons_dataframe
city_ggplot2 <- city_dataframe
water_ggplot2 <- water_dataframe
gc <- geocode('new york, usa')
center <- as.numeric(gc)  
G <- ggmap(get_googlemap(center = center, color = 'bw', scale = 1, zoom = 10, maptype = "terrain", frame=T), extent="device")
G1 <- G + geom_point(aes(x=POINT_X, y=POINT_Y ),data=city_dataframe, shape = 22, color="black", fill = "yellow", size = 4) + geom_point(aes(x=POINT_X, y=POINT_Y ),data=persons_dataframe, shape = 8, color="red", size=2.5) + geom_point(aes(x=POINT_X, y=POINT_Y ),data=water_ggplot2, color="blue", size=1)
plot(G1)

Esto tiene el siguiente resultado: R Plot

No quiero crear algo así como un clúster de mapa. Ya he buscado algunos paquetes útiles y he terminado con los paquetes SpatialEpi y DCluser. Ambos proporcionan algunas funciones, que pueden ser útiles.

Pero en este punto no sé, cómo proceder. Algunas preguntas abiertas:

  1. Es lo justo que necesito polígonos para agrupar el conjunto de datos? Me lo he leído en el SpatialEpi pdf pero solo tengo estos de punto conjuntos de datos.
  2. Además no sé si el hecho de que todos los puntos se encuentran en sólo tres lugares podrían ser un problema?!

¿Tiene sugerencias de cómo continuar con mi trabajo?

1voto

Farid Cher Puntos 5306

Aquí hay una solución con mclust (clustering basado en modelos). Para agrupar la tabla Personas en dos grupos separados.

R Script

 require(mclust)
require(sp)

data =read.csv(file = "person.txt")

data.xy <- cbind(data$POINT_X, data$POINT_Y) 

patternBIC <- mclustBIC(data.xy) 

patternModel <- summary(patternBIC, data.xy)
print(patternModel)

n <- patternModel$G
cond_probs <- lapply(1:n, function(i) patternModel$z[,i])
names(cond_probs) <- paste0("cond_prob", 1:n)

q <- quantile(patternModel$uncertainty, probs = c(0.75, 0.95))
q7595 <- sapply(patternModel$uncertainty, function(u){
  r <- if (u <= q[1]) 1 else 0
  if(u <= q[2] && r == 0) r <- 2
  if(u > q[2] && r == 0) r <- 3
  stopifnot(r != 0)
  r - 1
})

result <- data.frame(data,
          cluster = patternModel$classification,
          class_uncert = patternModel$uncertainty,
          sym_ucert=q7595,
          cond_probs)

par("mfrow"=c(1,1))
plot(result$POINT_X,result$POINT_Y,col=result$cluster)
 

Persons.txt se parece a:

 city,ill,computer,POINT_X,POINT_Y
City A,yes,0,-73.996786,40.720813
City A,yes,0,-73.996786,40.720813
City A,yes,0,-73.996786,40.720813
City A,yes,0,-73.996786,40.720813
City A,yes,0,-73.996786,40.720813
City A,yes,0,-73.996786,40.720813
City A,yes,1,-73.996786,40.720813
City A,yes,0,-73.996786,40.720813
City A,yes,0,-73.996786,40.720813
City A,yes,0,-73.996786,40.720813
City A,yes,0,-73.996786,40.720813
City A,yes,0,-73.996786,40.720813
City A,yes,1,-73.996786,40.720813
City A,yes,0,-73.996786,40.720813
City A,yes,0,-73.996786,40.720813
City A,yes,0,-73.996786,40.720813
City A,yes,0,-73.996786,40.720813
City B,yes,0,-74.172237,40.732196
City B,yes,0,-74.172237,40.732196
City B,yes,0,-74.172237,40.732196
City B,yes,0,-74.172237,40.732196
City B,yes,0,-74.172237,40.732196
City B,yes,1,-74.172237,40.732196
City B,yes,0,-74.172237,40.732196
City B,yes,0,-74.172237,40.732196
City B,yes,0,-74.172237,40.732196
City C,yes,0,-74.197274,40.625130
City C,yes,0,-74.197274,40.625130
City C,yes,0,-74.197274,40.625130
City C,yes,0,-74.197274,40.625130
City C,yes,0,-74.197274,40.625130
City C,yes,0,-74.197274,40.625130
City C,yes,0,-74.197274,40.625130
City C,yes,0,-74.197274,40.625130
City C,yes,0,-74.197274,40.625130
City C,yes,0,-74.197274,40.625130
City C,yes,0,-74.197274,40.625130
City C,yes,0,-74.197274,40.625130
City C,yes,0,-74.197274,40.625130
City C,yes,0,-74.197274,40.625130
City C,yes,0,-74.197274,40.625130
City C,yes,0,-74.197274,40.625130
City C,yes,0,-74.197274,40.625130
 

Asegúrese de que ambos archivos están en el mismo directorio y establezca el directorio de trabajo en el de su script R

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