6

データのワイブル パラメータ(つまり、形状とスケール)を特定したいと考えています。

0.022988506
0.114942529
0.218390805
0.114942529
0.149425287
0.114942529
0.068965517
0.068965517
0.034482759
0.022988506
0.022988506
0.022988506
0.022988506

この回答が提案したことは既に試しましたが、Python 3.4 を使用しています。

import scipy.stats as s
import numpy as np
from scipy import stats


def weib(x,n,a):
    return (a / n) * (x / n)**(a - 1) * np.exp(-(x / n)**a)


data = np.loadtxt("data1.csv")
print(data)
(loc, scale) = s.exponweib.fit_loc_scale(data, 1, 1)
print('loc is: ',loc, '\n scale is: ', scale)

これにより、次の出力が得られます。

[0.02298851  0.11494253  0.2183908   0.11494253  0.14942529  0.11494253   0.06896552  0.06896552  0.03448276  0.02298851  0.02298851  0.02298851 0.02298851]
loc is:  0.0574417296258 
scale is:  0.0179259738449

私のcsvファイルのデータは、ワイブル関数のy値ではなく、x入力値として読み取られたと思います。bin を使用して 2 番目の列 (または行) を追加すると、文字列値を float に変換できないというエラーが表示されます。

内部のデータをワイブル関数の y 値として使用するには、csv ファイルをどのように変更する必要がありますか?

私の問題は、この行を理解していないことにあると思います。

(loc, scale) = s.exponweib.fit_loc_scale(data, 1, 1)

ここで何1, 1を表しているのですか?パラメータが負であってはなりません。

4

1 に答える 1

8

fitのメソッドscipy.stats.weibull_min( のエイリアス)を使用したいようですscipy.stats.frechet_r。引数floc=0を使用して、位置を 0 に制限します。

In [9]: data
Out[9]: 
array([ 0.02298851,  0.11494253,  0.2183908 ,  0.11494253,  0.14942529,
        0.11494253,  0.06896552,  0.06896552,  0.03448276,  0.02298851,
        0.02298851,  0.02298851,  0.02298851])

In [10]: from scipy.stats import weibull_min

In [11]: shape, loc, scale = weibull_min.fit(data, floc=0)

In [12]: shape
Out[12]: 1.3419930069121602

In [13]: scale
Out[13]: 0.084273047253525968
于 2015-10-12T10:48:32.630 に答える