これは簡単な問題だと思われますが、問題を解決できません。PCAの出力から主成分を動的に選択する
IはrownamesたPCが さらなる操作のために最初の列を形成するよう今DFの列にrownames変換newiris<-iris[,1:4]
iris.norm<-data.frame(scale(newiris))
head(iris.norm)
Sepal.Length Sepal.Width Petal.Length Petal.Width
1 -0.8976739 1.01560199 -1.335752 -1.311052
2 -1.1392005 -0.13153881 -1.335752 -1.311052
3 -1.3807271 0.32731751 -1.392399 -1.311052
4 -1.5014904 0.09788935 -1.279104 -1.311052
5 -1.0184372 1.24503015 -1.335752 -1.311052
6 -0.5353840 1.93331463 -1.165809 -1.048667
# performed PCA now
pccomp <- prcomp(iris.norm)
summary(pccomp)
a <- summary(pccomp)
df<- as.data.frame(a$importance)
df <- t(df)
df
## Standard deviation Proportion of Variance Cumulative Proportion
## PC1 1.7083611 0.72962 0.72962
## PC2 0.9560494 0.22851 0.95813
## PC3 0.3830886 0.03669 0.99482
## PC4 0.1439265 0.00518 1.00000
以下として..then正規化されたセットの虹彩データの数値列をとっている
library(tibble)
library(dplyr)
df<-rownames_to_column(as.data.frame(df), var="PrinComp") %>% head
df
## PrinComp Standard deviation Proportion of Variance Cumulative Proportion
## 1 PC1 1.7083611 0.72962 0.72962
## 2 PC2 0.9560494 0.22851 0.95813
## 3 PC3 0.3830886 0.03669 0.99482
## 4 PC4 0.1439265 0.00518 1.00000
# Now will be selecting only those PCs where the cumulative proportion is say less than 96%
# subsetting
pcs<-as.vector(as.character(df[which(df$`Cumulative Proportion`<0.96),][,1])) # cumulative prop less than 96%
pcs
## [1] "PC1" "PC2"
今私たちは、上記の条件から得た第2主成分(兼プロパ< 0.96)から静的ベクトルスコアのPC用データフレームを作成してい
x1 <- pccomp$x[,1]
x2 <- pccomp$x[,2]
pcdf <- cbind(x1,x2)
head(pcdf)
## x1 x2
## [1,] -2.257141 -0.4784238
## [2,] -2.074013 0.6718827
## [3,] -2.356335 0.3407664
## [4,] -2.291707 0.5953999
## [5,] -2.381863 -0.6446757
## [6,] -2.068701 -1.4842053
私の問題は、上記のPCデータフレームを動的に作成するにはどうすればいいですか?
... fantastico ... tats watさんが探していた... – Nishant
wud luv to knw to apply the family functionsを使用して解決をさらに短縮できますか? – Nishant
「i」と言ってほしい主成分の数が分かっていると仮定すると、サプリー関数を簡単に適用してこれを行うことができます。私は私の答えの更新としてそれを置くでしょう。 – 9Heads