網(wǎng)站策劃模板怎樣做網(wǎng)站推廣
一、主成分分析
主成分分析(Principal Component Analysis, PCA)是一種常用的無(wú)監(jiān)督數(shù)據(jù)降維技術(shù),廣泛應(yīng)用于統(tǒng)計(jì)學(xué)、數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)等領(lǐng)域。它通過(guò)正交化線性變換將(高維)原始數(shù)據(jù)投影到一個(gè)新的坐標(biāo)系(低維空間),同時(shí)保留數(shù)據(jù)的主要變異信息,使得新坐標(biāo)系中的第一個(gè)坐標(biāo)軸(主成分1)上的方差最大,第二個(gè)坐標(biāo)軸(主成分2)上的方差次大,并且各個(gè)坐標(biāo)軸之間相互正交(即不相關(guān))。PCA 的目標(biāo)是通過(guò)保留數(shù)據(jù)的主要變異方向來(lái)減少數(shù)據(jù)的維度,同時(shí)盡可能少地丟失信息。
psych擴(kuò)展包能提供很豐富和有用的函數(shù),它的輸出結(jié)果也更接近商業(yè)統(tǒng)計(jì)分析軟件,如SAS和SPSS等,所使用的函數(shù)為principal()函數(shù)。
principal()函數(shù)
# 準(zhǔn)備數(shù)據(jù)(以 iris 數(shù)據(jù)集為例)
head(iris)
# 去除標(biāo)簽列,只保留數(shù)值列
iris_data <- iris[, 1:4]
head(iris_data)
?principal()函數(shù)的nfactors用來(lái)指定各種主成分,iris_data里面有4種變量,所以指定為4。
library(psych)
pcal_iris <- principal(iris_data, nfactors=4)
pcal_iris
從上面的結(jié)果可知,前三個(gè)成分(RC1+RC3+RC2)的累計(jì)解釋比例(Cumulative Proportion)為99%,前兩個(gè)成分(RC1+RC3)的累計(jì)解釋比例(Cumulative Proportion)為72%,所以選擇這兩個(gè)或三個(gè)主要成分是合適的。?
pcal_iris1 <- principal(iris_data, nfactors=3)
pcal_iris1
從上面結(jié)果可知,當(dāng)nfactors為3時(shí),累計(jì)比例能近似達(dá)到100%,說(shuō)明用三個(gè)主成分代替原有變量的信息是足夠的。?
二、因子分析
因子分析(Factor Analysis)是一種降維技術(shù),它用于研究變量之間的內(nèi)在關(guān)系,試圖通過(guò)少數(shù)幾個(gè)“潛在變量”(或稱“因子”)來(lái)解釋多個(gè)觀測(cè)變量之間的相關(guān)性,其核心思想是降維和結(jié)構(gòu)探測(cè)。這些潛在變量是不可直接觀測(cè)的,但可以通過(guò)它們對(duì)觀測(cè)變量的影響來(lái)推斷。因子分析在心理學(xué)、社會(huì)學(xué)、市場(chǎng)研究、生物學(xué)等多個(gè)領(lǐng)域都有廣泛應(yīng)用。
根據(jù)是否已知潛在結(jié)構(gòu),可以將因子分析分為探索性因子分析(Exploratory Factor Analysis,EFA)和驗(yàn)證性因子分析(Confirmatory Factor Analysis,CFA)。
1、注意事項(xiàng)
在進(jìn)行因子分析,需要注意以下兩個(gè)方面。
保證有足夠的樣本量。一般認(rèn)為樣本量小于50時(shí),不適合做因子分析;樣本量至少在100以上;樣本量達(dá)到1000時(shí),效果會(huì)比較好。而且,樣本量的選擇還受原始變量數(shù)量的影響,一般樣本量至少是原始變量數(shù)量的5倍以上,10倍更好。
原始變量之間應(yīng)該要有足夠的相關(guān)性。如果所有或者大部分原始變量是相互獨(dú)立或者相關(guān)系數(shù)都小于0.3,則不能從中提取公共因子,即數(shù)據(jù)不適合進(jìn)行因子分析。
原始變量之間的相關(guān)性可以使用KMO(Kaiser-Meyer-Oklin)檢驗(yàn)或Bartlett球形檢驗(yàn)。
因子分析可以使用psych擴(kuò)展包中的fa()函數(shù)。
fa(r, nfactors, n.obs, rotate, scores, fm)
- r:相關(guān)系數(shù)矩陣或者原始數(shù)據(jù)矩陣;
- nfactor:因子數(shù),默認(rèn)為1;
- n.obs:觀測(cè)數(shù),當(dāng)r為相關(guān)系數(shù)矩陣時(shí)需手動(dòng)輸入;
- rotate:設(shè)定因子旋轉(zhuǎn)的方法,默認(rèn)為promax(斜交旋轉(zhuǎn));還有 varimax(正交旋轉(zhuǎn))旋轉(zhuǎn)有助于更好地解釋因子結(jié)構(gòu)。
- scores:是否計(jì)算因子得分,默認(rèn)為FALSE,且要求r為原始數(shù)據(jù)矩陣;
- fm:因子提取方法,默認(rèn)為minres,一般選擇ml(最大似然法)。
2、分析步驟
下面使用R語(yǔ)言中的內(nèi)置數(shù)據(jù)集mtcars做演示:
2.1 準(zhǔn)備數(shù)據(jù)
library(psych)
library(GPArotation) # 支持因子旋轉(zhuǎn)
head(mtcars)
data <- mtcars[,c("mpg", "disp", "hp", "drat", "wt", "qsec")]
head(data)
2.2 檢查數(shù)據(jù)的適用性
檢驗(yàn)相關(guān)性:如果變量間相關(guān)性較低(絕對(duì)值<0.3),可能不適合因子分析
cor_data <- cor(data)
cor_data
從下面結(jié)果可知,絕大多數(shù)的絕對(duì)值都大于0.3。?
?KMO檢驗(yàn):KMO值>0.6表示數(shù)據(jù)適合做因子分析。
KMO(data)
從下面結(jié)果可知,Overall MSA=0.76>0.6。?
?Bartlett球形檢驗(yàn):?p<0.05時(shí)適合做因子分析。
cortest.bartlett(cor_data, n = nrow(data))
從下面結(jié)果可知,p=1.332068e-30 < 0.05。?
?2.3 確定因子數(shù)量
特征值(Eigenvalues):碎石圖,選擇特征值>1的因子
eigen_values <- eigen(cor_data)$values
plot(eigen_values, type = "b", main = "Scree Plot")
從以下結(jié)果可知,只能選擇2個(gè)因子。?
?
?平行分析(Parallel Analysis):
fa.parallel(cor_data, n.obs=nrow(data), fm="ml", fa = "fa", n.iter=100)
從以下碎石圖結(jié)果可知,建議取2個(gè)因子(虛線上面的小三角形個(gè)數(shù))?
2.4 進(jìn)行因子分析
使用正交旋轉(zhuǎn)。
# 數(shù)據(jù)為相關(guān)矩陣
# nfactors: 因子數(shù)
# 最大迭代次數(shù)為100次
# rotate: 旋轉(zhuǎn)方法("varimax"正交旋轉(zhuǎn),"oblimin"斜交旋轉(zhuǎn))
# fm: 因子提取方法("pa"主成分,"ml"極大似然)
result <- fa(r = cor_data, nfactors = 2, n.obs = nrow(data), n.iter=100, rotate = "varimax", fm = "ml")
result
從以下結(jié)果可知,2個(gè)因子一共解釋了100%的變異。?
使用斜交旋轉(zhuǎn)。
result <- fa(r = cor_data, nfactors = 2, n.obs = nrow(data), n.iter=100, rotate = "promax", fm = "ml")
result
?2.5 可視化結(jié)果
# 繪制因子載荷圖
fa.diagram(result)