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