主成分分析PCA預測未知分類信息

2021-01-12 果子學生信

本文是用主成分分析的方法去預測未知樣本的信息。

這裡有一批179個樣本的數據,正常組織27個,腫瘤組織129個,轉移組織18個,還有5個組織因為師妹不小心,標籤弄掉了 所以不知道信息。

那麼本次就是要通過主成分分析的方法,預測那5個樣本的信息。

第一,加載數據

增加一些分組信息,比如已知的樣本分類,訓練組,測試組。

load(file = "taylor2010.Rdata")

index_normal <- grepl("N.P", colnames(taylor))

index_primary <- grepl("P.P", colnames(taylor))

index_met <- grepl("M.P", colnames(taylor))

n_normal <- sum(index_normal);

n_primary = sum(index_primary);

n_met = sum(index_met);

# class label (design vector)

taylor_classes = c(rep(0,n_normal), rep(1,n_primary), rep(2,n_met));

# train (known type samples), and test (unknown type samples)

train <- taylor[,1:174];

test <- taylor[,175:179];

# colors for plotting

cols = c(taylor_classes+2, 1,1,1,1,1)

tumortype_class <- factor(taylor_classes, levels = 0:2,

                         labels = c("Normal", "Primary", "Metastasized"))

train_samps <- 1:174

test_samps <- 175:179

這些數據已經被標準化處理過。

第二,批次處理

在之前,我們需要看一下他有沒有批次效應

edata <- train

dist_mat <- dist(t(edata))

clustering <- hclust(dist_mat, method = "complete")

#plot(clustering, labels = tumortype_class)

plot(clustering, labels = taylor_classes)

這個明顯是有批次效應的,上次的那個帖子中

批次效應這樣矯正

是給出批次信息的,而這次沒有, 當沒有批次信息的時候,眼睛看也可以大致判定批次(如果沒有其他因素影響) 我們在這個帖子裡面就做過 批次效應有時候真麻煩!

但是,本次樣本量很多,我並不能判斷,所以這次不作批次處理,並不影響我們的下遊分析,

第三,差異分析。

這裡的方法我們在這個帖子裡面也講過 Limma 求差異基因構建矩陣的兩種方式 這裡我想知道癌和癌旁中的差異基因,轉移和癌旁中的差異基因,轉移和癌的差異基因,所以選擇多組矩陣構建

library(limma)

f <- tumortype_class

# 分組矩陣

design <- model.matrix(~0+f)

colnames(design) <- levels(f)

fit <- lmFit(train, design)

# 比較矩陣

contrast.matrix <- makeContrasts(Primary-Normal,

                                Metastasized-Normal,

                                Metastasized-Primary,

                                levels=design)

fit2 <- contrasts.fit(fit, contrast.matrix)

fit2 <- eBayes(fit2)

把三個組的差異基因分別提取出來

PvsN <- topTable(fit2, coef=1,number = Inf,p.value=0.05, lfc=1.5)

MvsN <- topTable(fit2, coef=2,number = Inf,p.value=0.05, lfc=1.5)

MvsP <- topTable(fit2, coef=3,number = Inf,p.value=0.05, lfc=1.5)

length(rownames(PvsN))

length(rownames(MvsN))

length(rownames(MvsP))

分別獲得了,14, 546,189個差異基因,為什麼癌和癌旁的差異那麼大,第一,他們本身就有差異, 第二,因為我們設置了fdr過濾,所以樣本越大越有可能挑選出穩定差異的基因。

把三組差異基因合併起來,得到562個,說明,這幾個之間有重合。

set12 <-union(rownames(PvsN),rownames(MvsN))

set123 <-union(set12,rownames(MvsP))

length(set123)

第四,主成分分析PCA

R中prcomp可以直接做主成分分析

edata <- taylor[set123,]

pca_raw <- prcomp(t(edata), center = TRUE, scale. = TRUE)

用biplot作圖

biplot(pca_raw)

可能是我年紀比較小吧,還欣賞不來這種藝術形式,所以我決定自己畫個圖

我不僅畫,還要把那些樣本的信息標註出來

edata_pc_df <- as.data.frame(pca_raw$x)

taylor_classes = c(rep("Normal",n_normal),

                  rep("Primary",n_primary),

                  rep("Metastasized",n_met),

                  rep("Unknown",5))

taylor_classes <- factor(taylor_classes,

                        levels = c("Normal", "Primary", "Metastasized","Unknown"))

edata_pc_df$sample <- taylor_classes

#head(edata_pc_df)

library(ggplot2)

library(ggrepel)

edata_pc_df$samplenames <- rownames(edata_pc_df)

ggplot(edata_pc_df, aes(x = PC1, y = PC2, color = taylor_classes)) +

 geom_point() +

 geom_text_repel(data=subset(edata_pc_df, edata_pc_df$sample=="Unknown"),

                 aes(label=samplenames),col="black",alpha = 0.8)

圖中紫色的點就代表位置樣本,我已經用箭頭指出來了,我們發現,依然三個樣本屬於轉移組,剩下的兩個 混跡在normal組中,肉眼可見的差異才叫差異嘛!

