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你可以找到关于包的视频(所有这些东西都是作者制作的)和真实的例子。
我最近对我的硕士论文进行了主成分分析,其中我有 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你可以找到关于包的视频(所有这些东西都是作者制作的)和真实的例子。