6 votos

Agrupamiento de variables: pero ellos son de tipo mixto, algunos son numéricos, algunos son categóricos

Tengo un conjunto de datos con 15 variables. Algunas variables son numéricas, continua. Otras variables son booleanas, dicotómica (verdadero/falso). También hay una variable categórica, nominal.

str(df) 'data.frame': 30 obs. of 15 variables:
    nom : Factor w/ 3 levels "a","b","c": 1 1 1 1 1 1 1 1 1 1 ... 
    X1  : logi  FALSE TRUE FALSE TRUE TRUE FALSE ...
    X3  : logi  TRUE TRUE TRUE TRUE FALSE FALSE ... 
    X3  : logi  TRUE FALSE FALSE FALSE TRUE FALSE ... 
    X4  : logi  FALSE TRUE FALSE TRUE FALSE FALSE ... 
    X5  : logi  TRUE FALSE FALSE FALSE FALSE TRUE ... 
    X1.1: num  1.026 -0.285 -1.221 0.181 -0.139 ... 
    X2.1: num  -0.045 -0.785 -1.668 -0.38 0.919 ... 
    X3.1: num  1.13 -1.46 0.74 1.91 -1.44 ... 
    X4.1: num  0.298 0.637 -0.484 0.517 0.369 ... 
    X5.1: num  1.997 0.601 -1.251 -0.611 -1.185 ... 
    X6  : num  0.0597 -0.7046 -0.7172 0.8847 -1.0156 ... 
    X7  : num  -0.0886 1.0808 0.6308 -0.1136 -1.5329 ...
    X8  : num  0.134 0.221 1.641 -0.219 0.168 ... 
    X9  : num  0.704 -0.106 -1.259 1.684 0.911 ..
    X10 : android android OS windows7 windows8...
    [...]

Me gustaría cluster de las variables (no los datos de los casos) x1, x2, ..., x9 (probablemente la omisión de la nominal X10) en los grupos o subgrupos de correlación de las variables, por ejemplo (x1,x2,x6),(x3,x5), ...

Como la variable de la mezcla de tipos, es imposible usar cor(), creo. También es imposible el uso de coeficiente de similaridad de Gower, porque es una similitud entre los datos de los casos.

Me pueden ayudar a encontrar una idea para este proceso, por favor? Yo preferiría una solución en R.

2voto

DJohnson Puntos 1347

Tradicional de la FA y del clúster de algoritmos fueron diseñados para uso continuo (es decir, de gauss) variables. Mezclas de continuo y las variables cualitativas invariablemente dar resultados erróneos. En particular, y en mi experiencia, la información de categorías que dominan la solución.

Un mejor enfoque sería emplear una variante de finito de modelos de mezcla que son a menudo diseñados para el uso con mezclas de continuos y categóricos de la información. Latente clase de modelos de mezcla (que son FMMs) tienen una enorme literatura construido alrededor de ellos. Gran parte de esta literatura se centra en el campo de la comercialización de la ciencia, donde estos métodos, consulte uso de ancho para, por ejemplo, la segmentación de los consumidores...pero ese no es el único campo en el que se utilizan.

El software que conozco y recomiendo para latente de la clase de modelado no es ni gratis ni R-pero, en términos de software privativo, no es que caro. Se llama Latente de Oro, se vende por Innovaciones Estadísticas y costos de alrededor de $1.000 para una licencia perpetua. Si su proyecto tiene un presupuesto, podría ser fácilmente cargados a gastos. LG ofrece una amplia suite de herramientas, incluyendo FA para las mezclas, la agrupación de mezclas, longitudinal de la cadena de markov basado en la agrupación, y más.

