R irlba稀疏数据表示

时间:2019-03-08 16:58:16

标签: r

请告诉我我是否只是在做错此事...

我有一个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,。,空值等。我相信我以前从未见过“忽略此元素”的特殊记法。

1 个答案:

答案 0 :(得分:3)

我发现不是使用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%%诊断(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)