#r #kolmogorov-smirnov
#r #колмогоров-смирнов
Вопрос:
Чтобы найти наилучшее распределение, подходящее для набора данных, мне нужно передать компонент из символьного вектора возможных распределений (намеренно небольшого размера в этом примере) в функцию ks.test() R в качестве аргумента. Итак, моя проблема связана со статистикой и, в более общем плане, с программированием на R.
install.packages("ISLR")
library(ISLR)
attach(Credit)
distr.list <- c("pbeta","pbinom","pcauchy","pchisq")
p.val <- double(length(distr.list))
for (i in 1:length(distr.list))
{
p.val[i] <- ks.test(Income,distr.list[i])$p.value
}
Я получаю:
Error in y(sort(x), ...) : argument "shape1" is missing, with no default
Что это значит? В чем моя ошибка? Заранее большое спасибо.
sessionInfo()
R version 3.6.3 (2020-02-29)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 19041)
Комментарии:
1. Несмотря на ваше утверждение, я считаю, что это просто проблема кодирования R, а не статистический вопрос.
ks.test()
Функция ожидает ряд числовых значений и другой ряд числовых значений или именованное распределение, как и вы. В более позднем случае иногда требуется указать дополнительные параметры, как указано в документе:...: parameters of the distribution specified (as a character string) by ‘y’.
, что имеет место дляpbeta
поскольку он ожидаетshape1, shape2: non-negative parameters of the Beta distribution.
.
Ответ №1:
Используйте явные функции распределения, как в
distr.list <- list(
pbeta = function(x) pbeta(x, 1, 2),
pbinom = function(x) pbinom(x, 8, 3),
pcauchy = pcauchy,
pchisq = function(x) pchisq(x, 4)
)
p.val <- double(length(distr.list))
for (i in 1:length(distr.list))
{
p.val[i] <- ks.test(Income,distr.list[[i]])$p.value
}
# Optional:
names(p.val) <- names(distr.list)
Обратите внимание на [[
индексацию списка в цикле. Фактические значения параметров в этом примере являются чистыми измышлениями — вам нужно будет указать значения, подходящие для ваших целей и предположений.
Хотя это заставит ваш код выполняться, он не будет статистически корректным, но это другой набор проблем. В частности, какой смысл было бы использовать дискретные распределения, такие как биномиальные, непрерывные ограниченные распределения, такие как бета, и непрерывные неограниченные распределения, такие как все Коши, в качестве эталонных распределений для оценки данного набора данных?
Обширное сравнение (с помощью некоторого теста распределения, такого как KS) набора распределений с данными, как показано в этом коде, обычно не является хорошим подходом к подбору распределения. Подгонка распределения обычно заключается в оценке набора параметров для определения разумного диапазона распределений в семействе предполагаемых моделей распределения. То, как это делается, является важной частью того, что такое статистика.
Комментарии:
1. Большое спасибо, @whuber.