如果我只是做错了,请告诉我......
我有一个47,194行,27列数字矩阵,有一些缺失值。我正在尝试使用irlba来计算矩阵因子。在之前的所有R项目中,我都使用NA表示缺少数据。当我使用irlba时,我收到数据丢失的错误。我如何指出一个值丢失,irlba在分解矩阵时应该忽略它?
值得注意的是:irlba的文档不包含稀疏数据。每个元素都有一个值。有些值为零的示例,但我不能这样做,因为它会将值设为零,而不是忽略该值。
代码示例请求:
M = matrix(c(1,2,3,4,NA,6,7,8,9), nrow(3))
S = irlba(M,2)
我希望irlba将NA识别为缺失值并忽略它。相反,它失败并声明M包含缺失值。我已经尝试过null,。,空值等等......我相信有一个特殊的符号“忽略这个元素”,这是我以前从未见过的。
我没有使用irlba,而是发现SVDmiss执行相同的功能。给定一个简单的矩阵,例如:
M = matrix(c(1,2,3,4,NA,6,7,8,9), nrow=3)
SVDmiss将为您提供SVD和填充矩阵:
S = SVDmiss(M)
SVD以$ u,$ d和$ v的形式存储在$ svd中。
S$svd$u
[,1] [,2] [,3]
[1,] -0.4796712 0.77669099 0.4082483
[2,] -0.5723678 0.07568647 -0.8164966
[3,] -0.6650644 -0.62531805 0.4082483
S$svd$d
[1] 1.684810e+01 1.068370e+00 5.039188e-17
S$svd$v
[,1] [,2] [,3]
[1,] -0.2148372 -0.8872307 -0.4082483
[2,] -0.5205874 -0.2496440 0.8164966
[3,] -0.8263375 0.3879428 -0.4082483
我可以通过乘以因子来重新创建M:S $ svd $ u %% diag(S $ svd $ d)%% t(S $ svd $ v)[,1] [,2] [,3] [1,] 1 4 7 [2,] 2 5 8 [3,] 3 6 9
但是,我不需要那样做,因为我的SVDfill也给了我$ Xfill中的推算/估计矩阵
S$Xfill
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
此功能在SpatioTemporal包中。如果您尚未安装软件包,请使用以下命令安装软件包:
install.package('SpatioTemporal')
然后在需要时使用以下方式加载:
library(SpatioTemporal)