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
- hasta qué punto esto es razonable / justificable, y
- 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".
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]
.
Podemos ordenar los componentes por para averiguar con cuáles mostrar ; Los primeros tres componentes son 2, 1 y 7.order( lm.r2, decreasing= TRUE )
pca3d( pca, components= c( 1, 2, 7 ), group= metabo[,1] )
Aquí está la trama:
(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,
- ¿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
- ¿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.
to find out what share of the overall variance in the data matrix is explained by a given classification
Si 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)/SStotal
donde SSwithin es la suma de cuadrados agrupados dentro del grupo.Is there anything better?
.Respuestas:
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.
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.
fuente
@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:
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 .
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,
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.
fuente
pls::plsr
para 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.