Definisci PDF continui e non analitici in Python

Oct 30 2020

Sto progettando di fare alcune operazioni di algebra di base su variabili casuali continue e non analitiche. Voglio definire le loro funzioni di densità di probabilità come array x e f (x).

Tuttavia, sono stato sorpreso di scoprire che non sembra esserci alcun pacchetto che esegue operazioni di base come il calcolo di somme o distribuzioni di prodotti di due PDF (per favore correggimi se sbaglio). Per implementare queste operazioni da solo, ho quindi pianificato di creare una sottoclasse di scipy.stats rv_continuous, seguendo questo thread:

import scipy as sp
import numpy as np

class my_pdf(sp.stats.rv_continuous):
    def __init__(self,x,p):
        self.x = x
        self.p = p
    
    def _pdf(self,x):
        return sp.interpolate.interp1d(self.x,self.p)(x)

x = np.linspace(0,1,101)
f = 3*x**2
my_cv = my_pdf(x,f)
my_cv.pdf(0)

Tuttavia, la sovrascrittura del metodo init probabilmente non è la strada da percorrere. C'è un modo per aggiungere parametri aggiuntivi a rv_continuous o un altro modo per affrontare il problema, oltre a costruire tutto da zero?

Risposte

Yann Nov 05 2020 at 21:16

Quindi, se qualcuno si imbatte di nuovo in questo, ha ricevuto risposta qui :

import scipy as sp
import scipy.stats
import numpy as np

class my_pdf(sp.stats.rv_continuous):
    def __init__(self,x,p):
        super().__init__(a=x.min(), b=x.max())
        self.x = x
        self.p = p

    def _pdf(self,x):
        return sp.interpolate.interp1d(self.x,self.p)(x)

x = np.linspace(0,1,101)
f = 3*x**2
my_cv = my_pdf(x,f)
my_cv.pdf(0)
my_cv.cdf(0.5)

Tuttavia, sento che dovrebbe esserci un pacchetto per operazioni su questo tipo di variabili casuali?