I have a distribution with the following pdf and cdf that I wish to use in pymc.DensityDist. Can someone took at this at let me know if my random generator looks right–this is my first time trying to make one. I based the radom generator on information gathered from here.
\begin{align*}
cdf(x) &= \exp\left(-\beta^\alpha\left(\frac{\lambda}{x}\right)^{\alpha\kappa}\right) \\
pdf(x) &= \alpha\kappa\beta^\alpha\lambda^{\alpha\kappa}x^{-1-\alpha\kappa}\exp\left(-\beta^\alpha\left(\frac{\lambda}{x}\right)^{\alpha\kappa}\right)
\end{align*}
import pytensor.tensor as T
import numpy as np
def FWD(x,alpha, beta, lam, kapa):
block_1 = T.log(alpha*kapa*(beta**alpha)*lam**(alpha*kapa))
block_2 = (1+alpha*kapa)*T.log(x)
block_3 = (beta**alpha)*(lam/x)**(alpha*kapa)
lopp = block_1 - block_2 - block_3
return logp
def FRW_rsv(y: 'array of values',alpha: 'single value for alpha', beta: 'single value for beta',
lam: 'single value for lambda', kappa: 'single value for kappa', size=None: '#of samples to generate'): -> tesor
if size is not None:
assert size == y.shape
else:
size = y.shape
alpha = alpha[0]
beta = beta[0]
lam = lam[0]
kappa = kappa[0]
U = np.random.uniform(size = y.shape)
X = np.exp(((-np.log(np.log(U)) +np.log(-beta**alpha))/-alpha*kapa) +np.log(alpha)) #inverse transfomation of cdf
return X