Колмогоров-Смирнов или критерий хи-квадрат для распределения? - PullRequest
10 голосов
/ 02 декабря 2010

Я использовал подгонку модели, чтобы подогнать отрицательное биномиальное распределение к моим дискретным данным.В качестве последнего шага, похоже, мне нужно выполнить тест Колмогрова-Смирнова, чтобы определить, хорошо ли модель соответствует данным.Все ссылки, которые я мог найти, говорят об использовании теста для обычно распределенных непрерывных данных.Может кто-нибудь сказать мне, если это может быть сделано в R для данных, которые обычно не распространяются и дискретны?(Даже тест хи-квадрат должен пройти, я думаю, но, пожалуйста, поправьте меня, если я ошибаюсь.)

ОБНОВЛЕНИЕ:

Итак, я обнаружил, что *В пакете 1015 * содержится функция goodfit, которую можно использовать для этой цели следующим образом:

library(vcd)

# Define the data
data <- c(67, 81, 93, 65, 18, 44, 31, 103, 64, 19, 27, 57, 63, 25, 22, 150,
          31, 58, 93, 6, 86, 43, 17, 9, 78, 23, 75, 28, 37, 23, 108, 14, 137,
          69, 58, 81, 62, 25, 54, 57, 65, 72, 17, 22, 170, 95, 38, 33, 34, 68,
          38, 117, 28, 17, 19, 25, 24, 15, 103, 31, 33, 77, 38, 8, 48, 32, 48,
          26, 63, 16, 70, 87, 31, 36, 31, 38, 91, 117, 16, 40, 7, 26, 15, 89,
          67, 7, 39, 33, 58)

gf <- goodfit(data, type = "nbinomial", method = "MinChisq") 
plot(gf)

Но после шага gf <- ... R жалуется, говоря:

Warning messages:
1: In pnbinom(q, size, prob, lower.tail, log.p) : NaNs produced
2: In pnbinom(q, size, prob, lower.tail, log.p) : NaNs produced
3: In pnbinom(q, size, prob, lower.tail, log.p) : NaNs produced

и когда я говорю plot, он жалуется:

Error in xy.coords(x, y, xlabel, ylabel, log) : 
  'x' is a list, but does not have components 'x' and 'y'

Я не уверен, что происходит, потому что, если я установлю data следующим:

data <- <- rnbinom(200, size = 1.5, prob = 0.8)

все работаетхорошо.Есть предложения?

1 Ответ

6 голосов
/ 02 декабря 2010

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

ks.test(data, pnbinom, size=100, prob=0.8)

Сравнивает эмпирическую кумулятивную функцию распределения data с указанной (может ли это иметь смысл, вероятно, зависит от ваших данных).Вам нужно будет выбрать параметры для size и prob исходя из теоретических соображений, тест недействителен, если вы оцените эти параметры на основе данных.

Возможно, ваша проблема с goodfit()с вашими данными, вы уверены, что это количество?barplot(table(data)) не похоже, что он приблизительно соответствует отрицательному биномиальному распределению, сравните, например, с barplot(table(rnbinom(200, size = 1.5, prob = 0.8)))

Наконец, я не уверен, подходит ли подход проведения теста с нулевой гипотезой после подгонки,Возможно, вы захотите взглянуть на количественные критерии подгонки, превышающие / основанные на $ \ chi ^ 2 $, из которых их много (RMSEA, SRMR, ...).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...