【问题标题】:R irlba sparse data representationR irlba 稀疏数据表示
【发布时间】:2019-03-08 16:58:15
【问题描述】:

如果我做错了,请告诉我...

我有一个 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、.、空值等……我相信有一个我以前没有见过的“忽略这个元素”的特殊符号。

【问题讨论】:

  • 你被匿名投票了,这很遗憾,因为这看起来像是一个有效的问题。也就是说,如果您可以发布您正在使用的实际代码,那仍然会很好——精简为一个暴露问题的最小示例。这使人们可以解决您的问题。
  • @KonradRudolph 完成。我知道这个例子太小了,不足以证明 irlba 优于 svd,但实际数据集要大得多。
  • 最好在Cross Validated 上询问?如果irlba 没有提供处理缺失数据的方法,我的猜测是您更多地关注的是统计问题(如何正确处理这些缺失数据)而不是编程问题?
  • @divibisan 我扫描了那里的问题和答案,发现 SVDmiss 执行与 irlba 相同的功能,但速度稍慢。但是,它确实将 NA 视为缺失值并忽略它。所以,我只是将使用 irlba 的表单切换到 SVDmiss,它现在可以工作了。我将把它作为答案发布,因为我注意到这里的其他问题基本上都在问同样的问题:如果我缺少数据,我如何获得 SVD。

标签: r


【解决方案1】:

我发现 SVDmiss 执行相同的功能,而不是使用 irlba。给定一个简单的矩阵,如:

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

这个函数在包 SpaatioTemporal 中。万一您还没有安装软件包,请使用以下命令安装软件包:

install.package('SpatioTemporal')

然后在需要时加载它:

library(SpatioTemporal)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多