Оценка распределения по данным


12

У меня есть образец данных , полученных в Rпути rnorm(50,0,1), поэтому данные , очевидно , берет на себя нормальное распределении. Однако Rне «знает» эту информацию о распределении данных.

Существует ли метод R, позволяющий оценить, из какого распределения исходит моя выборка? Если нет, я воспользуюсь этой shapiro.testфункцией и продолжу в том же духе.


Я не уверен, что узнаю результат этого вопроса. Это правда, что если у вас есть просто вектор чисел в R, с ним не так много метаданных, но почему это вас беспокоит? Зачем вам это нужно / что бы вы хотели сделать с этим? Предположим, что у него есть такое, это будет полезно только в том случае, если вы передадите этот вектор в функцию с конкретными методами для гауссовых данных против других. Я не знаю ни одного (хотя я вряд ли самый опытный пользователь R в мире).
gung - Восстановить Монику

Если вы просто хотите проверить, является ли какой-либо конкретный образец нормальным, тест Шапиро-Уилка - неплохой вариант (хотя стоит прочитать этот вопрос и ответы, которые там даны). Я могу видеть, как это могло произойти в симуляционном исследовании, но без подробностей об исследовании трудно дать полезный ответ.
gung - Восстановить Монику

Зачем вам нужно определить распределение данных? Автоматический распределительный выбор часто является привлекательной идеей, но это не делает его хорошей идеей.
Glen_b

Ответы:


21

Есть fitdistrфункция в пакете MASS или некоторые функции в пакете fitdistrplus . Вот несколько примеров из последнего.

require(fitdistrplus)

set.seed(1)
dat <- rnorm(50,0,1)
f1 <- fitdist(dat,"norm")
f2 <- fitdist(dat,"logis")
f3 <- fitdist(dat,"cauchy")

так например

> f1
Fitting of the distribution ' norm ' by maximum likelihood 
Parameters:
      estimate Std. Error
mean 0.1004483 0.11639515
sd   0.8230380 0.08230325

и вы можете увидеть графики с

plotdist(dat,"norm",para=list(mean=f1$estimate[1],sd=f1$estimate[2]))
plotdist(dat,"logis",para=list(location=f2$estimate[1],scale=f2$estimate[2]))
plotdist(dat,"cauchy",para=list(location=f3$estimate[1],scale=f3$estimate[2]))

так что это выглядит правдоподобно, как нормальное распределение

введите описание изображения здесь

но также, возможно, в качестве логистического распределения (вам понадобится большая выборка, чтобы различить их в хвостах)

введите описание изображения здесь

хотя с qqplot и просмотром CDF вы можете сказать, что это, вероятно, не дистрибутив Коши

введите описание изображения здесь


1
Спасибо Генри за прекрасный обзор. Меня спросили, есть ли какие-нибудь пакеты, которые принимают данные и выкладывают, какой дистрибутив (и параметры) выплевывает лучше всего. Вам известны какие-либо такие функции в любом из пакетов?
Роман Луштрик

3
fitdistпредоставляет оценки параметров. Есть некоторые намеки на то, что распределение могло бы быть от функций, таких как, descdist(dat, boot = 1000)но они также выиграли бы от большей выборки.
Генри

Ни одна из этих функций не решит проблему, которую вы поставили в своем последнем вопросе, когда образец не является репрезентативным.
Джон

1
@ Скотт Кайзер: я так не думаю. fitdist()это функция в пакете fitdistrplus, и это то, что я использовал. Между тем fitdistr(), это функция в пакете MASS, и она не будет работать здесь в этой форме.
Генри

1
У меня недостаточно очков, чтобы добавить это как комментарий, но просто как дополнительное примечание к информации, представленной в ветке выше, также можно просто позвонить plot(f1)вместо более запутанногоplotdist(dat,"norm",para=list(mean=f1$estimate[1],sd=f1$estimate[2]))
swestenb
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.