У меня есть матрица, в которой каждая строка является образцом из распределения. Я хочу выполнить скользящее сравнение распределений с использованием ks.test
и сохранить статистику теста в каждом случае. Самый простой способ осуществить это концептуально это с петлей:Эффективное выполнение критерия распределения по строке
set.seed(1942)
mt <- rbind(rnorm(5), rnorm(5), rnorm(5), rnorm(5))
results <- matrix(as.numeric(rep(NA, nrow(mt))))
for (i in 2 : nrow(mt)) {
results[i] <- ks.test(x = mt[i - 1, ], y = mt[i, ])$statistic
}
Однако мои реальные данные имеют ~ 400 столбцов и строки ~ 300,000 для одного примера, и у меня есть много примеров. Поэтому я бы хотел, чтобы это было быстро. Тест Колмогорова-Смирнова - это не все, что математически сложно, поэтому, если ответ «реализует его в Rcpp
», я неохотно соглашусь с этим, но я был бы несколько удивлен - это уже очень быстро вычислить на одном пара в R.
методы Я пытался, но не смог получить работу: dplyr
с помощью rowwise/do/lag
, zoo
с помощью rollapply
(что я использую для создания дистрибутивов), а также заполнение data.table
в цикле (редактирование: этот работает, но он все еще медленный).
Вы действительно используете пакет 'KernSmooth'? 'ks.test' находится в пакете' stats'. – davechilders
Вы правы! Я использую KernSmooth, но не для этой функции - я использую ее для генерации дистрибутивов. Я отредактирую. – Ajar