8 votos

La agrupación de una matriz (medida de homogeneidad)

Tengo un 2 dim matriz, y quiero saber por ejemplo, todos los valores más altos en la esquina superior izquierda. Yo no puedo solo proyecto en R^3 y utilizar un algoritmo de clustering, porque no quiero que considerar el valor como una dimensión por sí mismo.

Hay un algoritmo que puedo utilizar para esto?

EDITAR:

Reformularlo, supongo que era como

| Altos valores ... valores bajos |
| ...
| Valores bajos ... ... |
| ...
| Valores altos .. valores bajos |

Me gustaría saber que hay un "cluster" de valores altos en la parte superior izquierda e inferior izquierda.

EDIT 2:

La matriz representa una imagen. Los valores de cada celda representan la concentración de una sustancia en que coordinar. Quiero saber la homogeneidad de la imagen (es decir, cómo bien "mezclan" la sustancia es). Además, me gustaría saber donde la no-homogeneidad (si los hubiera).

6voto

jldugger Puntos 7490

Esta pregunta es acerca de la correlación espacial. Existen muchos métodos para caracterizar y cuantificar esta. Lo que todos ellos tienen en común es la comparación de los valores en un solo lugar, para aquellos que viven en lugares cercanos. Generalmente, la referencia de distribución es una especie de espacial de los procesos estocásticos en los que los datos se generan de forma independiente de punto a punto ("aleatoriedad espacial completa"). Algunos métodos sólo caracterizan el comportamiento promedio, mientras que otras proporcionan más detallada exploratorio herramientas para identificar grupos de valores extremos.

Para los tres enfoques diferentes, check out (1) la literatura sobre la geoestadística/kriging/variografía; (2) otras medidas de correlación espacial, tales como Ripley's K y L de las funciones o la Getis-Ord $G_i$ estadísticas ; y (3) regresión ponderada geográficamente. Accesible, no técnico, y el tipo de explicaciones correctas de todos estos se pueden encontrar en ESRI.com . Los artículos de Wikipedia son escasos y de calidad variable, por desgracia.

Los dos primeros enfoques son también compatibles con el R paquetes tales como spatstat y geoRglm. También hay software libre para (2), de las cuales algunas de las más conocidas es la Geoda y CrimeStat . No sé de ninguna implementación libre de GWR (#3), pero hay buenos recursos mantenidos por sus inventores.

5voto

Jörg W Mittag Puntos 1171

Usted también podría considerar la posibilidad de Moran I , que está disponible en el paquete de R "ape". Y luego simplemente utilizar una ponderación en función de la distancia:

nRows <- 30;
nCols <- 15;

nPixels <- nRows * nCols;

# Create a Random Image
image = matrix(0, nrow=nRows, ncol=nCols);

for ( I in 1:nRows )
  {
    for ( J in 1:nCols )
      {
        image[I,J] <- sample.int(256,1) - 1;
      } 
  }

# 1D to 2D Index Function
reverseIndex <- function ( vectorIdx, nRows, nCols )
  {
    # If you're using row major for some odd reason, you'll
    # need to flip these.

    J <- floor((vectorIdx-1) / nCols);
    I <- (vectorIdx-1) - nCols*J;

    return (c(I+1,J+1));
  } 

# Distance Function
distFunc <- function(I,J)
  {
    idx1 <- reverseIndex(I, nRows, nCols);
    idx2 <- reverseIndex(J, nRows, nCols);

    return (sqrt((idx1 - idx2) %*% (idx1 - idx2)));
  }

# Create Distance Matrix
dist = matrix(0, nrow=nPixels, ncol=nPixels);

for ( J in 1:nPixels )
  {
    dist[,J] <- sapply(1:nPixels, distFunc, J);
  }

# Invert Distance for Moran's I
invDist = 1.0 / dist;
diag(invDist) = 0.0;

# Load Library
library(ape);

# Compute Moran's I:
Moran.I(as.vector(image), dist);

R gurú del siéntase libre de opinar sobre mi código - estoy seguro de que hay mejores y / o más rápido de las implementaciones. Sé que para los bucles son increíblemente lento en R. tenga en cuenta que esto simplemente proporcionar una medida y de la prueba de asociación, no se identificará dónde que la asociación está en su matriz.

4voto

MattSayar Puntos 723

Buena pregunta. Una forma trivial para encontrar un "cúmulo de valores altos en la parte superior izquierda" (en contraposición a las correlaciones) es dividir la imagen en azulejos y mirar las baldosas de medios. Por ejemplo,

means of 100 x 100 tiles:
[[ 82  78  80  94  99 100]
 [ 80  53  66  62  80 100]
 [ 82  61  65  64  72  98]
 [ 87  83  99  81  80 100]
 [100 100 100 100 100 100]]

means of 50 x 50 tiles:
[[100  85  84 100  70  96 100 100 100 100 100]
 [ 83  59  57  71  67  88  89  86  98 100 100]
 [ 87  58  54  49  71  74  71  61  61 100 100]
 [100  76  58  52  59  61  55  59  65  95 100]
 [100  62  59  60  57  63  60  60  59  97 100]
 [100  68  65  59  59  82  76  61  61  70  95]
 [ 83  64  76  66  96 100  96  61  80  67 100]
 [100 100  97  92 100 100  84  82  83  88 100]
 [100 100 100 100 100 100 100 100 100 100 100]]

(una parcela con un promedio de altura de color en cada baldosa sería 10 veces mejor).

(Si usted está buscando para las características en las imágenes, lo que es una "característica" ? E. g. una señal de stop rojo, como en Histogramas para la función de representación )

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