从主成分分析中提取标识符,其中R中缺少数据

时间:2013-08-20 05:10:54

标签: r pca

我在R中对缺失数据的载体进行主成分分析。我想从主成分中提取得分,并将这些值与原始帧中没有遗漏的观察值相匹配,但我无法弄清楚如何提取和匹配正确的标识符。例如:

x1 <- c(1,2,3,NA, 5,6,7)
x2 <- c(7,NA,6,NA, 4,3,2)

frame <- cbind(x1,x2)

pca_ob<- princomp(~frame)
pca_ob$score[,1]

这会产生以下输出:

    1         3         5         6         7 
  4.273146  2.104705 -0.715732 -2.125950 -3.536168 

我想将pca_ob $ score [,1]与基于标识符的原始框架绑定,并使用NA填充其余部分,以便生成以下矩阵:

    x1 x2 x3
1    1  7  4.273146
2    2  NA NA
3    3  6  2.104705
4    NA NA NA
5    5  4  -0.715732
6    6  3  -2.125950
7    7  2  -3.536168

这取得了第一组得分的输出,并将它们重新匹配到框架,其中NAs填充了没有pca分数的所有位置,并且对有分数的变量进行匹配。任何想法?感谢。

2 个答案:

答案 0 :(得分:2)

这感觉有点像黑客。那里可能有更好的解决方案。

这里的方法是创建一个最初充满NA的新对象,然后转向 将稀疏数据的名称转换为数字索引并使用它们进行分配。

> p1 <- pca_ob$scores[,1]
> p1
        1         3         5         6         7 
 4.273146  2.104705 -0.715732 -2.125950 -3.536168 
> z<-rep(NA, 7)
> z[as.numeric(names(p1))]<-p1
> z
[1]  4.273146        NA  2.104705        NA -0.715732 -2.125950 -3.536168

答案 1 :(得分:1)

我认为你正在寻找na.exclude

> princomp(~frame, na.action = na.exclude)$scores
     Comp.1      Comp.2
1  4.273146  0.24540178
2        NA          NA
3  2.104705 -0.30036459
4        NA          NA
5 -0.715732 -0.08790757
6 -2.125950  0.01832094
7 -3.536168  0.12454944

我在na.omit的帮助页面中找到了这一点(其中也涵盖了其他NA操作),这些操作是从princomp的{​​{1}}参数说明链接的。