I have several samples (C2, C4, C5) and want to check if they are at a certain stage. I included some known samples (D0 - D77) which were generated at different stages by another lab. In the PCA plot, my samples cluster together on the left and the known samples are dispersed on the right. I think the major difference among all the samples is different experimental protocols (PC1) and the second is different stages (PC2). So my samples are at the same stage. Is that right? And can we say my samples are at a stage between D12 and D19 (when projected to known samples, my samples are located between D12 and D19)? I have no strong mathematical background. Hope someone with math background can give some explanation. Thanks!
[ UPDATE1 ] I did this analysis using prcomp in R. The input is a 2D numeric matrix with 17436 rows and 42 columns. Each row represents a gene and each column represents a sample. The number is the gene expression level for a gene in a sample. The gene expression level is normalized using DESeq2 and thus the numbers are comparable across genes (rows) and samples (columns). For the 42 columns, 18 are from my experiments and the rest from published datasets. Besides different protocols, it is possible there are other differences. Generally, the table is a combination of two sources of data. In my data , C2, C4 and C5 are three cell lines which we processed in parallel in experiments. In published datasets, they sampled the cells at different time points (Day 0 to Day 77).
[ UPDATE2 ] R Code for PCA and plotting
# normCounts: normalized count from DESeq2, with 17436 rows and 42 columns normCounts0 <- normCounts[ rowSums(normCounts) > 0, ] tab <- t(normCounts0) pca <- prcomp(tab, scale = TRUE) tmp.x <- as.data.frame(pca$x) tmp.x$sample<-c(rep("C2_Con",3),rep("C2_KD",3),rep("C5_Con",3),rep("C5_KD",3),rep("C4_Con",3),rep("C4_KD",3), rep("D0",4),rep("D7",4),rep("D12",2),rep("D19",4),rep("D26",2),rep("D33",2),rep("D49",2),rep("D63",2),rep("D77",2)) require("ggplot2") p <- ggplot(tmp.x, aes(x=PC1, y=PC2, color=sample)) p + geom_point() + scale_color_discrete(breaks=c("C2_Con","C2_KD","C5_Con","C5_KD","C4_Con","C4_KD", "D0","D7", "D12","D19","D26","D33","D49","D63","D77"))