如何从一系列测量中正确确定 Weibull PDF 参数?

问题描述

假设我有一系列每小时测量值,例如平均风速。开始和结束日期用于在时间方面限制数据。 根据这些数据,我可以计算各个类别的值的频率。第一类包括 0 和

Category    Amount  Frequency (in %)
0-1 km/h    42      0.64
1-2 km/h    444     6.78
2-3 km/h    871     13.30
3-4 km/h    1130    17.25
4-5 km/h    1119    17.08
5-6 km/h    934     14.26
6-7 km/h    703     10.73
7-8 km/h    490     7.48
8-9 km/h    351     5.36
9-10 km/    219     3.34
10-11km/h   143     2.18
11-12 km/h  52      0.79
12-13 km/h  13      0.20
13-14 km/h  15      0.23
14-15 km/h  6       0.09
15-16 km/h  6       0.09
16-17 km/h  4       0.06
17-18 km/h  3       0.05
18-19 km/h  4       0.06
20-21 km/h  2       0.03

如何从这些值中确定威布尔比例因子和威布尔形状因子(例如,使用 python,可靠性(?))?

到目前为止,我只将测量系列中的所有单个值传递给了 python 可靠性 (Fit_Weibull_2P),从而确定了两个参数。但是,确定的参数似乎不正确(后来绘制的曲线不正确)或者我没有将值正确传递给 Fit_Weibull_2P。

有没有人知道我哪里有错误或者如何以不同的方式解决它?也许不是个人价值观,而是频率?

解决方法

我不知道您的样本数据是什么,但即使使用分箱数据也能得到很好的近似值。比较 (1) 不使用 floc=0 与 (2) 指定 floc=0 以强制左边界为 0。

RuntimeError: assigned grad has data of a different size
,

这可能对您有帮助,也可能无济于事,但您可以通过以下方式在 R 中做到这一点。

text="
Category    Amount  'Frequency (in %)'
'0-1 km/h'    42      0.64
'1-2 km/h'    444     6.78
'2-3 km/h'    871     13.30
'3-4 km/h'    1130    17.25
'4-5 km/h'    1119    17.08
'5-6 km/h'    934     14.26
'6-7 km/h'    703     10.73
'7-8 km/h'    490     7.48
'8-9 km/h'    351     5.36
'9-10 km/h'    219     3.34
'10-11km/h'   143     2.18
'11-12 km/h'  52      0.79
'12-13 km/h'  13      0.20
'13-14 km/h'  15      0.23
'14-15 km/h'  6       0.09
'15-16 km/h'  6       0.09
'16-17 km/h'  4       0.06
'17-18 km/h'  3       0.05
'18-19 km/h'  4       0.06
'20-21 km/h'  2       0.03
"
df=read.table(text=text,header=TRUE)
left=c(0)
right=c(.5)
for (i in 2:20) {
  left[i]=i-2+.5
  right[i]=i-1+.5
}
df1=mutate(df,left=left,right=right)
library(tidyr)
df1=uncount(df1,Amount)
bins=select(df1,left,right)
fitdistcens(bins,"weibull")

Fitting of the distribution ' weibull ' on censored data by maximum likelihood 
Parameters:
      estimate
shape 1.953459
scale 5.152375