PCA 载荷结果的相同值

Same values for PCA Loadings results

我最近对我的硕士论文进行了主成分分析,其中我有 25 个网络数据集,格式化为图形并对每个图形应用 5 次测量。测量值被格式化为 table,其中行是数据集,列是结果,如下所示:

然后我缩放结果以确保它们以均值为零为中心(根据统计学习简介,G. James,2013),使用此函数:

dat <- data.frame(lapply(measures, function(x) scale(x, center = FALSE, scale = max(x, na.rm = TRUE)/100)))

此比例函数适用于每个度量的标准差。然后我使用 R 中的 princomp 函数应用 PCA,princomp(dat, cor = T, scores = T) 返回这些加载结果:

Loadings:
                Comp.1 Comp.2 Comp.3 Comp.4 Comp.5
Transitivity    0.585  0.412  0.246  0.136  0.640
Reciprocity     0.540 -0.145 -0.336 -0.750 -0.111
centralization -0.600  0.280        -0.582  0.469
density                0.327 -0.893  0.261  0.146
assortativity          0.790  0.159 -0.111 -0.581

                Comp.1 Comp.2 Comp.3 Comp.4 Comp.5
SS loadings       1.0    1.0    1.0    1.0    1.0
Proportion Var    0.2    0.2    0.2    0.2    0.2
Cumulative Var    0.2    0.4    0.6    0.8    1.0

请问是什么导致SS loadings和Proportion Variables的结果完全一样?我不确定这是否是我的数据、我正在使用的缩放方法的差异,或者这是否是我应该担心的事情。我看到有人在这个中有类似的结果,但没有讨论,所以也许这很正常?对此影响的任何解释将不胜感激。

双标图:

Screeplot 也没有多大意义,因为我预计会呈指数下降,我认为这是加载结果的反映。 屏幕截图:

我想您想回答的第一个问题是 SS 载荷是什么。这些是载荷的平方和 - 在几何上,它们是每个载荷向量长度的平方(向量的长度是分量平方和的平方根)。从技术角度来看,特征向量(或载荷)构成了 R5 的基础,并且这些载荷中的每一个都已经过归一化,因此元素的平方和(每个元素的长度的平方)等于 1。你可以这样想我想这是某种最佳实践。

总之,我不会太在意这个。

我建议根据以下第一原则实现结果。

#original data
df <- data.frame('transitivity'=c(34,8,8,37,15,29), 'reciprocity'=c(20, 34, 34, 25, 20, 7), 'centralization'=c(100, 99,99,100,99,99), 'density'=c(34, 7,7,2,3,0.7), 'assortativity'=c(-48, -53, -53, -33, 14, -45))
#scale according to the OP's procedure.
dat <- data.frame(lapply(df, function(x) scale(x, center = FALSE, scale = max(x, na.rm = TRUE)/100)))
#calculate correlation matrix.
cormat <- cor(dat)
#diagonalise
pca <- eigen(cormat)
#show that result is normalised. 
apply(pca$vectors, 2, function(x) sum(x^2)) #Result will sum to 1 regardless of whether we use margin 1 or 2. Neat excercise to prove why. 
#calculate % of var explained by each component. 
pc_var <- pca$values/5*100
barplot(pc_var)

结果的解释就交给你了!

建议你换个包,用FactoMiner。通过这种方式,您将绕过比例问题,因为函数 PCA 具有选项 scale.unit (一个布尔值,如果 TRUE - 默认设置的值 - 然后数据被缩放到单位方差)

下面是一个简单的例子

library(FactoMineR)
data(cars)
mtcars_pca<-cars_pca<-PCA(mtcars, scale.unit = TRUE)

通过这种方式,您可以检查此结果是来自您的数据还是错误。

Here there is the link of the personal web site of the package and here你可以找到关于包的视频(所有这些东西都是作者制作的)和真实的例子。