R語言主成分分析詳細解析

一、主成分分析介紹

主成分分析是一種常用的數據降維算法,它可以把多個相關性很高的指標(變量)轉化為少數幾個無關的主成分。這些主成分之間兩兩無關,且能夠解釋原始指標的大部分信息。在實際應用中,主成分分析具有很高的實用價值,比如可以用於降低數據的複雜度、提高數據分析的效率、發現數據的隱藏規律等。

R語言是一種功能強大的開源計算機語言,人性化的語法和豐富的統計分析函數庫使其成為數據分析師最喜歡的工具之一。R語言主成分分析函數prcomp()和princomp()可以實現主成分分析,下面將詳細介紹其使用方法。

二、prcomp()函數詳解

prcomp()函數可以計算帶有奇異值分解的主成分分析,並返回與原始數據相同規模的主成分分析數據集。下面我們以iris數據集為例,來說明如何使用prcomp()函數實現主成分分析:

data(iris)
iris_pca <- prcomp(iris[, 1:4], center = TRUE, scale. = TRUE)
summary(iris_pca)

上述代碼中,我們使用data()函數導入R語言內置的iris數據集,然後使用prcomp()函數對前4列數據進行主成分分析。其中center=TRUE表示將每個變量的均值中心化為0,scale.=TRUE表示給每個變量進行標準化處理。到這裡,我們已經得到了主成分分析結果,接下來用summary()函數來查看主成分分析結果的摘要:

Importance of components:
                          PC1    PC2     PC3     PC4
Standard deviation     1.7084 0.9560 0.38309 0.14393
Proportion of Variance 0.7296 0.2285 0.03669 0.00518
Cumulative Proportion  0.7296 0.9581 0.99480 1.00000

從結果可以看出,第一主成分(PC1)可以解釋原始數據集中約73%的方差,第二主成分(PC2)可以解釋約23%的方差,第三主成分(PC3)僅能解釋約3.7%的方差,而第四主成分(PC4)的解釋能力更加弱,只能解釋約0.5%的方差。因此,在實際應用中一般只考慮前k個主成分,其中k是自己事先設定的,可以根據累計貢獻率和業務需求進行調整。

三、princomp()函數詳解

princomp()函數和prcomp()函數在功能上是相同的,都可以實現主成分分析。但兩者的區別在於princomp()函數計算的是未經過奇異值分解的主成分分析,而且每個主成分分析的方差總和為n-1,而不是等於樣本個數。下面我們以iris數據集為例,使用princomp()函數進行主成分分析:

data(iris)
iris_pca <- princomp(iris[, 1:4], cor = TRUE, scores = TRUE)
summary(iris_pca)

此處將參數cor設置為TRUE,表示使用相關係數矩陣進行主成分分析。scores參數設置為TRUE,表示輸出主成分分析後的主成分得分矩陣。運行後的結果如下:

Importance of components:
                         Comp.1   Comp.2   Comp.3   Comp.4
Standard deviation     1.70836 0.956049 0.383088 0.143926
Proportion of Variance 0.72962 0.228507 0.036247 0.005618
Cumulative Proportion  0.72962 0.958127 0.994374 1.000000

Loadings:
             Comp.1 Comp.2 Comp.3 Comp.4
Sepal.Length  0.521 -0.377  0.719  0.261
Sepal.Width  -0.269 -0.923 -0.244 -0.124
Petal.Length  0.580 -0.024 -0.142 -0.801
Petal.Width   0.565 -0.069 -0.634  0.523

               Comp.1   Comp.2   Comp.3   Comp.4
Sepal.Length  0.89767 -0.39874 -0.07856  0.04597
Sepal.Width  -0.38624 -0.23632 -0.27045 -0.85970
Petal.Length  0.00000  0.27492 -0.92792  0.24178
Petal.Width   0.00000  0.85391  0.24178  0.46168

從結果可以看出,princomp()函數計算出的主成分結果和prcomp()函數基本一致,僅在方差和主成分得分的計算方式上略有差異。

四、主成分分析可視化

主成分分析不僅可以用於降維和發現隱藏規律,還可以用於可視化。我們可以將主成分分析後的前兩個主成分作為x軸和y軸來畫出散點圖,觀察數據的分布情況。下面我們以iris數據集為例,來說明如何實現主成分分析的可視化:

data(iris)
iris_pca <- prcomp(iris[, 1:4], center = TRUE, scale. = TRUE)
plot(iris_pca$x[,1:2], col = iris$Species)
legend("topright", levels(iris$Species), col=c(1:3), pch=1)

在上述代碼中,我們先使用prcomp()函數對iris數據集進行主成分分析,並將前兩個主成分得分作為x軸和y軸。然後使用plot()函數畫出散點圖,其中col參數指定了花的類型(樣本數據),legend()函數用於添加標註。運行上述代碼,我們可以得到如圖所示的散點圖:

五、總結

本文主要介紹了R語言主成分分析prcomp()和princomp()函數的使用方法,並且以iris數據集為例詳細解析了其用法,包括主成分分析結果摘要、主成分分析的可視化等,希望對廣大數據分析愛好者有所幫助。

原創文章,作者:AYKTY,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/332053.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
AYKTY的頭像AYKTY
上一篇 2025-01-20 14:11
下一篇 2025-01-20 14:11

相關推薦

  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演着非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28
  • Python語言設計基礎第2版PDF

    Python語言設計基礎第2版PDF是一本介紹Python編程語言的經典教材。本篇文章將從多個方面對該教材進行詳細的闡述和介紹。 一、基礎知識 本教材中介紹了Python編程語言的…

    編程 2025-04-28
  • Python語言實現人名最多數統計

    本文將從幾個方面詳細介紹Python語言實現人名最多數統計的方法和應用。 一、Python實現人名最多數統計的基礎 1、首先,我們需要了解Python語言的一些基礎知識,如列表、字…

    編程 2025-04-28
  • Python作為中心語言,在編程中取代C語言的優勢和挑戰

    Python一直以其簡單易懂的語法和高效的編碼環境而著名。然而,它最近的發展趨勢表明Python的使用範圍已經從腳本語言擴展到了從Web應用到機器學習等廣泛的開發領域。與此同時,C…

    編程 2025-04-28
  • Python基礎語言

    Python作為一種高級編程語言擁有簡潔優雅的語法。在本文中,我們將從多個方面探究Python基礎語言的特點以及使用技巧。 一、數據類型 Python基礎數據類型包括整數、浮點數、…

    編程 2025-04-28

發表回復

登錄後才能評論