De lo contrario, la única R-basado freeware que me conocen (polCA, https://www.jstatsoft.org/article/view/v042i10) está diseñado para su uso con multi-forma de tablas de contingencia. Yo no soy consciente de que esta herramienta puede aceptar otra cosa que información categórica. Puede haber otros. Si usted empuje alrededor, tal vez usted puede encontrar algunas de las alternativas.

1voto

Uri Puntos 111

Así, usted tiene una mezcla de categórico lógicos y numéricos de las variables continuas. Desea agrupar las variables (no los datos de los casos) con base en su similitud.

Un coeficiente de correlación podría ser asumido la medida de similitud. Podríamos, por ejemplo, calcular Pearson $r$. Dado que booleano true/false es convertible en 1/0 valores binarios, $r$ es computable. $r \text {(numeric,numeric)}$ es un clásico $r$; $r \text {(binary,binary)}$ es el punto-punto de $r$ o Phi coeficiente de; $r \text {(numeric,binary)}$ es el punto-biserial $r$. Todos estos son hypostasized Pearsonian de correlación.

Usted puede ir directo y hacer el análisis de cluster basado en los tres tipos de correlación de los valores recogidos en una matriz. Usted puede hacerlo si usted ve el booleano/datos binarios como profundamente dicotómica, donde no subyacente continua variable es concebible en el fondo.

Pero, a continuación, algunos críticos se pueden tomar una postura a decir que no hay ningún teórico (filosófico) de manera de comparar la similitud entre categórica cuenta con una similitud entre las características de escala. Que ver sugiero que, a continuación, a dividir sus variables continuas - de alguna manera, y se olvidan de que ellos estaban escala antes. Así que todos los datos son binarios y que están bien.

Mientras que si usted decide aceptar la idea subyacente de variable continua, a continuación, utilizando el mencionado inicial de la matriz de correlación directamente en el análisis de stambles en contra de otro problema. El problema es que - debido al hecho de que un manifiesto variable binaria (es decir, dividido en dos subyacente) está a sólo 2 valores, sino un continuo de manifiesto la variable de muchos valores - las magnitudes de los tres coeficientes es arriesgado comparar directamente. Véase, por ejemplo, 2º párrafo aquí. En definitiva, incluyendo los coeficientes de la variable binaria son mayores, sensato el punto de corte adoptado en el hipotético dichotomization de su subyacente precursor de la variable. Una salida sería la de tratar de "restaurar" (inferir) los valores de correlación que "existía" antes de dichotomizations. Esto significa que el cálculo de correlaciones tetracóricas en lugar de punto a punto $r$s y biserial correlaciones en lugar de punto-biserial $r$s. Si es necesario, la totalidad de la matriz podría ser entonces "suavizada" hacia positivo-definitness.

Otro enfoque (no es incuestionable, como cualquier es) podría ser la de cambiar la escala de las correlaciones en sus empíricamente accesible rango en los datos proporcionados. Este truco es, por así decirlo, atheoretical, puede o no puede implicar la existencia de continua subyacente variable dicotómica. La idea es simplemente para quitarle el efecto de cualquier desviación de las variables de' distribuciones marginales en los coeficientes. $r_{rescaled}=r/r_{max}$; por ejemplo, si la observó $r$ $.4$ y el máximo valor posible para estas dos variables es $.95$ (que se obtiene después de la clasificación de sus datos tanto ascendingly), a continuación, el reescalado valor es $.42$. La matriz completa podría ser llamada "suavizada" en p.s.d. en la final.

Una aproximación alternativa a la anterior (quitando el efecto marginal) podría ser para calcular las correlaciones no paramétricas en lugar de $r$ - tales como la clasificación basada en el rho de Spearman o de Kendall tau. También es una opción. Y a partir de este punto comenzamos a la vista, lógicamente, después de haber hecho un círculo, la opción adicional de dichotomizing las variables de escala (en lugar de su clasificación) - a partir de lo que hemos iniciado la discusión.


Después de calcular las correlaciones (o le gustaría que otras medidas de similitud?) usted tendrá que decidir sobre el método de agrupación - por ejemplo uno de los métodos jerárquicos. Pero aquí comienza otra historia. También puede ser que desee utilizar un análisis factorial en lugar de un análisis de Cluster: a pesar de que el análisis factorial no es agrupación, pero en lugar de variables latentes técnica, se da "clusters", en algún sentido.

1voto

Nixit Patel Puntos 34

Grupos de correlaciones son mejores investigado por el análisis factorial. Hay un número de diferentes implementaciones de factor de análisis en R y recomiendo el paquete de 'psych' en CRAN como un punto de partida:

http://www.personality-project.org/r/psych/

http://www.personality-project.org/r/#factoranal

Usted puede engañar a la cor() en la aceptación de logicals, porque cada lógico es 0 o 1 en R:

> TRUE*7
[1] 7
> FALSE*7
[1] 0

Se necesita cambiar el tipo de uso como.numeric() como en

a <- c(TRUE, TRUE, FALSE, FALSE, FALSE)
as.numeric(a)

Espero que ayude!

1voto

Onur Yıldırım Puntos 5566

Podría uno caliente codificar tus rasgos binarios y normalizar los datos para permitir el cálculo de la correlación:

library(caret)
df <- data.frame(scale(data.frame(predict(dummyVars(~., df), df))))
library(corrplot)
corrplot(cor(df))

Basado en esto se podría aplicar cualquier estrategia clustering (ejemplo con K-Means, sino mira en los detalles del análisis factorial como lo sugiere @Bernhard):

km <- kmeans(x = t(df), centers = 3, iter.max = 1000)
print(km)
print(km$cluster)
print(km$centers)

1voto

dmartin Puntos 1030

Debido a que en su mayoría han cualquiera de las variables continuas o variables binarias, la sugerencia hecha por @geekoverdose es sin duda una opción. El principal problema que surge al tomar este enfoque es tratar con las variables nominales con más de dos categorías (o variables binarias con raras clases). En este caso, 1-1 partidos son importantes y 0-0 partidos probablemente no lo son. En otras palabras, la variable es asimétrica binario (véase aquí para una buena explicación).

Sólo mediante la distancia Euclídea con k-means se pasa por alto este. Por otro lado, el uso de su sugerencia de similitud de Gower no. Esto es debido a que las variables nominales son manejados a través de los dados coeficiente, que esencialmente sólo una caliente codifica los datos y hace caso omiso de 0-0 cuando se calcula la similitud. Esto se hace fácilmente mediante la margarita de la función en el clúster de paquete, sólo asegúrese de tener cada conjunto de variables como el tipo correcto en el marco de datos.

Para clúster de esta matriz de distancias, a continuación, sólo tiene que elegir un algoritmo que puede manejar una costumbre matriz de distancias. K-medoids es uno, y tiene una implementación en R usando el pam funció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