我很难使用fitdist
将分布拟合到我的样本数据中。
以下是代码:
fittrial <<- dnorm(severity,mean(severity),var(severity))
fitdist(fittrial,"normal")
我收到此错误:
fitdist出错(fittrial,&#34;正常&#34;): 必须定义正常函数
我已经在线查看并尝试过我能理解的一切。我真的很感激我能得到的任何帮助。
答案 0 :(得分:2)
此答案与使用fitdist
包中的fitdistrplus
有关,还有其他有用的替代方法,例如fitdistr
包中的MASS
。从fitdist
参数distr
的{{3}}开始:
一个字符串“名称”,用于为其命名 相应的密度函数
dname
,相应的分布 函数pname
和相应的分位数函数qname
必须 定义,或者直接定义密度函数。
错误消息的原因是,在R stats包中未定义名为“ normal”的发行版。没有名为dnormal
的函数,因此没有错误消息。
但是,有一个名为“ norm”的分布,正确的解决方案是将“ normal”更改为“ norm”,这映射到R stats函数dnorm
。
> fitdist(c(1,2,3), "normal")
Error in fitdist(c(1, 2, 3), "normal") :
The dnormal function must be defined
> fitdist(c(1,2,3), "norm")
Fitting of the distribution ' norm ' by maximum likelihood
Parameters:
estimate Std. Error
mean 2.0000000 0.4714045
sd 0.8164966 0.3333311
供参考,the documentation。
答案 1 :(得分:1)
主要问题是两个类似命名的函数在不同的包中混淆:MASS::fitdistr()
(为densfun
参数指定&#34;正常&#34;和fitdistrplus::fitdist()
(它没有)。有关如何使用fitdistrplus::fitdist()
的详细信息,请参阅@ Rakurai的答案;这个答案侧重于MASS::fitdistr()
。
另外:
dnorm()
将均值和标准差,而不是均值和方差作为参数。<<-
赋值运算符。severity <- 1:10
set.seed(101) ## for reproducibility
fittrial <- rnorm(length(severity),mean(severity),sd(severity))
library("MASS")
拟合模拟法线偏差:
fitdistr(fittrial,"normal")
## mean sd
## 6.2418957 1.6785684
## (0.5308099) (0.3753393)
适合原始数据:
fitdistr(severity,"normal")
## mean sd
## 5.5000000 2.8722813
## (0.9082951) (0.6422616)