R: Наложение распределения Пуассона на гистограмму данных - PullRequest
1 голос
/ 20 апреля 2020

У меня есть набор данных, где наблюдения имеют широкий диапазон (от 10 000 до 21 000 000). Я пытаюсь наложить распределение Пуассона на эти данные, но распределение выводится неправильно. До сих пор я пытался использовать этот код:

dat <- read.csv('data.csv', TRUE, ',')

hist(dat,
     main = 'Global Sales of Games in 2010',
     xlab = 'Amount of Copies Sold',
     ylab = 'Counts',
     col = 'palegreen1',
     breaks = 100
)

lam = mean(dat)
t = seq(min(dat), max(dat), length.out = 10000)
lines(t, dpois(t, lambda = lam), col='red', lwd=3)

Я также пробовал это делать, генерируя данные из распределения Пуассона с использованием rpois, но все еще сталкивался с той же проблемой.

simulated = rpois(length(dat), lam)
simulated_lam = mean(simulated)
a = seq(min(simulated), max(simulated), length.out = 10000)
hist(simulated)
lines(a, dpois(a, lambda = simulated_lam), col='red', lwd=3)

Я ссылался на этот вопрос здесь, но не могу дать такие же результаты. R: Наложение распределения Пуассона по гистограмме данных

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

Заранее спасибо.

1 Ответ

0 голосов
/ 20 апреля 2020

Ваш код выдаёт несколько предупреждений, так как вы используете dpois(t, lambda = lam) с t, который не является целым числом (вы можете увидеть эти предупреждения, набрав warnings() в консоли). Изменяя length.out = 10000 на by = 1, вы заставляете t состоять только из целых чисел, предполагая, что ваш dat содержит только целые числа.

Ниже я сделал пример, который работает (в котором dat случайно генерируется мной). Обратите внимание, что я умножил вызов dpois() на размер набора данных до go от плотности к числу.

dataset_size <- 100
dat <- rpois(dataset_size, lambda = 10)

hist(dat,
     main = 'Global Sales of Games in 2010',
     xlab = 'Amount of Copies Sold',
     ylab = 'Counts',
     col = 'palegreen1',
     breaks = 100
)

lam = mean(dat)
t = seq(min(dat), max(dat), by = 1)
lines(t, dpois(t, lambda = lam)*dataset_size, col='red', lwd=3)

enter image description here

...