У меня есть матрица 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 этой проблеме?
Пакет данных данных будет полезен для вас. Я не знаком с этим достаточно, чтобы предоставить решение. – rawr