r - 寻找 Weibull 分布的参数
问题描述
我试图通过求解两个联立方程来估计 Weibull 分布的参数: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 中执行此操作,没有额外的包。)
解决方案
需要进行两次修改。第一个是由评论暗示的,但我没有使用两个方程,而是简单地使用了两个 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
参数 default 似乎没有多大帮助。我之前的大部分努力都是返回一个代码 3,这意味着:“最后一个全局步骤未能找到低于估计值的点。估计值是函数的近似局部最小值,或者 steptol 太小了。”
推荐阅读
- javascript - 在 chrome 浏览器中调试时无法访问顶级模块变量
- r - 在R闪亮中将列类型从因子更改为整数
- javascript - 正则表达式匹配在搜索中省略第一个字符
- javascript - 如何使用 d3 绘制连续线而无需单击并拖动鼠标,而只需使用 mouseover 事件?
- spring-boot - Spring Boot 的 ResourceNotFoundException 在哪里?
- php - 更新表错误?(SQLSTATE[HY000]:一般错误)
- java - 在 Java 中读取 Excel 文件的开源版本
- javascript - 如何根据用户在 WordPress 中使用 javascript 在 HTML 表单中选中的框重定向用户?
- python - 重命名熊猫中的一些列
- bigcommerce - BigCommerce Stencil 主题上的其他 Google 字体