過了幾天,我又看到了另外一個包,可以直接對PCA結果可視化,我就試用了一下。

首先這個包的安裝需要devtools,然後要從github上安裝,說實話我沒有安裝成功。 如果你像我一樣,請你轉移到公眾號裡面的那篇,R包的無敵安裝,可以解決任意R包的安裝。 估計洲更看到這裡會跳起來打我,但是,沒有用的,有時候我就是這麼流氓。

install.packages("devtools")

library(devtools)

install_github("vqv/ggbiplot")

安裝的困難,用起來簡單

# PCA

edata <- taylor[set123,]

pca_raw <- prcomp(t(edata), center = TRUE, scale. = TRUE)

# 作圖

library(ggbioplot)

ggbiplot(pca_raw, obs.scale = 1, var.scale = 1,

        groups = taylor_classes, ellipse = T, circle = F,var.axes = F)

這時候我們發現兩個normal要實錘了,但是那三個轉移的反倒是沒那麼可信了。

肯定有人會不理解,為什麼要先算差異基因呢,最起碼有兩個原因: 第一,也是最重要的,差異基因在本質上校正了批次效應,排除了很多背景。 第二,是我自己發現的,實際上不重要,SVM還有回歸這些算法不支持大量基因。 感興趣的翻看到公眾號的SVM那個帖子看看就知道了,他也是要接受差異基因的。

那麼在這裡,我們說幹就幹,把全基因帶入進來,看看PCA還能幹什麼

edata <- taylor

pca_raw <- prcomp(t(edata), center = TRUE, scale. = TRUE)

ggbiplot(pca_raw, obs.scale = 1, var.scale = 1,

        groups = taylor_classes, ellipse = T, circle = F,var.axes = F)

主成分:我的特長就是抓重點,但是首先你得有重點。

總結:主成分分析也是能夠預測未知分類的,但是和K均值一樣需要有眼光。 不過,不要沮喪,沒關係啊,我們還有,支持向量機SVM,和K鄰近算法呢,

Kmeans 和 PCA 靠看,SVM 和 KNN 靠算,靠看容易看花眼,靠算長留天地間。


