2016-10-13 2 views
-1

Мне нужно сделать именно то, что @interstellar задал здесь Fit poisson distribution to data, но в среде R (а не в Matlab).Установите распределение пуассонов на данные (гистограмма + строка)

Итак, я создал планшет с моими наблюдаемыми значениями, и мне просто нужно установить распределение пуассонов на нем.

Вот мои данные:

df = read.table(text = 'Var1 Freq  
    6 1 
    7 2 
    8 5 
    9 7 
    10 9 
    11 6 
    12 4 
    13 3 
    14 2 
    15 1', header = TRUE) 

barplot создана следующая:

t = barplot(df$Freq, ylim = c(0,10)) 
axis(1, at=t, labels=df$Var1) 

Я еще новичок в R, так как я мог бы использовать fitdist функцию или что-то еще, чтобы создать линию над моим адвокатским сословием?

Любая помощь была бы действительно оценена.

UPDATE

я выработал что-то, но я не уверен, что 100%, если это правильно:

#create barplot 
t = barplot(df$Freq, ylim = c(0,10)) 
axis(1, at=t, labels=df$Var1) 

#find lambda value from my data 
pois = fitdist(df$Freq, 'pois', method = 'mle') 
print(pois) 

#result 
Fitting of the distribution ' pois ' by maximum likelihood 
Parameters: 
     estimate Std. Error 
lambda  4 0.6324555 

#create 10 values from a real poisson distribution 
dist = dpois(1:10, lambda = 4) 

#multiply them by `sum(df$Freq)` in order to scale them to the barplot 
dist = dist * sum(df$Freq) 

#add the line plot to the original barplot 
lines(dist, lwd = 2) 

result

Однако кривая не является гладкой ..

ответ

0
#fit poisson distr to tbl$Freq data 
poisson = fitdist(df$Freq, 'pois', method = 'mle') 
print(poisson) 

#plot 
plot(df$Var1, df$Freq, type = 'h', ylim = c(0,10), ylab = 'No. of years with x events', 
    xlab = 'No. of events in a year', main = 'All 13-day events with Poisson') 


dist = dpois(1:10, lambda = 4) 
dist = dist * sum(df$Freq) 
dist = as.data.frame(dist) 
dist$Var1 = df$Var1 

lines(dist$Var1, dist$dist, lwd = 2) 
0

Пакет vcd прилагается к goodfit(), которая по сути делает именно то, что вы просите: подгоните модель по ML, а затем визуализируйте наблюдаемые и установленные частоты. По умолчанию используется квадратная шкала, чтобы лучше выявлять отклонения при более низких ожидаемых частотах. Кроме того, по умолчанию полосы висят от кривой, чтобы выровнять все отклонения вдоль оси. Эта версия называется rootogram (подробнее см. Нашу недавнюю дискуссию в The American Statistician). Значения по умолчанию можно изменить, хотя, чтобы получить постоянную barplot на сырым шкале:

gf <- goodfit(df[, 2:1], "poisson") 
plot(gf, type = "standing", scale = "raw") 
plot(gf, type = "hanging", scale = "sqrt")      

rootogram

Внимание: отметить также, что в вашей версии кода вы получаете точно 4 как ОМП, потому что вы просто используйте $Freq в оценке, но не $Var1. Моя версия кода предполагает, что ваши данные должны иметь 1 наблюдение за 6, 2 наблюдениями 7 и т. Д. Возможно, этот код необходимо адаптировать, если это не то, что вы имеете в виду.