@@ -33,3 +33,196 @@ SaveH5Seurat(Kang18_8vs8_seur, filename = "~/sciFA/Data/PBMC_Lupus_Kang8vs8_data
3333Convert(" ~/sciFA/Data/PBMC_Lupus_Kang8vs8_data.h5Seurat" , dest = " h5ad" )
3434
3535
36+
37+
38+ # ##########################################################################################
39+ # ######################. evaluate correlation with QC parameters. ########################
40+ # ##########################################################################################
41+ Kang18_8vs8_seur <- readRDS(" ~/scLMM/LMM-scRNAseq//Data/PBMC_Lupus_Kang8vs8_data_counts.rds" )
42+ factor_df = read.csv(' ~/sciFA/Results/pca_scores_varimax_df_merged_lupusPBMC.csv' )
43+ head(factor_df )
44+ # #### calculating the mt percentage
45+ # HumanLiverSeurat[["percent.mt"]] <- PercentageFeatureSet(HumanLiverSeurat, pattern = "^MT-")
46+ mt_indices = grep(' ^MT-' ,rownames(Kang18_8vs8_seur ))
47+ sum_MT_conuts = colSums(GetAssayData(Kang18_8vs8_seur , layer = ' counts' )[mt_indices ,])
48+ sum_counts = colSums(GetAssayData(Kang18_8vs8_seur , layer = ' counts' ))
49+ Kang18_8vs8_seur [[" percent.mt" ]] = sum_MT_conuts / sum_counts
50+
51+ sum(colnames(Kang18_8vs8_seur )!= factor_df $ X )
52+ factor_df $ percent.mt = Kang18_8vs8_seur [[" percent.mt" ]]
53+
54+ qc_columns = c(' nCount_originalexp' , ' nFeature_originalexp' )
55+ factor_cols = paste0(' F' , c(1 , 3 , 4 , 8 , 13 , 15 , 16 , 17 , 19 , 21 : 24 , 26 : 30 ))
56+ to_keep_cols = c(factor_cols , qc_columns )
57+ factor_df_sub = factor_df [,colnames(factor_df ) %in% to_keep_cols ]
58+
59+ cor_mat = cor(factor_df_sub )[qc_columns , factor_cols ]
60+
61+
62+ library(pheatmap )
63+ # make the color pallete
64+ clrsp <- colorRampPalette(c(" darkgreen" , " white" , " purple" ))
65+ clrs <- clrsp(200 )
66+ breaks1 <- seq(- 1 , 1 , length.out = 200 )
67+ rownames(cor_mat )[1 : 2 ] = c(' Total Counts' , ' Total Features' )
68+ cor_mat.t = t(cor_mat )
69+ pheatmap(cor_mat.t , cluster_cols = F , breaks = breaks1 , color = clrs , display_numbers = T ,
70+ cluster_rows = F , fontsize_row = 11 , fontsize_col = 12 )
71+
72+
73+
74+ factor_number = 25
75+ factor_df2 = factor_df
76+ factor_df2 = factor_df2 [! is.na(factor_df2 $ cell ),]
77+ # factor_df2 = factor_df2[factor_df2$F22<(20),]
78+
79+
80+ ggplot(factor_df2 , aes(y = F29 , x = cell ,fill = cell )) +
81+ geom_boxplot() +
82+ scale_fill_manual(values = color_palette ) +
83+ theme_classic() + # Use a clean theme
84+ theme(
85+ axis.text.x = element_text(size = 12 ),
86+ axis.text.y = element_text(size = 12 ),
87+ axis.title.x = element_text(size = 14 ),
88+ axis.title.y = element_text(size = 14 ),
89+ legend.title = element_text(size = 13 ),
90+ legend.text = element_text(size = 11 ),
91+ ) + coord_flip()+
92+ labs(
93+ x = " " , # Label for x-axis
94+ y = paste0(" F" ,factor_number ," Score" ), # Label for y-axis
95+ color = " Cell Type" , # Legend title
96+ # title = paste0("Scatter Plot of F1 vs F", factor_number, " Colored by cell type")
97+ )
98+
99+
100+
101+
102+ # ##################################################################
103+
104+ library(gprofiler2 )
105+
106+ get_gprofiler_enrich <- function (markers , model_animal_name ){
107+ gostres <- gost(query = markers ,
108+ ordered_query = TRUE , exclude_iea = TRUE ,
109+ sources = c(' GO:BP' ,' REAC' ),
110+ organism = model_animal_name )
111+ return (gostres )
112+ }
113+
114+ factor_loading = read.csv(' ~/sciFA/Results/varimax_loading_df_lupusPBMC.csv' )
115+
116+ factor_i = 3
117+ df = data.frame (gene = factor_loading $ X , factor = factor_loading [[paste0(' F' ,factor_i )]])
118+ df $ gene <- sapply(strsplit(as.character(df $ gene ), " -" ), `[` , 1 )
119+ df $ gene <- sub(" -EN.*" , " " , df $ gene )
120+ # Select top and bottom 20 genes
121+ varimax_loading_vis = rbind(head(df [order(df $ factor , decreasing = TRUE ), ], 20 ),
122+ tail(df [order(df $ factor , decreasing = TRUE ), ], 20 ))
123+
124+ # Factor levels based on the ordering of genes
125+ varimax_loading_vis $ gene <- factor (varimax_loading_vis $ gene ,
126+ levels = varimax_loading_vis $ gene )
127+
128+ # Plot with vertical orientation using coord_flip()
129+ ggplot(varimax_loading_vis , aes(x = gene , y = factor , color = factor )) +
130+ geom_point(size = 2 , alpha = 1 ) +
131+ theme_bw() +
132+ theme(
133+ axis.text.x = element_text(color = " grey20" , size = 12 , angle = - 90 ), # Adjust font size for horizontal axis
134+ axis.text.y = element_text(color = " grey20" , size = 11.5 , hjust = 1 , vjust = 0.5 ),
135+ axis.title.x = element_text(color = " grey20" , size = 14 ),
136+ axis.title.y = element_text(color = " grey20" , size = 14 ),
137+ legend.text = element_text(hjust = 1 ),
138+ legend.position = " left" ,
139+ legend.direction = " vertical"
140+ ) +
141+ # Set gradient colors
142+ scale_color_gradient2(
143+ name = paste0(" Factor " , factor_i ),
144+ midpoint = 0 ,
145+ low = " darkgreen" , # Color for negative values
146+ mid = " white" , # Color for midpoint
147+ high = " darkred" , # Color for positive values
148+ space = " Lab"
149+ ) +
150+ ylab(' Factor loading' ) +
151+ xlab(' ' ) +
152+ ggtitle(paste0(" Factor " , factor_i ))
153+ # coord_flip() # Flip the coordinates to make the plot vertical
154+
155+
156+
157+
158+
159+ model_animal_name = ' hsapiens'
160+
161+
162+ factor_i = 22
163+ df = data.frame (gene = factor_loading $ X , factor = factor_loading [[paste0(' F' ,factor_i )]])
164+ # df$gene <- sapply(strsplit(as.character(df$gene), "-"), `[`, 1)
165+ df $ gene <- sub(" -EN.*" , " " , df $ gene )
166+
167+
168+ df_pos = df [order(df $ factor , decreasing = T ),]
169+ df_neg = df [order(df $ factor , decreasing = F ),]
170+
171+ head(df_pos ,10 )
172+ head(df_neg ,10 )
173+ num_genes = 200
174+
175+ table_to_vis = df_pos [1 : 20 ,]
176+ rownames(table_to_vis ) = NULL
177+ colnames(table_to_vis ) = c(' Gene' , ' Score' )
178+ table_to_vis $ Score = round(table_to_vis $ Score , 3 )
179+ library(gridExtra )
180+ dev.off()
181+ tt2 <- ttheme_minimal()
182+ gridExtra :: grid.table(table_to_vis , theme = tt2 )
183+
184+ # ####### pos enrichment
185+ enrich_res = get_gprofiler_enrich(markers = df_pos $ gene [1 : num_genes ],
186+ model_animal_name = model_animal_name )# 'gp__SEA8_T0ld_VHU'
187+ # ####### neg enrichment
188+ enrich_res = get_gprofiler_enrich(markers = df_neg $ gene [1 : num_genes ],
189+ model_animal_name = model_animal_name )# 'gp__SEA8_T0ld_VHU'
190+ head(enrich_res $ result ,30 )
191+
192+
193+
194+ enrich_res_df = data.frame (enrich_res $ result )
195+ enrich_res_df $ log_p = - log(as.numeric(enrich_res_df $ p_value ))
196+ enrich_res_df = enrich_res_df [order(enrich_res_df $ log_p , decreasing = T ),]
197+ # View(enrich_res_df)
198+
199+ num_term_vis = 15
200+ enrich_res_df = enrich_res_df [1 : num_term_vis ,]
201+ # enrich_res_df = enrich_res_df[c(2, 5,28,29,32,42,46,48,62,65),]
202+
203+ enrich_res_df = enrich_res_df [,colnames(enrich_res_df ) %in% c(' term_name' , ' p_value' )]
204+ enrich_res_df $ log_p = - log(enrich_res_df $ p_value )
205+ title = ' '
206+
207+ enrich_res_df $ term_name = gsub(' metabolic process' , ' metabolism' ,enrich_res_df $ term_name )
208+ # enrich_res_df$term_name[9] = "The citric acid (TCA) cycle"
209+ enrich_res_df $ term_name <- factor (enrich_res_df $ term_name ,
210+ levels = enrich_res_df $ term_name [length(enrich_res_df $ term_name ): 1 ])
211+
212+ color = " coral3"
213+ color = " darkseagreen3"
214+
215+ title = ' ' # 'stim'#'Male'
216+ enrich_res_df = enrich_res_df [- 7 ,]
217+ ggplot(enrich_res_df , aes(y = term_name ,x = log_p ))+
218+ geom_bar(stat = ' identity' ,fill = color ,color = ' grey10' )+
219+ xlab(' -log(p value)' )+
220+ theme_classic()+ ylab(' ' )+ ggtitle(title )+
221+ scale_fill_manual(values = c(color ))+
222+ theme(axis.text.x = element_text(color = " grey20" , size = 13 , angle = 0 , hjust = .5 , vjust = .5 , face = " plain" ),
223+ axis.text.y = element_text(color = " grey20" , size = 12 , angle = 0 , hjust = 1 , vjust = 0 , face = " plain" ),
224+ axis.title.x = element_text(color = " grey20" , size = 17 , angle = 0 , hjust = .5 , vjust = 0 , face = " plain" ),
225+ axis.title.y = element_text(color = " grey20" , size = 17 , angle = 90 , hjust = .5 , vjust = .5 , face = " plain" ))
226+
227+
228+
0 commit comments