相關焦點

  • 用StackOverflow訪問數據實現主成分分析(PCA)
    大數據文摘出品編譯:汪小七、張馨月、雲舟主成分分析(PCA:Principal Component Analysis)非常有助於我們理解高維數據,我利用Stack Overflow的每日訪問數據對主成分分析進行了實踐和探索,你可以在rstudio :: conf 2018上找到其中一篇演講的錄音。
  • R語言實現主成分分析
    主成分分析(PCA)是一種常見的排序方法
  • 原理+代碼|Python基於主成分分析的客戶信貸評級實戰
    如果我們分別對每個指標進行分析,往往得到的結論是孤立的,並不能完全利用數據蘊含的信息。但是盲目的減少我們分析的指標,又會損失很多有用的信息。所以我們需要找到一種合適的方法,一方面可以減少分析指標,另一方面儘量減少原指標信息的損失。
  • 使用PCA可視化數據
    主成分分析(PCA)是一個很好的工具,可以用來降低特徵空間的維數。PCA的顯著優點是它能產生不相關的特徵,並能提高模型的性能。它可以幫助你深入了解數據的分類能力。在本文中,我將帶你了解如何使用PCA。將提供Python代碼,完整的項目可以在GitHub連結:https://github.com/conorosully/medium-articles。
  • 用 PCA 方法進行數據降維
    下面我們來用PCA具體來分析一下該數據集,首先先看看該數據在選取4個主成分下的情況,這時候其主成分的數量和原數據的維度數相等。其結果如圖5所示。pca = PCA(n_components=4) #選取4個主成分pc = pca.fit_transform(values) #對原數據進行pca處理print("explained variance ratio: %s" % pca.explained_variance_ratio_) #輸出各個主成分所佔的比例
  • 聚類樹和PCA等排序圖的組合繪製
    聚類分析和排序分析(降維分析)都是用於探索多元數據結構的常用方法,二者的結果也可以結合在一起通過一張圖呈現,本篇展示一些常見的示例。https://pan.baidu.com/s/1dQxyRcBuGDoec9ZKm77Y6w示例數據包含15個樣本(對象),20個變量,下文對它執行聚類和降維,並作圖展示。
  • 通俗易懂的講解奇異值分解(SVD)和主成分分析(PCA)
    對稱矩陣的特徵分解奇異值分解(The Singular Value Decomposition,SVD)主成分分析主成分分析優點:1. 減少模型的訓練時間——使用了更少的數據集;2. 數據更容易可視化——對於高維數據,通過人工的方式去實現可視化是比較困難的。3.
  • R語言做主成分分析實例
    在做多樣本的RNA-Seq數據中經常會用到主成分分析(PCA)來分析,那麼什麼是PCA呢,這個可以百度一下,大概意思如下:主成分分析法是數據挖掘中常用的一種降維算法
  • 數據建模中分類與預測模型
    摘要:  隨著計算機技術的興起,當前社會已經進入大數據資訊時代。資本市場隨著投資者的不斷湧入以及金融科技的不斷發展,交易時所涉及到的信息也逐漸繁雜。如果還是利用過往的分析模式,個人的力量就顯得愈加薄弱。
  • 數據分析之主成分分析,spss主成分分析實例
    一、主成分分析概要主成分分析,在進行有多個指標的綜合評定時,客觀全面的綜合評價結果非常重要,然而往往多個指標之間通常存在信息不統一或者重複等眾多因素,各指標的權重往往很難確認。主成分分析方法能夠解決以上問題,主成分分析法是一種降維的統計方法,是考察多個變量間相關性一種多元統計方法。二、spss主成分分析操作流程導入數據。
  • SPSS超詳細教程:主成分分析
    2、對問題的分析  研究者擬將多個變量歸納為某幾項信息進行分析,即降低數據結果的維度。針對這種情況,我們可以進行主成分提取,但需要先滿足2項假設:  假設1:觀測變量是連續變量或有序分類變量,如本研究中的測量變量都是有序分類變量。  假設2:變量之間存在線性相關關係。  經分析,本研究數據符合假設1,那麼應該如何檢驗假設2,並進行主成分提取呢?
  • SPSS方法|主成分分析:降低指標維度,使複雜問題簡單化
    主成分分析是將多個指標化為少數幾個不相關的綜合指標,並對綜合指標按照一定的規則進行分類的一種多元統計分析方法。這種分析方法能夠降低指標維數,濃縮指標信息,將複雜的問題簡化,從而使問題分析更加直觀有效。目前,這種方法已經在經濟等領域中得到廣泛的應用,選好數據就可以利用SPSS進行主成分分析。本次數據選取陝甘寧蒙晉生態環境指標做生態環境評價分析。
  • 論文常用數據分析方法分類總結-4
    模型研究方法模型研究方法-SPSSAU模型研究:當需要研究多個變量之間的關係情況時,通常可構建統計模型用於分析及預測信息濃縮方法信息濃縮方法-SPSSAU當研究中包括有很多題目或很多變量時,可通過信息濃縮的方法,把數據濃縮成一個或多個變量
  • 主成分Logistic回歸模型在國債期貨跨品種套利中的應用
    在國內外的研究中,主成分分析法作為數據降維和避免多重共線性的常用工具,可以通過線性組合構建一個如(1)所示的三因子公式模型。本文主要從三個方面對現有方法進行改進:第一,單獨採用主成分分析對利差曲線擬合效果較差,僅能表示大致變化趨勢,不能滿足實際套利需要的預測精度。
  • 一文理清主成分分析思路
    主成分分析是一種濃縮數據信息的方法,可將很多個指標濃縮成綜合指標(主成分),並保證這些綜合指標彼此之間互不相關。可用於簡化數據信息濃縮、計算權重、競爭力評價等。一、研究背景某研究想要了解各地區高等教育發展水平的綜合排名。從中選取30個地區10個評價指標,使用主成分分析進行降維,並計算綜合得分。
  • spss主成分怎麼進行分析?spss主成分分析法步驟
    spss 這款軟體功能非常多哦,還可以分析主成分哦,但是很多朋友不知道spss主成分怎麼進行分析?小編下面準備了spss主成分分析法詳細步驟,大家安裝 詳細步驟一步步操作就知道spss主成分怎麼進行分析?
  • 運用sklearn進行線性判別分析(LDA)代碼實現
    學習之後可以對數據降維處理兩種實現方法進行對比:無監督的PCA技術:主成分分析PCA數據降維原理及python應用(葡萄酒案例分析)有監督的LDA技術:LDA線性判別分析原理及python應用(葡萄酒案例分析)二、定義分類結果可視化函數這個函數與上一篇文章 運用sklearn進行主成分分析(PCA)代碼實現 裡是一樣的,plot_decision_region
  • 深入剖析核主成分分析Kernel PCA體現的辯證法思想
    但是,你添加到數據集的維度越多,預測就可能越來越困難。特別地,在某一點之後,模型的性能會隨著特徵數量的增加而降低,甚至,會導致預測能力呈指數下降。這種現象通常被稱為"維度詛咒"。舉一個簡單的例子,假設你正在使用模型來預測25cm 2培養皿中大細菌的位置。在將粒子固定到最接近的平方釐米時,該模型可能相當準確。但是,假設現在只添加一個維度:使用3D燒杯而不是2D培養皿。
  • 單細胞數據分析神器——Seurat
    VizDimLoadings(pbmc, dims = 1:2, reduction = "pca")DimPlot(pbmc, reduction = "pca")DimHeatmap(pbmc, dims = 1, cells = 500, balanced = TRUE)2) 定義數據集的
  • 預測建模、監督機器學習和模式分類概覽
    機器學習和模式分類預測建模是建立一個能夠進行預測的模型的通用概念。通常情況下,這樣的模型包括一個機器學習算法,以便從訓練數據集中學習某些屬性做出這些預測。預測建模可以進一步分成兩個子集:回歸和模式分類。回歸模型基於變量和趨勢之間的關係的分析,以便做出關於連續變量的預測,如天氣預報的最高溫度的預測。