我想知道测量/参数对计算出的主要成分之一的贡献程度.
现实世界的描述:
问题:如何获得每台PC的贡献百分比(每个参数)?
我的期望:PC1由参数1的30%,参数2的50%,参数3的20%,参数4的0%和参数5的0%组成.PC2由...组成
一个有5个虚拟参数的例子:
a <- rnorm(10, 50, 20)
b <- seq(10, 100, 10)
c <- seq(88, 10, -8)
d <- rep(seq(3, 16, 3), 2)
e <- rnorm(10, 61, 27)
my_table <- data.frame(a, b, c, d, e)
pca <- princomp(my_table, cor=T)
biplot(pca) # same: plot(pca$scores[,1], pca$scores[,2])
pca
summary(pca)
Run Code Online (Sandbox Code Playgroud)
我的信息隐藏在哪里?
princomp()在R中使用函数时,遇到以下错误:"covariance matrix is not non-negative definite".
我认为,这是由于协方差矩阵中的某些值为零(实际上接近零,但在舍入期间变为零).
当协方差矩阵包含零时,是否有解决方法可以继续使用PCA?
[仅供参考:获得协方差矩阵是princomp()通话中的一个中间步骤.重现此错误的数据文件可以从这里下载 - http://tinyurl.com/6rtxrc3]
这应该是非常基本的,我希望有人可以帮助我.我通过以下调用运行了主成分分析:
pca <- princomp(....)
summary(pca)
Run Code Online (Sandbox Code Playgroud)
摘要pca返回此描述:
PC1 PC2 PC3
Standard deviation 2.8788 2.7862 2.1845
Proportion of Variance 0.1977 0.1549 0.07831
Run Code Online (Sandbox Code Playgroud)
查看显示每台PC解释的差异的第二行.如何从变量pca以编程方式从我的脚本中提取此向量.我做了足够的搜索,找不到答案.
我正在使用PCA来找出我的数据集中哪些变量是冗余的,因为它与其他变量高度相关.我在以前使用zscore标准化的数据上使用princomp matlab函数:
[coeff, PC, eigenvalues] = princomp(zscore(x))
Run Code Online (Sandbox Code Playgroud)
我知道特征值告诉我数据集的变化覆盖了每个主成分,并且该系数告诉我第i个原始变量中有多少是第j个主成分(其中i - 行,j - 列).
所以,我认为找出哪些变量出原始数据集是最重要的,这是我至少应该乘以系数_用矩阵的特征值 - _系数的值表示多少每个变量的每个组件都有和特征值告诉这有多重要组成部分是.所以这是我的完整代码:
[coeff, PC, eigenvalues] = princomp(zscore(x));
e = eigenvalues./sum(eigenvalues);
abs(coeff)/e
Run Code Online (Sandbox Code Playgroud)
但这并没有真正显示任何东西 - 我在下面的集合中尝试了它,其中变量1与变量2完全相关(v2 = v1 + 2):
v1 v2 v3
1 3 4
2 4 -1
4 6 9
3 5 -2
Run Code Online (Sandbox Code Playgroud)
但我的计算结果如下:
v1 0.5525
v2 0.5525
v3 0.5264
Run Code Online (Sandbox Code Playgroud)
这并没有真正显示任何东西.我希望变量2的结果表明它远不如v1或v3重要.我的哪一次出局是错的?
我希望能够使用其加载来构建主成分分析的分数,但我无法弄清楚princomp函数在计算数据集的分数时实际上在做什么.玩具示例:
cc <- matrix(1:24,ncol=4)
PCAcc <- princomp(cc,scores=T,cor=T)
PCAcc$loadings
Loadings:
Comp.1 Comp.2 Comp.3 Comp.4
[1,] 0.500 0.866
[2,] 0.500 -0.289 0.816
[3,] 0.500 -0.289 -0.408 -0.707
[4,] 0.500 -0.289 -0.408 0.707
PCAcc$scores
Comp.1 Comp.2 Comp.3 Comp.4
[1,] -2.92770 -6.661338e-16 -3.330669e-16 0
[2,] -1.75662 -4.440892e-16 -2.220446e-16 0
[3,] -0.58554 -1.110223e-16 -6.938894e-17 0
[4,] 0.58554 1.110223e-16 6.938894e-17 0
[5,] 1.75662 4.440892e-16 2.220446e-16 0
[6,] 2.92770 6.661338e-16 3.330669e-16 0
Run Code Online (Sandbox Code Playgroud)
我的理解是分数是负载和重新缩放的原始数据的线性组合.尝试"手":
rescaled <- t(t(cc)-apply(cc,2,mean))
rescaled%*%PCAcc$loadings
Comp.1 Comp.2 Comp.3 Comp.4
[1,] -5 -1.332268e-15 -4.440892e-16 0
[2,] …Run Code Online (Sandbox Code Playgroud) 我必须编写一个分类器(高斯混合模型),用于人类动作识别.我有4个视频数据集.我选择其中3个作为训练集,其中1个作为测试集.在我在训练集上应用gm模型之前,我在其上运行pca.
pca_coeff=princomp(trainig_data);
score = training_data * pca_coeff;
training_data = score(:,1:min(size(score,2),numDimension));
Run Code Online (Sandbox Code Playgroud)
在测试步骤中,我该怎么办?我应该在测试数据上执行新的princomp
new_pca_coeff=princomp(testing_data);
score = testing_data * new_pca_coeff;
testing_data = score(:,1:min(size(score,2),numDimension));
Run Code Online (Sandbox Code Playgroud)
或者我应该使用我为训练数据计算的pca_coeff?
score = testing_data * pca_coeff;
testing_data = score(:,1:min(size(score,2),numDimension));
Run Code Online (Sandbox Code Playgroud) 我有一个来自四个人群,四个治疗和三个重复的个体数据集.每个人只有一个人群,治疗和复制组合.我从每个人那里做了四次测量.我想针对每个群体,底物和重复组合对这些测量进行PCA.
我知道如何对所有个体进行PCA,我可以将数据集分成多个数据集,用于每个群体,底物和复制的组合,然后在每个新数据集上执行PCA.
如何在完整的数据集上进行PCA,获得单独的PC1,PC2 ...每种组合的种群,底物和最高效的复制结果?我考虑过将数据集转换为列表,但不确定如何将princomp函数应用于列表.我是在正确的轨道上吗?
样本数据:
TestData<- structure(list(Location = c("A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A",
"B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B",
"C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C",
"D", "D", "D", "D", "D", "D", "D", "D", "D", "D", "D", "D"),
Substrate = c("A", "B", "C", "D", "A", "B", "C", "D", "A", "B", "C", "D",
"A", "B", "C", "D", "A", "B", "C", "D", "A", "B", …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用princompR中的函数进行PCA分析.
以下是示例代码:
mydf <- data.frame (
A = c("NA", rnorm(10, 4, 5)),
B = c("NA", rnorm(9, 4, 5), "NA"),
C = c("NA", "NA", rnorm(8, 4, 5), "NA")
)
out <- princomp(mydf, cor = TRUE, na.action=na.exclude)
Error in cov.wt(z) : 'x' must contain finite values only
Run Code Online (Sandbox Code Playgroud)
我试图NA从数据集中删除它,但它不起作用.
ndnew <- mydf[complete.cases(mydf),]
A B C
1 NA NA NA
2 1.67558617743171 1.28714736288378 NA
3 -1.03388645096478 9.8370942023751 10.9522215389562
4 7.10494481721949 14.7686678743866 4.06560213642725
5 13.966212462717 3.92061729913733 7.12875100279949
6 -1.91566982754146 0.842774330179978 5.26042516598668 …Run Code Online (Sandbox Code Playgroud) 我刚刚开始了解PCA,我希望将它用于一个超过4,00,000行的巨大微阵列数据集.我的样本形式的列,以及基因/基因座形式的行.我确实通过了一些关于使用PCA的教程,并遇到了princomp()和prcomp()以及其他几个.
现在,正如我在此学到的那样,为了在双标图中绘制"样本",我需要将它们放在行中,并将基因/轨迹放在列中,因此我必须在使用它之前转置我的数据PCA.
但是,由于行超过4,00,000,我实际上无法将它们转换为列,因为列是有限的.所以我的问题是,有没有办法在我的数据上执行PCA,而不使用这些R函数进行转置?如果没有,你们中的任何人都可以建议我采取其他任何方式或方法吗?
princomp ×9
pca ×8
r ×7
matlab ×2
statistics ×2
dataframe ×1
eigenvector ×1
na ×1
transpose ×1
variance ×1