Análisis práctico de los datos del transcriptoma unicelular de la serie NBIS (8): inferencia de trayectoria celular cuasi cronológica

En este tutorial, aprenderemos a inferir trayectorias de diferenciación celular mediante análisis cuasicronológico. El paquete Slingshot puede realizar la construcción del linaje de diferenciación celular y la inferencia pseudo-temporal en datos de secuencia de ARN de una sola célula. Utiliza información de agrupación de células y reducción de dimensionalidad espacial para descubrir la relación entre los grupos de células de manera no supervisada o semisupervisada. estructura global entre grupos de células y convertir esta estructura en un linaje suave representado por una variable unidimensional, llamada "pseudotiempo".

La ejecución de Slingshot requiere al menos dos archivos de entrada: la matriz de coordenadas de las celdas en el espacio de dimensión reducida y el vector de etiqueta del grupo de grupos de celdas. Con estos dos archivos de entrada, podemos:

Aquí, simulamos dos formas diferentes de conjuntos de datos para el análisis de inferencia de linaje.

A continuación, construimos un primer conjunto de datos de prueba que representa un único linaje en el que un tercio de los genes están asociados con la transición. Incluimos este conjunto de datos en un objeto SingleCellExperiment y lo utilizamos para demostrar el proceso de análisis.

A continuación, construimos un segundo conjunto de datos de ejemplo, que consta de una matriz de coordenadas espaciales de dimensión reducida (como las obtenidas mediante PCA, ICA y mapas de difusión, etc.) y etiquetas de grupos de células (como K - significa agrupación, etc. generada) composición. Este conjunto de datos representa una trayectoria bifurcada y se puede utilizar para demostrar otras características del paquete Slingshot.

Para comenzar el análisis de un único conjunto de datos genealógicos, necesitamos reducir la dimensionalidad de los datos y filtrar los genes no informativos. Esto aumentará en gran medida la velocidad del análisis posterior y minimizará la pérdida de información.

Para el paso de filtrado de genes, retuvimos genes que se expresaban en al menos 10 células y tenían un recuento de expresión genética de al menos superior a 3.

Dado que utilizamos datos simulados, no hay necesidad de preocuparse por los efectos del lote u otros posibles factores de confusión. Aquí, usaremos el método de normalización cuantil para normalizar los datos de expresión, lo que puede hacer que cada celda tenga la misma distribución de valores de expresión.

La suposición básica de Slingshot es que las células con transcripción similar estarán cerca unas de otras en algún espacio de dimensiones reducidas. Dado que utilizamos distancias euclidianas al construir genealogías y medir pseudotiempo, es importante reducir la dimensionalidad de los datos.

Aquí demostraremos dos métodos de reducción de dimensionalidad: análisis de componentes principales (PCA) y aproximación y proyección de variedades uniformes (UMAP, llamado a través del paquete uwot).

A continuación, podemos agregar los resultados de la reducción de dimensionalidad al objeto SingleCellExperiment.

La entrada final de Slingshot es el vector de etiqueta del grupo de células. Si no se proporciona este parámetro, Slingshot trata los datos como grupos de celdas individuales y ajusta una curva maestra estándar. Sin embargo, recomendamos que las células se agrupen incluso en conjuntos de datos donde solo se espera un linaje único, ya que potencialmente puede descubrir nuevos eventos de ramificación.

Los grupos resultantes en este paso se utilizarán para determinar la estructura global de linajes potencialmente divergentes. Esto es diferente del objetivo típico de agrupar datos unicelulares, donde el objetivo principal es identificar todos los tipos de células biológicamente relevantes presentes en el conjunto de datos. Por ejemplo, al determinar la estructura global del linaje, no es necesario distinguir entre neuronas inmaduras y maduras porque ambos tipos de células pueden pertenecer al mismo segmento a lo largo del linaje.

