問題:私は物理的な文脈からピーク(固定)の距離を知っているバイモーダル正規分布に経験的データを適合させたいと思います。同じ標準偏差。いくつかのパラメータを固定したバイモーダルガウス分布をフィッティングする
私は(以下のコードを参照してください)scipy.stats.rv_continous
で独自の分布を作成しようとしていたが、パラメータは常に1に装着されている誰かが何が起こっているか理解している、または問題を解決するために異なるアプローチに私を指すことができますか?
詳細:私はloc
とscale
パラメータを避け、ピーク距離delta
がscale
の影響を受けてはならないので、直接_pdf
-methodにm
とs
としてそれらを実装しました。それを補うために、私はfit
-methodにfloc=0
とfscale=1
にそれらを固定し、実際に私は、サンプルデータに期待するものm
ためのフィットパラメータ、s
とピークw
の重みたいのは周りのピークを持つ分布でありますx=-450
およびx=450
(=>m=0
)。標準s
は約100または200でなければなりませんが、1.0ではなく、重量w
は約1でなければなりません。 0.5
from __future__ import division
from scipy.stats import rv_continuous
import numpy as np
class norm2_gen(rv_continuous):
def _argcheck(self, *args):
return True
def _pdf(self, x, m, s, w, delta):
return np.exp(-(x-m+delta/2)**2/(2. * s**2))/np.sqrt(2. * np.pi * s**2) * w + \
np.exp(-(x-m-delta/2)**2/(2. * s**2))/np.sqrt(2. * np.pi * s**2) * (1 - w)
norm2 = norm2_gen(name='norm2')
data = [487.0, -325.5, -159.0, 326.5, 538.0, 552.0, 563.0, -156.0, 545.5, 341.0, 530.0, -156.0, 473.0, 328.0, -319.5, -287.0, -294.5, 153.5, -512.0, 386.0, -129.0, -432.5, -382.0, -346.5, 349.0, 391.0, 299.0, 364.0, -283.0, 562.5, -42.0, 214.0, -389.0, 42.5, 259.5, -302.5, 330.5, -338.0, 508.5, 319.5, -356.5, 421.5, 543.0]
m, s, w, delta, loc, scale = norm2.fit(data, fdelta=900, floc=0, fscale=1)
print m, s, w, delta, loc, scale
>>> 1.0 1.0 1.0 900 0 1
これだけです。重量変換はこの問題を解決しました。ありがとうございました! – ascripter