2013-12-02 4 views
0

У меня есть матрица R, размер которой составляет ~ 20 000 000 строк на 1000 столбцов. В первом столбце представлены числа, а остальные столбцы представляют вероятности многочленного распределения этих счетчиков. Иными словами, в каждой строке первый столбец равен n, а остальная часть столбцов k - это вероятности категорий k. Другое дело, что матрица является разреженной, а это означает, что в каждой строке есть много столбцов со значением 0.Ищете эффективный способ вычисления дисперсий многомерного распределения в R

Вот игрушка матрицей я создал:

mat=rbind(c(5,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1),c(2,0.2,0.2,0.2,0.2,0.2,0,0,0,0,0),c(22,0.4,0.6,0,0,0,0,0,0,0,0),c(5,0.5,0.2,0,0.1,0.2,0,0,0,0,0),c(4,0.4,0.15,0.15,0.15,0.15,0,0,0,0,0),c(10,0.6,0.1,0.1,0.1,0.1,0,0,0,0,0)) 

То, что я хотел бы сделать, это получить эмпирическая мера дисперсии подсчетов для каждой категории. Естественной вещью, которая приходит на ум, является получение случайных ничьей, а затем вычисление дисперсий над ними. Что-то вроде:

draws = apply(mat,1,function(x) rmultinom(samples,x[1],x[2:ncol(mat)])) 

Где говорят samples=100000

Тогда я могу запустить apply над draws для вычисления дисперсии.

Однако для моих реальных размеров данных это станет непомерно высоким, по крайней мере, с точки зрения ОЗУ. Является ли более эффективное решение в R этой проблеме?

+0

Пакет данных данных будет полезен для вас. Я не знаком с этим достаточно, чтобы предоставить решение. – rawr

ответ

1

Если все, что вам нужно, это дисперсия подсчетов, просто вычислите его немедленно, вместо того, чтобы возвращать промежуточные симулированные ничьи.

draws = apply(mat,1,function(x) var(rmultinom(samples,x[1],x[2:ncol(mat)]))) 
+0

Спасибо. Но я думаю, что, если мне также интересно, что другие статистические данные, такие как среднее значение, должны быть сохранены? – user1701545

+0

Вы можете вернуть все, что хотите от своей функции, вам просто нужно запрограммировать ее. Нет причин, по которым вы не могли бы вернуть список, содержащий как ковариационную матрицу средних, так и дисперсию. –

+0

Я не уверен, что понимаю, как будет вычислять дисперсию напрямую вместо сохранения ничьей, а затем вычислять дисперсию, сохраняющую ОЗУ. Разве это не сохранение всех ничьей, прежде чем вычислять их дисперсию? – user1701545

Смежные вопросы