我试图通过求解两个联立方程来估计威布尔分布的参数: F(Q1)= 0.25,F(Q3)= 0.75。 代数地,我知道答案应该是: 形状参数a = 0.8038,比例参数b = 1889 但是,无论我把它作为我的起始值p,我得到了完全不同的答案。 以下为什么不能正常工作?
# Sample quartiles
Q1<-401
Q3<-2836.75
# function: |F(Q1)+F(Q3)-1| so perfect fit should = 0
f<-function(params) {
abs(pweibull(Q1,params[1],params[2])+pweibull(Q3,params[1],params[2])-1)
}
# minimise function, using starting values a=1, b=2000
p<-c(1,2000)
estimates<-nlm(f,p); estimates
(我试图在基础R中执行此操作,不需要额外的包。)
答案 0 :(得分:0)
需要进行两次修改。第一个是由评论暗示的,而不是使用两个方程式,我只使用了两个abs()项。但是在我添加typsize
- 参数之前,这并没有产生准确的结果:
f<-function(params) {
abs(pweibull(Q1,params[1],params[2])-0.25) + abs(pweibull(Q3,params[1],params[2])-0.75)
}
p<-c(shape=1, scale=2000)
estimates<-nlm(f,p, fscale=.1, typsize=c(1,1500) ); estimates
#####------
$minimum
[1] 5.548144e-07
$estimate
[1] 0.8037664 1889.4379691
$gradient
[1] -1.936062e-01 5.132625e-05
$code
[1] 2
$iterations
[1] 13
fscale
参数默认值似乎没什么帮助。我之前的大多数努力都返回了一个代码3,意思是:“最后一个全局步骤未能找到低于估计值的点。估计是函数的近似局部最小值或者steptol太小。”