Aquí, adoptamos dos métodos de agrupación: modelado de mezcla gaussiana y agrupación de k-medias, que de manera similar suponen que la distancia euclidiana en el espacio de baja dimensión refleja la distancia entre células. El primero se puede implementar utilizando el paquete mclust (Scrucca et al, 2016), que puede proporcionar un método basado en el Criterio de información bayesiano (BIC) para determinar automáticamente el número de grupos para la agrupación de células.

La agrupación en clústeres de k-means no tiene una función similar, por lo que debemos especificar manualmente el número de grupos de celdas para la agrupación. Si el número de grupos de células se elige demasiado bajo, podemos perder un evento de ramificación verdadero; si es demasiado alto o hay muchos grupos pequeños, podemos comenzar a ver eventos de ramificación falsos. Aquí, elegimos que el número de conglomerados sea 4 para el análisis de conglomerados de k-medias.

Ahora, hemos obtenido los dos archivos utilizados para el análisis de tirachinas: la matriz de coordenadas espaciales de reducción de dimensionalidad celular y el vector de etiqueta de agrupamiento. A continuación, podemos ejecutar slinghsot para el análisis de inferencia de pseudotiempo. Este es un proceso de dos pasos que implica identificar la estructura global del linaje con un árbol de expansión mínima (MST) basado en grupos de células y ajustar curvas principales para describir cada linaje.

Estos dos pasos se pueden ejecutar por separado usando las funciones getLineages y getCurves, o se pueden ejecutar juntos usando la función contenedora slingshot (recomendado). Aquí, usaremos la función contenedora para realizar un análisis de linaje en un conjunto de datos de una sola trayectoria y luego demostraremos el uso de funciones de paso en un conjunto de datos bifurcados.

Para ejecutar Slingshot utilizando la información de coordenadas espaciales producida por la reducción de dimensionalidad PCA y las etiquetas de grupos de células identificadas por el modelado de mezcla gaussiana, haremos lo siguiente:

Como se mencionó anteriormente, Si no se proporciona información de agrupación, Slingshot supone que todas las celdas pertenecen al mismo grupo y construirá una curva ajustada. Si no se proporciona información de coordenadas espaciales reducidas, Slingshot utilizará la información del primer elemento de la lista devuelta ReduceDims.

El resultado de salida es un objeto SingleCellExperiment que contiene el resultado del tirachinas. La mayoría de los resultados se agregan a los metadatos como una lista y se puede acceder a ellos a través de metadata(sce)$slingshot. Además, todas las variables de pseudotiempo inferidas (una por linaje) se agregan a colData. Si queremos extraer todos los resultados en un solo objeto Slingshot, podemos usar la función SlingshotDataSet. Esto es útil para la visualización porque se incluyen varios métodos de dibujo de objetos en la función SlingshotDataSet. A continuación, visualizamos los resultados de la inferencia de linaje a partir de datos de una sola trayectoria y coloreamos las celdas con pseudotiempo.

Al utilizar el parámetro de tipo, también puede ver cómo el árbol de expansión mínimo basado en grupos de células infiere la estructura del linaje.

Después de utilizar Slingshot para inferir linajes de diferenciación celular, podemos identificar aún más genes cuya expresión cambia a lo largo del pseudotiempo o durante el desarrollo. Demostraremos este tipo de análisis utilizando el paquete tradeSeq (Van den Berge et al., 2020).

Para cada gen, ajustaremos un modelo aditivo general (GAM) utilizando una distribución de ruido binomial negativa para modelar la relación (posiblemente no lineal) entre la expresión génica y el modelado. Luego utilizamos la función de prueba de asociación para identificar genes que estaban significativamente asociados con el pseudotiempo.

Luego podemos seleccionar los genes que cambiaron de manera más significativa en función de sus valores p y visualizar su expresión a lo largo del pseudotiempo o el desarrollo a través de un mapa de calor. Aquí, utilizamos los 250 genes principales para su visualización.

A continuación, destacaremos algunas otras características del paquete Slingshot. Usamos el conjunto de datos slingshotExample integrado en el paquete como ilustración. Este conjunto de datos contiene una representación de baja dimensión del espacio de reducción de dimensionalidad de la celda y las etiquetas del grupo de celdas después de la agrupación de k-medias.

