2017-08-10 46 views
4

這是示例數據:PCA分析錯誤輸出

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分析。我期望來自Day的重複會很好地相互關聯,並從Day2一起復制。我試着用下面的代碼進行一些分析:

## 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) 

但是,輸出是不是我要找:

Output

但我尋找的東西更像是:

Desired output

我想用點在數據中的每一行和不同的顏色爲每個複製品。使用類似的顏色進行Day複製以及Day2會很酷。

與ggplot獲得的數據:

enter image description here

+1

我不明白你的問題。是否關於情節,即你想知道如何創建有色點?還是關於PCA沒有顯示出明顯的羣體? – AEF

+0

這個想法是使用顏色將它們繪製爲不同的組。如你所見,有一個實驗。假設那天是一種控制,Day2是一種治療。對於他們每個人我有四個重複。我會假設所有重複的Day將會高度相互關聯,並且將作爲一個小組保留在情節中,並在Day2中保留相同的重複。也許我錯了,它會看起來不同。但是,從我繪製的圖中看不到任何東西。如果你有更好的主意,你可以推薦任何其他PCA方法。你知道我的目標。 –

+2

所有變量都高度相關。在這種情況下,PCA總是或多或少看起來像水平線 – AEF

回答

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一起獲得好的地塊。

example figure

UPDATE:

既然你在評論中問。這是一個在不同日子重複實驗的例子。在一天中重複1和2,幾天後重複3和4. 兩天的差異高於條件的變化(日期有49%的變化,實驗僅解釋了20%的變化)。 這不是一個好的實驗,應該重複! enter image description here

+0

謝謝。我認爲這對我的原始數據非常有效。我在主要問題中添加了代碼中的輸出。我想知道你對這個情節有什麼想法,以及如何解釋它?它告訴我什麼?我知道這不是一個關於R或什麼的問題,但我想知道某個「外部」人的意見。謝謝!當之無愧的50分 –

+0

你的狀況在第二個維度上擴散,但不是第一個維度,大部分時間都是不好的跡象。但在你的情況下,這兩個軸只解釋了大約20%的差異,所以它不是壞的:-)這取決於你在找什麼。也許你可以找出在con red rep 1 2與3 4相比做了什麼不同(以及con con green rep 1 4到2 3)......這可以解釋爲什麼1分量有更高的方差 – drmariod

+0

The一般的想法是顯示一個條件的重複(紅色或藍色)與條件之間的重複「相比更好」。這是一個案子嗎?還是應該進行不同的分析? –