Selección de componentes de PCA que separan grupos


13

Frecuentemente solía diagnosticar mis datos multivariados usando PCA (datos ómnicos con cientos de miles de variables y docenas o cientos de muestras). Los datos a menudo provienen de experimentos con varias variables categóricas independientes que definen algunos grupos, y a menudo tengo que pasar por algunos componentes antes de poder encontrar los que muestran una separación entre los grupos de interés. Se me ocurrió una forma bastante primitiva de encontrar componentes tan discriminatorios, y me pregunto

  1. hasta qué punto esto es razonable / justificable, y
  2. si hay mejores formas de lograr lo mismo.

Tenga en cuenta que esto es exploratorio. Antes de convencer a alguien más, quiero convencerme a mí mismo. Si veo que hay componentes que distinguen claramente los grupos de interés (por ejemplo, control versus tratamiento), incluso si son responsables de una porción menor de la variación de las respuestas, confío en ello más que un resultado de, por ejemplo, una máquina supervisada aprendizaje.

Aquí está mi enfoque. Usaré el conjunto de datos de ejemplo "metabo" de pca3d en R.

La idea es evaluar cuánta varianza de cada componente puede explicarse por la variable independiente. Para esto, calculo un modelo simple para cada componente y uso como una métrica para ordenar los componentes de "más interesante" a "menos interesante".R2

require( pca3d )
# data on metabolic profiles of TB patients and controls
data( metabo )
# first column is the independent variable
pca <- prcomp( metabo[,-1], scale.= T ) 

# create a model for each component
lm.m <- lm( pca$x ~ metabo[,1] )
lm.s <- summary( lm.m )
lm.r2 <- sapply( lm.s, function( x ) x$r.squared )
plot( lm.r2, type= "l" )
text( 1:length( lm.r2 ), lm.r2, 1:length( lm.r2 ), pos= 3 )

Aquí está el resultado. El gráfico muestra el porcentaje de varianza de cada componente explicado por la variable independiente en metabo[,1].

ingrese la descripción de la imagen aquí

Podemos ordenar los componentes por para averiguar con cuáles mostrar ; Los primeros tres componentes son 2, 1 y 7.r2order( lm.r2, decreasing= TRUE )

pca3d( pca, components= c( 1, 2, 7 ), group= metabo[,1] )

Aquí está la trama:

ingrese la descripción de la imagen aquí

(Las categorías roja y verde son dos grupos de sujetos que no son pacientes, y es de esperar que no se puedan distinguir).

Para reformular mis preguntas,

  1. ¿Este enfoque tiene sentido para usted? Mi problema es que se parece demasiado al dragado de datos. Además, intuitivamente, creo que tal vez debería cambiar la tabla y preguntar qué parte de la varianza en la variable independiente se explica por cada variable. Finalmente, estoy (casi) seguro de que estoy reinventando mal la rueda, así que mi segunda pregunta es
  2. ¿Hay algo mejor?

Tenga en cuenta que no quiero cambiar a mínimos cuadrados parciales o algo similar en esta etapa; Solo quiero diagnosticar el PCA en el contexto de mi clasificación.


2
Me gustaría hacer solo dos comentarios sobre su interesante pregunta. 1) Describa en palabras su enfoque además de mostrar su código (recuerde que las personas aquí usan varios software, no necesariamente R). 2) El diagrama de dispersión no es muy convincente sin picos en su piso. Además, si tiene dudas específicas sobre su enfoque, por favor hágales saber para que la pregunta esté más enfocada.
ttnphns

1
editado: Para aclarar, ¿primero está llevando a cabo PCA y luego está tratando de aislar los componentes principales que se explican mejor por alguna variable en particular? ¿Estás validando esto con un diagrama de pantalla? Puede darse el caso de que alguna x que elija de su conjunto de datos explique mucha de la varianza en un componente principal, pero no estoy seguro de que eso signifique algo si la varianza es muy baja a lo largo de ese componente principal.
shadowtalker

1
R2

2
to find out what share of the overall variance in the data matrix is explained by a given classificationSi quiere saber esto, no necesita PCA. Simplemente calcule la proporción de la suma de cuadrados entre grupos a la suma total de cuadrados: (SStotal-SSwithin)/SStotaldonde SSwithin es la suma de cuadrados agrupados dentro del grupo.
ttnphns

