我需要完成@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)
创建的条形图如下:
t = barplot(df$Freq, ylim = c(0,10))
axis(1, at=t, labels=df$Var1)
我还是R新手,所以如何使用fitdist
函数或其他东西在我的条形图上方创建一条线?
任何帮助都会非常感激。
更新
我已经找到了一些东西,但我不确定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)
然而,曲线并不平滑..
答案 0 :(得分:1)
包vcd
附带goodfit()
功能,它基本上完全符合您的要求:通过ML拟合模型,然后可视化观察和拟合的频率。默认情况下,采用平方根比例来更好地在较低的预期频率下产生偏差。此外,默认情况下,条形图悬挂在曲线上以对齐沿轴的所有偏差。此版本称为 rootogram (有关详细信息,请参阅我们最近在The American Statistician中的讨论)。虽然可以更改默认值以获得原始比例的常规条形图:
gf <- goodfit(df[, 2:1], "poisson")
plot(gf, type = "standing", scale = "raw")
plot(gf, type = "hanging", scale = "sqrt")
注意:另请注意,在您的代码版本中,您获得与MLE完全相同的4
,因为您只是在估算中使用$Freq
而不是$Var1
}。我的代码版本假定您的数据意味着有1次观察6次,观察7次等等。如果这不是您的意思,则可能需要调整代码。
答案 1 :(得分: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)