【问题标题】:PCA analysis wrong outputPCA分析错误输出
【发布时间】:2018-01-18 11:24:54
【问题描述】:

这是示例数据:

structure(c(368113, 87747.35, 508620.5, 370570.5, 87286.5, 612728, 
55029, 358521, 2802880, 2045399.5, 177099, 317974.5, 320687.95, 
6971292.55, 78949, 245415.95, 50148.5, 67992.5, 97634, 56139.5, 
371719.2, 80182.7, 612078.5, 367822.5, 80691, 665190.65, 28283.5, 
309720, 2853241.5, 1584324, 135482.5, 270959, 343879.1, 6748208.5, 
71534.9, 258976, 28911.75, 78306, 56358.7, 46783.5, 320882.85, 
53098.3, 537383.5, 404505.5, 89759.7, 624120.55, 40406, 258183.5, 
3144610.45, 1735583.5, 122013.5, 249741, 362585.35, 5383869.15, 
23172.2, 223704.45, 40543.7, 68522.5, 43187.05, 29745, 356058.5, 
89287.25, 492242.5, 452135.5, 97253.55, 575661.95, 65739.5, 334703.5, 
3136065, 1622936.5, 131381.5, 254362, 311496.3, 5627561, 68210.6, 
264610.1, 45851, 65010.5, 32665.5, 39957.5, 362476.75, 59451.65, 
548279, 345096.5, 93363.5, 596444.2, 11052.5, 252812, 2934035, 
1732707.55, 208409.5, 208076.5, 437764.25, 16195882.45, 77461.25, 
205803.85, 30437.5, 75540, 49576.75, 48878, 340380.5, 43785.35, 
482713, 340315, 64308.5, 517859.85, 11297, 268993.5, 3069028.5, 
1571889, 157561, 217596.5, 400610.65, 5703337.6, 50640.65, 197477.75, 
40070, 66619, 81564.55, 41436.5, 367592.3, 64954.9, 530093, 432025, 
87212.5, 553901.65, 20803.5, 333940.5, 3027254.5, 1494468, 195221, 
222895.5, 494429.45, 7706885.75, 60633.35, 192827.1, 29857.5, 
81001.5, 112588.65, 68904.5, 338822.5, 56868.15, 467350, 314526.5, 
105568, 749456.1, 19597.5, 298939.5, 2993199.2, 1615231.5, 229185.5, 
280433.5, 360156.15, 5254889.1, 79369.5, 175434.05, 40907.05, 
70919, 65720.15, 53054.5), .Dim = c(20L, 8L), .Dimnames = list(
    c("Anne", "Greg", "thomas", "Chris", "Gerard", "Monk", "Mart", 
    "Mutr", "Aeqe", "Tor", "Gaer", "Toaq", "Kolr", "Wera", "Home", 
    "Terlo", "Kulte", "Mercia", "Loki", "Herta"), c("Day_Rep1", 
    "Day_Rep2", "Day_Rep3", "Day_Rep4", "Day2_Rep1", "Day2_Rep2", 
    "Day2_Rep3", "Day2_Rep4")))

我想进行一次不错的 PCA 分析。我希望第 2 天的复制品相互之间有很好的相关性,并且可以将第 2 天的复制品一起复制。我试图使用下面的代码进行一些分析:

## log transform
data_log <- log(data[, 1:8])
#vec_EOD_EON
dt_PCA <- prcomp(data_log,
                           center = TRUE,
                           scale. = TRUE)

library(devtools)
install_github("ggbiplot", "vqv")

library(ggbiplot)
g <- ggbiplot(dt_PCA, obs.scale = 1, var.scale = 1, 
              groups = colnames(dt_PCA), ellipse = TRUE, 
              circle = TRUE)
g <- g + scale_color_discrete(name = "")
g <- g + theme(legend.direction = 'horizontal', 
               legend.position = 'top')
print(g)

但是,输出不是我想要的:

但我正在寻找类似的东西:

我想为数据中的每一行使用点,并为每个重复使用不同的颜色。为 Day 复制和 Day2 使用相似的颜色会很酷。

用ggplot获取数据:

