Я столкнулся с большой проблемой при вычислении cumsum()
вектора.Вектор имеет длину ~ 10000 элементов, и, начиная с 2000, значения уменьшаются до 1e-310.Чтобы дать представление о распределении, с которым я имею дело, вот сюжет.
![sorted distribution](https://i.stack.imgur.com/yDcyo.jpg)
Когда я пытаюсь применить cumsum()
, я получаю многоте, что невозможно, и минимальное значение около 10 ^ -2.Я портирую код, который мы разработали в Matlab, и, конечно, никаких проблем там нет.По какой-то причине у R, похоже, возникают проблемы при работе с такими маленькими числами, что применение стандартных функций возвращает неожиданные и неправильные результаты.
Я искал переполнение стека и обнаружил следующие два сообщения:
- R: Точность числа, как предотвратить округление?
- Управление количеством десятичных цифр в выводе на печать в R
К сожалению, никто из них не помог мне.
Я также безуспешно пытался использовать функцию Rcpp cumsum()
.Я предполагаю, что проблема напрямую связана с точностью моего объекта матрицы.
Я даже не уверен, как воспроизвести это, поэтому я рад поделиться своей матрицей 9137 x 2.Я полностью застрял с этим.
С нетерпением жду ваших отзывов, ребята!
Спасибо
Обновление
Вот пример из 100 элементов из моей матрицы:
y <- sample( BestPair, 100 )
dput( y )
c(7.74958917761984e-289, 4.19283869686715e-319, 1.52834266884531e-319,
2.22089175309335e-297, 4.93980517192742e-298, 1.37861543592719e-301,
1.47044459800611e-317, 6.49068860911021e-319, 1.83302927898675e-305,
8.39514422452147e-312, 2.88487711616485e-300, 0.000544461085044608,
0.000435738736513519, 1.35649914843994e-309, 4.30826678309556e-310,
2.60728322623343e-319, 0.000544460617547516, 5.28815204888643e-299,
0.00102710912090133, 0.00198425117943324, 1.99711912768841e-304,
8.34594499227505e-306, 7.42055412763084e-300, 5.00039717762739e-311,
1.8750204972032e-305, 1.06513324565406e-310, 5.00487443690634e-313,
3.4890421843663e-319, 7.48945537292364e-310, 1.92948452007191e-310,
1.19840058299897e-305, 0.000532438536688165, 6.53966533658245e-318,
0.000499821676385928, 2.02305525482572e-305, 5.18981575493413e-306,
8.82648276295387e-320, 7.30476057376283e-320, 1.23073492422415e-291,
4.1801705284367e-311, 5.10863383734203e-318, 1.12106998189819e-298,
9.34823978505262e-297, 0.00093615863896107, 5.3667092510628e-311,
3.85094526994501e-319, 1.3693720559483e-313, 3.96230943126873e-311,
2.03293191294298e-319, 2.38607510351427e-291, 0.000544460855322345,
1.74738584846597e-310, 1.41874408662835e-318, 5.73056861298345e-319,
3.28565325597139e-302, 3.5412805275117e-310, 1.19647007227024e-302,
1.71539915106223e-305, 2.10738303243284e-311, 6.47783846432427e-313,
5.0072402480979e-303, 7.7250380240544e-303, 9.75451890703679e-309,
0.000533945755492525, 0.00211359631486468, 1.6612179399628e-312,
0.000521804571338402, 4.12194185271951e-308, 1.12829365794294e-313,
8.89772702908418e-319, 5.092756929242e-312, 7.45208240537024e-311,
6.60385177095196e-298, 0.000544461017733648, 1.62108867188263e-318,
3.95135528339003e-309, 1.8792966379072e-292, 5.98494480819088e-295,
0.00051614492665081, 2.25198141886419e-300, 7.97467977809552e-305,
1.78098757558338e-311, 1.66946525895122e-313, 0.000778442249425894,
6.58100207570114e-312, 0.00120733768329515, 3.44432924341767e-319,
6.38151190880713e-313, 7.1129669216109e-300, 4.11319531475755e-319,
7.21747577033383e-304, 1.48709312807403e-318, 1.39519898470211e-303,
4.58585270141592e-312, 2.16309869205282e-295, 7.55248601743105e-314,
3.16365476892733e-310, 1.96961507010996e-305, 3.21125377499206e-318,
3.66277772043574e-304)
Обновление 2
Видимо, наложение следующего:
BestPair[ BestPair < .Machine$double.eps ] <- 0
не решает проблему.Все еще находят странные результаты от cumsum()
.Вот сюжет, чтобы лучше объяснить, с чем я имею дело.Совокупный проб.имеет эту форму, потому что BestPair
отсортировано по убыванию.Я хочу иметь 1 из cumsum()
поверх моего вектора.
![enter image description here](https://i.stack.imgur.com/bpFpP.jpg)
Вот краткий обзор ob
> summary(CumProb)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.0250 1.0000 1.0000 0.9685 1.0000 1.0000
Обновление 3. Результаты Matlab
Здесьрезультат, вычисленный с помощью Matlab.Как видите, я могу получить довольно приличный дистрибутив, которого я не могу достичь в R, даже если я обрезал исходную матрицу.
![enter image description here](https://i.stack.imgur.com/d5dQj.png)