1
No veo ningún problema con la forma en que explota PCA, pero no entiendo por qué realmente lo necesita. (¿Solo porque te gusta tal vez?) Como no puedo ver tu puntería precisa, no puedo decirte nada por ti Is there anything better?.
ttnphns

Respuestas:


8

La respuesta a su pregunta # 1 es sí, su solución equivale al dragado de datos. La respuesta a su pregunta # 2 es sí, existen métodos superiores en la literatura.

n<<p . Su solución es bastante arbitraria y carece de cualquier tipo de justificación teórica: le señalaré algunos documentos que pueden ayudarlo a encontrar los métodos adecuados a continuación.

Está ejecutando un análisis que se asemeja a la regresión de componentes principales, excepto que ha intercambiado sus variables independientes y dependientes, lo que resulta en un gran multivariado (en lugar de múltiples análisis de regresión ). La regresión multivariada requiere que el tamaño de su muestra sea mayor que el número de variables dependientes, un requisito que está violando en su ejemplo.

Si está realmente comprometido a ejecutar PCA en sus datos y luego usar la regresión multivariada, debe usar un método apropiado. Por ejemplo, busque MRCE y métodos relacionados [1].

Sin embargo, a pesar de algunos comentarios desconcertantes que ha hecho, todo en su análisis tal como se presenta actualmente sugiere que su objetivo final es identificar las relaciones entre un gran conjunto de variables continuas (metabo [, - 1]) y una sola variable categórica (metabo [ , 1]). PCA es una forma pobre de lograr esto. Hay dos clases generales de soluciones a este problema en el caso de alta dimensión: primero, soluciones que suponen escasez y soluciones que suponen una estructura factorial.

Las soluciones basadas en la escasez generalmente suponen que solo una proporción muy pequeña de variables están de hecho relacionadas con la variable categórica de interés, e intentan encontrar este pequeño subconjunto; por ejemplo ver DALASS [2]. Los métodos basados ​​en la estructura factorial suponen que las variables discriminatorias son manifestaciones de variables latentes subyacentes con una relación verdadera con la variable categórica. Un ejemplo de esta clase de métodos es DLDA [3].

Tenga en cuenta que estoy no necesariamente recomendar cualquiera de los métodos que he mencionado para sus datos; debe considerar cuidadosamente sus objetivos y el conocimiento a priori del problema al seleccionar un método apropiado.

[1] Rothman, Levina, Zhu (2010). Escasa regresión multivariante con estimación de covarianza. Journal of Computational and Graphical Statistics, Volumen 19, Número 4, páginas 947–962.

[2] Nickolay T. Trendafilov, Ian T. Jolliffe, DALASS: Selección de variables en análisis discriminante a través de LASSO, Estadísticas computacionales y análisis de datos, Volumen 51, Número 8, 1 de mayo de 2007, páginas 3718-3736.

[3] Yu, Yang (2001). Un algoritmo directo LDA para datos de alta dimensión con aplicación para reconocimiento facial. Reconocimiento de patrones 34, 2067-2070.


2
He comenzado una nueva recompensa para otorgar esta respuesta.
Enero

1
@Enero: Esta es una buena respuesta, pero me gustaría señalar que "LDA directa" es un algoritmo muy extraño en el mejor de los casos , vea Gao y Davis, 2005, Por qué la LDA directa no es equivalente a LDA : "demostramos eso. .. D-LDA puede imponer una limitación de rendimiento significativa en aplicaciones generales ", así que tenga cuidado con eso.
ameba dice Reinstate Monica

@amoeba Gracias por esa cita. He estado preocupado por DLDA por un tiempo, ya que no hay justificación para seleccionar componentes de esa manera en particular. Lo veo como una solución muy específica del problema que no necesariamente generaliza más allá de los problemas de discriminación, aunque puede adaptarse fácilmente a cualquier problema con algún conocimiento de qué componentes son más útiles para la discriminación. Cada solución que implementa una discriminación de alta dimensión con una estructura de factores supuesta adolece de problemas ... ¿ha encontrado mejores enfoques? Estoy interesado en tu opinión aquí.
ahfoss

