首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从R中的“`fitdistrplus`”软件包中找到合适的值?

如何从R中的“`fitdistrplus`”软件包中找到合适的值?
EN

Stack Overflow用户
提问于 2018-12-22 22:07:59
回答 1查看 613关注 0票数 1

我现在使用包fitdistrplus来构造Gamma分布,我的问题是如何提取拟合的值来计算根均方误差?谢谢你的帮助。

代码语言:javascript
复制
library(fitdistrplus)
Sev = c(1.42,5.15,2.5,2.29,12.36,2.82,1.4,3.53,1.17,1.0,4.03,5.26,1.65,1.41,3.75,1.09,
    3.44,1.36,1.19,4.76,5.58,1.23,2.29,7.71,1.12,1.26,2.78,1.13,3.87,15.43,1.19,
    4.95,7.69,1.17,3.27,1.44,1.05,3.94,1.58,2.29,2.73,3.75,6.80,1.16,1.01,1.00,
    1.02,2.32,2.86,22.90,1.42,1.10,2.78,1.23,1.61,1.33,3.53,10.44)
fg <- fitdist(data = Sev, distr = "gamma", method = "mle") 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-22 22:30:56

这不是一个回归上下文,这里没有明确的拟合值。您可能想到的是估计密度值f(Sev;theta),其中θ是fg给出的估计。那将是

代码语言:javascript
复制
fit <- dgamma(Sev, fg$estimate[1], fg$estimate[2])

而且它是一个有意义且定义良好的对象。然而,在试图计算RMSE时,您会遇到麻烦:您将比较fit的内容是什么?你的样本密度值是多少?由于您处理的是一个连续的分布,您将不得不使用一些内核估计器,它同样具有一个参数-带宽!一件很粗鲁的事就是

代码语言:javascript
复制
den <- density(Sev)
sqrt(mean((den$y - dgamma(den$x, fg$estimate[1], fg$estimate[2]))^2))
# [1] 0.0146867

这是fg给出的MLE估计和核密度估计den之间的RMSE。使用np包可以比使用density.更好地估计密度

你可以做一些更明智的事情:比较你的数据和fg给出的数据的经验数据。前者由empCDF <- ecdf(Sev)给出,后者由pgamma给出,具有相应的参数值。然后,例如,科莫戈罗夫-斯米尔诺夫统计量将大致为

代码语言:javascript
复制
x <- seq(min(Sev), max(Sev), length = 10000)
max(abs(empCDF(x) - pgamma(x, fg$estimate[1], fg$estimate[2])))
# [1] 0.1725476

一种RMSE

代码语言:javascript
复制
sqrt(mean((empCDF(x) - pgamma(x, fg$estimate[1], fg$estimate[2]))^2))
# [1] 0.04585509

(使用optimintegrate可以使这两个统计数据更加精确)。

总之,由于这不是一个回归上下文,事情是不同的,并且,取决于您想要成为多严格,有许多可供探索的选择。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53899613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档