En primer lugar, nuestra función getLineages construye la estructura global de los linajes de diferenciación celular.

Esta función utiliza una matriz espacial de reducción de dimensionalidad de celda n × p y el vector de etiqueta n del grupo de conglomerados como entrada, mapea las conexiones entre grupos de celdas adyacentes a través del algoritmo de árbol de expansión mínima (MST) e identifica aún más las celdas a través de estas relaciones de conexión. Caminos de linajes divergentes. La salida de esta función es un objeto SlingshotDataSet que contiene el archivo de entrada, así como el MST inferido (representado por una matriz de adyacencia) y el linaje de diferenciación (un vector ordenado de grupos de células).

También podemos realizar este análisis de forma completamente no supervisada o semi-supervisada especificando clusters de inicio y fin conocidos. Si no especificamos un punto de partida, Slingshot elige un punto de partida basado en la parsimonia que maximiza el número de grupos de células compartidos entre linajes antes de dividirse. Si no se produce ninguna segmentación o si varios grupos producen la misma puntuación de parsimonia, el grupo inicial se puede elegir arbitrariamente.

Para nuestros datos de simulación, se selecciona "Cluster1" como grupo inicial. Sin embargo, generalmente recomendamos determinar las categorías de los grupos iniciales en función del conocimiento a priori (momento de recolección de la muestra o marcadores genéticos conocidos).

En este paso también podemos especificar clústeres de puntos finales conocidos. Al construir un MST, los grupos de células designadas como estados terminales estarán obligados a tener una sola conexión (es decir, deben ser nodos hoja). Esta restricción puede afectar la forma en que se dibujan otras partes del árbol, como se muestra en el siguiente ejemplo, donde especificamos Cluster3 como el clúster de puntos finales.

Este tipo de supervisión puede ser útil para garantizar que los resultados sean consistentes con el conocimiento biológico previo. Específicamente, previene la relegación de destinos conocidos de células terminales a estados transitorios.

También podemos pasar algunos otros parámetros para lograr un mejor control sobre la función getLineages:

Para construir una curva genealógica suave, utilizamos la función getCurves para procesar los resultados de getLineages. . Esta función sigue un proceso iterativo similar a la curva principal propuesta en (Hastie y Stuetzle 1989). Si solo hay un linaje divergente, la curva resultante es simplemente la curva principal que pasa por los centros de los datos, con un ajuste: la curva inicial se construye mediante conexiones lineales entre los centros de los conglomerados en lugar del primer componente principal de los datos. Este ajuste aumenta la estabilidad y, a menudo, acelera la convergencia del algoritmo.

Cuando hay dos o más linajes diferenciados, añadimos un paso extra al algoritmo: promediar las curvas cercanas a la primera celda compartida. Ambos linajes deberían concordar bien en las células que aún no están diferenciadas, por lo que en cada iteración promediamos las curvas alrededor de estas células. Esto aumenta la estabilidad del algoritmo y produce linajes ramificados suaves.

El resultado de la función getCurves también es un objeto slingshotDataSet, que contiene la curva maestra del linaje de divergencia y otra información sobre cómo se ajusta. Podemos extraer valores de pseudotiempo para células en diferentes linajes de diferenciación usando la función de pseudotiempo, donde NA representa valores no asignados a células de un linaje específico. Utilice la función curveWeights para extraer una matriz de ponderaciones de similitud que asigne cada celda a uno o más linajes.

Se puede acceder a los objetos Curve utilizando la función Curves, que devuelve una lista de objetos principal_curve. Estos objetos contienen la siguiente información:

Para conjuntos de datos grandes, recomendamos utilizar el parámetro approx_points al ejecutar la función Slingshot. Al configurar approx_points, el usuario puede especificar la resolución (número de puntos únicos) de la curva, lo que puede reducir significativamente el tiempo de cálculo con una pérdida mínima de precisión. Recomendamos establecer este valor en 100-200.