Вместо использования irlba я обнаружил, что SVDmiss выполняет ту же функцию.Учитывая простую матрицу, такую как:
M = matrix(c(1,2,3,4,NA,6,7,8,9), nrow=3)
SVDmiss даст вам SVD и заполненную матрицу:
S = SVDmiss(M)
SVD хранится в $ svd как $ u, $d и $ v.
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)