簡體   English   中英

使用scipy.stats使用自定義分布擬合數據

[英]Fitting data with a custom distribution using scipy.stats

所以我注意到scipy中沒有scipy 廣義t分布scipy 對我來說,適合這是對我的一些數據的分配是有用的。 不幸的是,在這種情況下, fit似乎並不適用於我。 為了進一步解釋,我已經實現了它

import numpy as np
import pandas as pd
import scipy.stats as st
from scipy.special import beta

class sgt(st.rv_continuous):

    def _pdf(self, x, mu, sigma, lam, p, q):

        v = q ** (-1 / p) * \
            ((3 * lam ** 2 + 1) * (
                    beta(3 / p, q - 2 / p) / beta(1 / p, q)) - 4 * lam ** 2 *
             (beta(2 / p, q - 1 / p) / beta(1 / p, q)) ** 2) ** (-1 / 2)

        m = 2 * v * sigma * lam * q ** (1 / p) * beta(2 / p, q - 1 / p) / beta(
            1 / p, q)

        fx = p / (2 * v * sigma * q ** (1 / p) * beta(1 / p, q) * (
                abs(x - mu + m) ** p / (q * (v * sigma) ** p) * (
                lam * np.sign(x - mu + m) + 1) ** p + 1) ** (
                          1 / p + q))

        return fx

    def _argcheck(self, mu, sigma, lam, p, q):

        s = sigma > 0
        l = -1 < lam < 1
        p_bool = p > 0
        q_bool = q > 0

        all_bool = s & l & p_bool & q_bool

        return all_bool

這一切都很好,我可以生成給定參數的隨機變量沒問題。 _argcheck是必需的,因為只有一個簡單的積極參數檢查不合適。

sgt_inst = sgt(name='sgt')
vars = sgt_inst.rvs(mu=1, sigma=3, lam = -0.1, p = 2, q = 50, size = 100)

但是,當我嘗試fit這些參數時,我得到一個錯誤

sgt_inst.fit(vars)

RuntimeWarning:減法中遇到無效值
numpy.max(numpy.abs(fsim [0] - fsim [1:]))<= fatol):

它只是回來了

我發現奇怪的是,當我實現文檔中所示的示例自定義高斯分布時,運行fit方法沒有問題。

有任何想法嗎?

正如fit docstring所說,

擬合的起始估計由輸入參數給出; 對於沒有提供起始估計的任何參數, self._fitstart(data)來生成這樣的參數。

調用sgt_inst._fitstart(data)返回(1.0, 1.0, 1.0, 1.0, 1.0, 0, 1) sgt_inst._fitstart(data) (1.0, 1.0, 1.0, 1.0, 1.0, 0, 1) (前五個是形狀參數,后兩個是loc和scale)。 看起來_fitstart不是一個復雜的過程。 參數l它選擇不符合您的要求argcheck。

結論:提供fit自己的起始參數,例如:

sgt_inst.fit(data, 0.5, 0.5, -0.5, 2, 10)

對於我的隨機數據(1.4587093459289049, 5.471769032259468, -0.02391466905874927, 7.07289326147152 4, 0.741434497805832, -0.07012808188413872, 0.5308181287869771)返回(1.4587093459289049, 5.471769032259468, -0.02391466905874927, 7.07289326147152 4, 0.741434497805832, -0.07012808188413872, 0.5308181287869771)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM