Как использовать пакет bigstatsr R с двумя наборами данных для оценки параметров?

У меня есть независимые и зависимые наборы данных. Я хочу проверить все возможные отношения между зависимыми и независимыми переменными. В моем предыдущем посте (Как реплицировать функцию с помощью mapply с несколькими аргументами для расчета мощности метода? ) Я хотел провести анализ мощности с использованием данных моделирования. Теперь я хочу проанализировать реальные данные, используя ту же функцию. Проблема в том, что test_function потребовалось больше времени, поскольку мой набор данных большой (размер каждого набора данных превышает 10000 X 40000). Кроме того, я хочу использовать параллельные вычисления для ускорения вычислений. Я обнаружил, что пакет bigstatsr ( https://privefl.github.io/bigstatsr/index.html) может обрабатывать матрицы, слишком большие для размещения в памяти. Более того, я хочу избежатьexpand.grid, поскольку он требует больших вычислительных ресурсов для обработки больших данных. Я не нашел ни одной публикации, в которой можно было бы использовать два набора данных одновременно с использованием пакета bigstatsr и параллельно оценивать параметры. Примеры наборов данных и код приведены ниже:

      
# dependent dataset
test_A <- data.frame(matrix(rnorm(100), nr=10, nc=10))
# independent dataset
test_B <- data.frame(matrix(sample(c(0,1,2), 500, replace = TRUE), nr=50, nc=10))
# Find all combination using dependent and independe datasets's variables
A_B_pair <- subset(expand.grid(c1=names(test_A), c2=names(test_B), 
                               stringsAsFactors = FALSE))
# Main function to estimate the parameter and p-values 
test_function <- function(test_A, test_B, x,y){
  c1 <- test_A [[x]]
  c2 <- test_B[[y]]
  Data <- data.frame(1, XX=c1, YY=c2)
  
  model_lm <- lm(YY ~ XX, Data)
  est_lm <- as.numeric(model_lm$coefficients)[2]
  pvalue_lm <- as.numeric(summary(model_lm)$coeffi[,4][2])
  
  return(unlist(data.frame(lm.estimator = est_lm, lm.pvalue =pvalue_lm)))
}
# Final output
output <- mapply(test_function, MoreArgs = list(test_A, test_B),
                 x = A_B_pair$c1, y = A_B_pair$c2)

Как я могу применить bigstatsr и параллельно вычислить эту функцию для получения выходных данных? Большое вам спасибо за ваши усилия и помощь.

1 ответ

Я не думаю, что здесь действительно проблема размера (в плане памяти), а просто проблема времени вычислений.

Я думаю, вы просто хотите провести однофакторное тестирование. Для этого вы можете использовать функцию big_univLinReg:

      library(bigstatsr)
X <- as_FBM(test_B)
NCORES <- nb_cores()

k <- 1  ## replace by loop here
stats <- big_univLinReg(X, test_A[[k]], ncores = NCORES)
pval <- predict(stats, log10 = FALSE)

Эта функция должна быть довольно быстрой и давать вам все коэффициенты для всех переменных в test_B. Затем вам нужно только перебрать переменные в test_A.

Другие вопросы по тегам