Defina pdfs contínuos e não analíticos em python

Oct 30 2020

Estou planejando fazer alguma álgebra básica em variáveis ​​aleatórias contínuas e não analíticas. Quero definir suas funções de densidade de probabilidade como matrizes x e f (x).

Ainda assim, fiquei surpreso ao descobrir que não parece haver nenhum pacote que faça operações básicas, como calcular a soma ou distribuições de produtos de dois PDFs (corrija-me se estiver errado). Para implementar essas operações sozinho, planejei criar uma subclasse de scipy.stats rv_continuous, seguindo este 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)

No entanto, sobrescrever o método init provavelmente não é o caminho a percorrer. Existe uma maneira de adicionar parâmetros adicionais ao rv_continuous ou outra maneira de abordar o problema, além de construir tudo do zero?

Respostas

Yann Nov 05 2020 at 21:16

Então, se alguém tropeçar nisso novamente, foi respondido aqui :

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)

Ainda assim, acho que deveria haver um pacote para operações neste tipo de variáveis ​​aleatórias.