Странное поведение при вычислении svd на ковариационной матрице: разные результаты между Microsoft R и vanilla R

#r #svd #microsoft-r

#r #svd #microsoft-r

Вопрос:

Я проводил некоторый анализ основных компонентов на своем macbook под управлением Microsoft R 3.3.0, когда получил несколько странных результатов. Перепроверив с коллегой, я понял, что результат функции SVD отличается от того, что я могу получить, используя vanilla R.

Это воспроизводимый результат, пожалуйста, загрузите файл (~ 78 Мб) здесь

С Microsoft R 3.3.0 (x86_64-apple-darwin14.5.0) я получаю:

 >> sv <- svd(Cx)
>> print(sv$d[1:10])

 [1] 122.73664 104.45759  90.52001  87.21890  81.28256  74.33418      73.29427  66.26472  63.51379
[10]  55.20763
 

Вместо этого на ванильном R (оба с R 3.3 и R 3.3.1 на двух разных машинах Linux):

 >> sv <- svd(Cx)
>> print(sv$d[1:10])

 [1] 122.73664  34.67177  18.50610  14.04483   8.35690   6.80784   6.14566
 [8]   3.91788   3.76016   2.66381
 

Этого не происходит со всеми данными, если я создаю какую-то случайную матрицу и применяю к ней svd, я получаю те же результаты. Итак, это похоже на своего рода численную нестабильность, не так ли?

ОБНОВЛЕНИЕ: я попытался вычислить SVD на той же матрице ( Cx ) на том же компьютере (macbook) с той же версией R, используя svd пакет, и, наконец, я получаю «правильные» числа. Тогда это, по-видимому, связано с реализацией svd, используемой Microsoft R Open.

ОБНОВЛЕНИЕ: Такое поведение происходит также в MRO 3.3.1

Комментарии:

1. С MRS 3.2.2 в Windows я получаю результат, соответствующий vanilla R. Возможно, дважды проверьте, что вы используете одни и те же данные на обеих машинах.

2. используйте начальное значение, а затем убедитесь, что вы используете одно и то же начальное значение на обеих машинах, чтобы помочь проверить

3. @HongOoi Я проверил, это те же данные. Возможно, это что-то связанное с библиотеками mac…

4. Я вижу, что Microsoft R на MAC использует платформу Apple Accelerate framework для BLAS, я бы хотел использовать 1 поток вместо 4, которые я на самом деле использую, но я не знаю, как его настроить.

5. Не могли бы вы опубликовать свое обновление в качестве ответа …?

Ответ №1:

Типичный пример образует плохо обусловленную матрицу. Есть некоторые SV, близкие к нулю, что делает разложение SVD численно чувствительным к различным реализациям SVD, что, вероятно, и является тем, что вы видите

Комментарии:

1. Возможно, но разница огромна, вы получаете разные основные компоненты на двух разных машинах…

Ответ №2:

Похоже, это своего рода ошибка, что подтверждено в Github microsoft-r-open. Они говорят, что это поведение расследуется и связано с библиотекой Accelerate в macOS.