nk

4

@ahfoss ya te señaló a LDA como el análogo de clasificación para PCA. En realidad, estos dos métodos están relacionados entre sí y también con PLS:

nature of dependent variable (for supervised)     unsupervised    supervised
or structure of data (unsupervised)
continuous                                        PCA             PLS
factor/groups/classes                                             LDA

II

np

PLS puede verse como una regularización como LASSO, y también está disponible PLS escaso (aunque no lo he usado: mis datos son más adecuados para PLS normal, lo que no supone escasez). Para una buena discusión de los diferentes métodos de regularización, vea, por ejemplo, los Elementos del aprendizaje estadístico .

np

T=X×W
L=X×B


L(n×k1)=T(n×m)B(m×k1)
L(n×k1)=X(n×p)W(p×m)B(m×k1)
L(n×k1)=X(n×p)B(p×k1)
LBBB

Nota práctica: en caso de que trabaje en R, tengo un paquete en desarrollo que proporciona modelos PLS-LDA y PCA-LDA. Avísame si quieres probarlo.


Para evitar el dragado de datos, debe validar su modelo final (= medir su rendimiento) con datos independientes.

Independiente aquí significa que este caso (¿paciente?) No contribuyó al ajuste del modelo de ninguna manera. En particular,

  • no ingresó ningún tipo de preprocesamiento que involucre múltiples casos, como el centrado o la estandarización
  • no ingresó el cálculo PCA / PLS / ...
  • no se usó para la estimación de hiperparámetros.

Como solo tiene unos pocos casos, una estrategia de remuestreo sería apropiada. En esta situación, probablemente sea mejor corregir cualquier hiperparámetro (como el número de PC o variables latentes de PLS o el límite de LASSO) por conocimiento externo para evitar una segunda división interna de sus datos de entrenamiento para la optimización del hiperparámetro.


+1 para modelos de validación cruzada. Extremadamente importante. Sin embargo, me gustaría saber de OP @January, quien ha declarado que no está interesado en la discriminación, aunque su problema parece muy adecuado para el análisis de discriminación / clasificación.
ahfoss

No estoy de acuerdo con su afirmación de que k-means / PCA / etc pertenecen a la misma familia. Esto implica que son casos especiales del mismo modelo o algoritmo, lo cual no es cierto. El algoritmo PCA es un cálculo de matriz simple, mientras que k-means es un algoritmo iterativo que se ha comparado con el algoritmo EM (no es técnicamente correcto ya que no existe una función de probabilidad, pero aún es una comparación útil en algunos aspectos, en mi humilde opinión).
ahfoss

1
¿Te refieres a la función plsgenomics :: pls.lda? Si no, ¿cómo es su paquete diferente / mejorado? También señalaré a los lectores interesados ​​que PLS-LDA en general es superior a una técnica de uso común de simplemente ejecutar PLS con una variable de resultado codificada. Si bien este último enfoque no es necesariamente incorrecto, definitivamente es un error, ¡sobre todo porque puede obtener probabilidades pronosticadas menores que cero o mayores que uno!
ahfoss

@ahfoss: no me refería a los algoritmos, ya que el mismo modelo subyacente podría calcularse mediante diferentes algoritmos. Por ejemplo, para PCA puede usar algoritmos iterativos (NIPALS, POWER) o no iterativos (EVD, SVD). Tal vez un mejor término en lugar de k-medias habría sido "análisis de conglomerados que minimiza la suma de cuadrados dentro del conglomerado, para lo cual, por ejemplo, k-means es una aproximación heurística". No tengo tiempo ahora, revisaremos la respuesta más tarde o podríamos encontrarnos en la sala de chat y encontrar una mejor descripción.
cbeleites apoya a Monica el

1
... Una diferencia técnica es que uso pls::plsrpara los pls (que permite elegir entre diferentes algoritmos). Y tengo un montón de funciones de procesamiento posterior, por ejemplo, para voltear y rotar el modelo, que a veces es útil para la interpretación.
cbeleites apoya a Monica el
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.