【问题讨论】:

  • 我不明白你的问题。是关于情节,即你想知道如何创建彩色点吗?还是关于没有显示不同组的 PCA?
  • 这个想法是使用颜色将它们绘制为不同的组。如您所见,有一个实验。假设 Day 是对照,Day2 是治疗。对于他们每个人,我都有四个重复。我会假设 Day 的所有复制都将相互高度相关,并将作为一个组留在图上,并且在 Day2 的复制中也是如此。也许我弄错了,它看起来会有所不同。但是,从我绘制的图表中我看不到任何东西。如果您有更好的想法,您可以建议任何其他 PCA 方法。你知道我的目标。
  • 所有变量都高度相关。在这种情况下,PCA 总是或多或少看起来像一条水平线
  • 所以,请帮助我在我的 PCA 分析中添加颜色,如果您能提出任何其他方法来比较这些数据,我将不胜感激......并尝试可视化控制和治疗之间的潜在差异(第 2 天 vs 第 2 天)...
  • 初始数据集中的列是变量,对吧?通过执行 PCA,您正在转换您的变量和给定的数据点,如 (PCA1, PCA2) 不“属于”列:它是您的列的两种混合的组合。我认为从您描述问题的方式来看,可能存在一个缺失的部分,即不受 PCA 影响的附加标签(如在 iris 数据集中)。也许 PCA 不适合您。

标签: r


【解决方案1】:

假设您将数据保存到df

library(ggplot2)
pc_df <- prcomp(t(df), scale.=TRUE)
pc_table <- as.data.frame(pc_df$x[,1:2]) # extracting 1st and 2nd component

experiment_regex <- '(^[^_]+)_Rep(\\d+)' # extracting replicate and condition from your experiment names
pc_table$replicate <- as.factor(sub(experiment_regex,'\\2', rownames(pc_table)))
pc_table$condition <- as.factor(sub(experiment_regex,'\\1', rownames(pc_table)))

ggplot(pc_table, aes(PC1, PC2, color=condition, shape=replicate)) +
  geom_point() +
  xlab(sprintf('PC1 - %.1f%%', # extracting the percentage of each PC and print it on the axes
               summary(pc_df)$importance[2,1] * 100)) +
  ylab(sprintf('PC2 - %.1f%%', 
               summary(pc_df)$importance[2,2] * 100))

您必须做的第一件事是使用t() 将数据转换为正确的形状。这可能已经是您正在寻找的东西了。

我更喜欢用我自己的函数来绘制图,我写下了步骤,以便用ggplot2 得到一个漂亮的图。

更新:

因为您在 cmets 中询问。这是一个在不同的日子重复实验的例子。一天复制 1 和 2,几天后复制 3 和 4。 两天的差异大于条件的变化(一天有 49% 的方差,实验只有 20% 的方差解释)。 这不是一个好的实验,应该重复!

【讨论】:

  • 谢谢。我认为它适用于我的原始数据。我在主要问题中添加了您的代码的输出。我想知道你对那个情节有什么看法以及如何解释它?它告诉我什么?我知道这不是关于 R 或其他东西的问题,但我想知道“外部”某人的意见。谢谢!应得的 50 分
  • 您的情况会在第二维传播,但不会在第一维传播,这在大多数情况下是一个不好的迹象。但在你的情况下,两个轴只解释了大约 20% 的方差,所以还不错:-) 这取决于你在寻找什么。也许你可以弄清楚 con red rep 1 2 与 3 4 相比有什么不同(以及 con green rep 1 4 到 2 3)......这可以解释为什么 1 组件的方差更高跨度>
  • 总的想法是表明一个条件的重复相关(红色或蓝色)比条件之间的重复关联“更好”。是个案吗?还是应该进行不同的分析?
  • 这是我无法为你回答的问题,抱歉,我需要更多背景等。而且图片有点边界来决定这一点。您可能还需要其他类型的分析。抱歉,没有明确的是或否!
  • 最后一个问题。你太有帮助了。现在忽略复制并仅使用 2 个条件怎么样。不应该有形状差异。我的意思是我想将每一行用作一个单独的点。有可能吗?
猜你喜欢
  • 1970-01-01
  • 2013-03-31
  • 1970-01-01
  • 1970-01-01
  • 2016-01-18
  • 1970-01-01
  • 2021-05-01
  • 1970-01-01
  • 2021-08-20
相关资源
最近更新 更多