Skip to content Skip to sidebar Skip to footer

Using The Methods Of Scipy's Rv_continuous When Creating A Cutom Continuous Distribution

I am trying to calculate E[f(x)] for some pdf that I generate/estimated from data. It says in the documentation: Subclassing New random variables can be defined by subclassing rv_

Solution 1:

For historical reasons, scipy distributions are instances, so that you need to have an instance of your subclass. For example:

>>>classMyRV(stats.rv_continuous):...def_pdf(self, x, k):...return k * np.exp(-k*x)>>>my_rv = MyRV(name='exp', a=0.)     # instantiation

Notice the need to specify the limits of the support: default values are a=-inf and b=inf.

>>>my_rv.a, my_rv.b
(0.0, inf)
>>>my_rv.numargs        # gets figured out automagically
1

Once you've specified, say, _pdf, you have a working distribution instance:

>>>my_rv.cdf(4, k=3)
0.99999385578764677
>>>my_rv.rvs(k=3, size=4)
array([ 0.37696127,  1.10192779,  0.02632473,  0.25516446])
>>>my_rv.expect(lambda x: 1, args=(2,))    # k=2 here
0.9999999999999999

Solution 2:

SciPy's rv_histogram method allows you to provide data and it provides the pdf, cdf and random generation methods.

Post a Comment for "Using The Methods Of Scipy's Rv_continuous When Creating A Cutom Continuous Distribution"