在使用 R、PCA 和绘制累积方差时
While using R, PCA and Plotting Cumulative Variance
我正在使用缩放数据集和主成分分析 (princomp) 使用 R。一切正常,但我想将主要成分的累积百分比方差绘制成整体图。摘要提供了此信息,但我还无法访问它。换句话说,我想 y='Cumulative Proportion' 来自 pca vs. 'component#'。
pca <- princomp(class5_subset_scaled)
summary(pca) # summary provides
Importance of components:
Comp.1 Comp.2 ...
Standard deviation 0.0513980 0.04482971 ...
Proportion of Variance 0.2089728 0.15897513 ...
Cumulative Proportion 0.2089728 0.36794789 ...
然而,当我看到这些名字时,我感到困惑...
names(pc)
[1] "sdev" "loadings" "center" "scale" "n.obs" "scores" "call"
我可以根据 pca 与 x='component#' 绘制 y='Cumulative Proportion' 吗?
你没有提供任何数据,所以我将用内部鸢尾花数据集来说明。摘要显示您想要获得的内容。
iPCA = princomp(iris[,1:4])
summary(iPCA)
Importance of components:
Comp.1 Comp.2 Comp.3 Comp.4
Standard deviation 2.0494032 0.49097143 0.27872586 0.153870700
Proportion of Variance 0.9246187 0.05306648 0.01710261 0.005212184
Cumulative Proportion 0.9246187 0.97768521 0.99478782 1.000000000
如您所见,princomp
中的 return 有一个名为 sdev
的组件,即 "Standard deviation"
iPCA$sdev
Comp.1 Comp.2 Comp.3 Comp.4
2.0494032 0.4909714 0.2787259 0.1538707
方差是标准差的平方。
iPCA$sdev^2
Comp.1 Comp.2 Comp.3 Comp.4
4.20005343 0.24105294 0.07768810 0.02367619
方差比例是方差除以所有方差之和。
iPCA$sdev^2 / sum(iPCA$sdev^2)
Comp.1 Comp.2 Comp.3 Comp.4
0.924618723 0.053066483 0.017102610 0.005212184
而Cumulative Proportion是方差比例的累加和
cumsum(iPCA$sdev^2 / sum(iPCA$sdev^2))
Comp.1 Comp.2 Comp.3 Comp.4
0.9246187 0.9776852 0.9947878 1.0000000
现在你有了累积比例值,只需绘制它们。
plot(cumsum(iPCA$sdev^2 / sum(iPCA$sdev^2)), type="b")
另外,请注意图上的比例。根据您打算如何处理情节,您可能真的想要:
plot(cumsum(iPCA$sdev^2 / sum(iPCA$sdev^2)), type="b", ylim=0:1)
我正在使用缩放数据集和主成分分析 (princomp) 使用 R。一切正常,但我想将主要成分的累积百分比方差绘制成整体图。摘要提供了此信息,但我还无法访问它。换句话说,我想 y='Cumulative Proportion' 来自 pca vs. 'component#'。
pca <- princomp(class5_subset_scaled)
summary(pca) # summary provides
Importance of components:
Comp.1 Comp.2 ...
Standard deviation 0.0513980 0.04482971 ...
Proportion of Variance 0.2089728 0.15897513 ...
Cumulative Proportion 0.2089728 0.36794789 ...
然而,当我看到这些名字时,我感到困惑...
names(pc)
[1] "sdev" "loadings" "center" "scale" "n.obs" "scores" "call"
我可以根据 pca 与 x='component#' 绘制 y='Cumulative Proportion' 吗?
你没有提供任何数据,所以我将用内部鸢尾花数据集来说明。摘要显示您想要获得的内容。
iPCA = princomp(iris[,1:4])
summary(iPCA)
Importance of components:
Comp.1 Comp.2 Comp.3 Comp.4
Standard deviation 2.0494032 0.49097143 0.27872586 0.153870700
Proportion of Variance 0.9246187 0.05306648 0.01710261 0.005212184
Cumulative Proportion 0.9246187 0.97768521 0.99478782 1.000000000
如您所见,princomp
中的 return 有一个名为 sdev
的组件,即 "Standard deviation"
iPCA$sdev
Comp.1 Comp.2 Comp.3 Comp.4
2.0494032 0.4909714 0.2787259 0.1538707
方差是标准差的平方。
iPCA$sdev^2
Comp.1 Comp.2 Comp.3 Comp.4
4.20005343 0.24105294 0.07768810 0.02367619
方差比例是方差除以所有方差之和。
iPCA$sdev^2 / sum(iPCA$sdev^2)
Comp.1 Comp.2 Comp.3 Comp.4
0.924618723 0.053066483 0.017102610 0.005212184
而Cumulative Proportion是方差比例的累加和
cumsum(iPCA$sdev^2 / sum(iPCA$sdev^2))
Comp.1 Comp.2 Comp.3 Comp.4
0.9246187 0.9776852 0.9947878 1.0000000
现在你有了累积比例值,只需绘制它们。
plot(cumsum(iPCA$sdev^2 / sum(iPCA$sdev^2)), type="b")
另外,请注意图上的比例。根据您打算如何处理情节,您可能真的想要:
plot(cumsum(iPCA$sdev^2 / sum(iPCA$sdev^2)), type="b", ylim=0:1)