@@ -1465,6 +1465,13 @@ class AsymmetricLaplace(Continuous):
1465
1465
Variance :math:`\frac{1+\kappa^{4}}{b^2\kappa^2 }`
1466
1466
======== ========================
1467
1467
1468
+ AsymmetricLaplace distribution can be parameterized either in terms of kappa
1469
+ or q. The link between the two parametrizations is given by
1470
+
1471
+ .. math::
1472
+
1473
+ \kappa = \sqrt(\frac{q}{1-q})
1474
+
1468
1475
Parameters
1469
1476
----------
1470
1477
kappa : tensor_like of float
@@ -1473,20 +1480,41 @@ class AsymmetricLaplace(Continuous):
1473
1480
Location parameter.
1474
1481
b : tensor_like of float
1475
1482
Scale parameter (b > 0).
1483
+ q : tensor_like of float
1484
+ Symmetry parameter (0 < q < 1).
1485
+
1486
+ Notes
1487
+ -----
1488
+ The parametrization in terms of q is useful for quantile regression with q being the quantile
1489
+ of interest.
1476
1490
"""
1477
1491
rv_op = asymmetriclaplace
1478
1492
1479
1493
@classmethod
1480
- def dist (cls , kappa , mu , b , * args , ** kwargs ):
1494
+ def dist (cls , kappa = None , mu = None , b = None , q = None , * args , ** kwargs ):
1495
+ kappa = cls .get_kappa (kappa , q )
1481
1496
b = at .as_tensor_variable (floatX (b ))
1482
1497
kappa = at .as_tensor_variable (floatX (kappa ))
1483
- mu = mu = at .as_tensor_variable (floatX (mu ))
1484
-
1485
- # mean = mu - (kappa - 1 / kappa) / b
1486
- # variance = (1 + kappa ** 4) / (kappa ** 2 * b ** 2)
1498
+ mu = at .as_tensor_variable (floatX (mu ))
1487
1499
1488
1500
return super ().dist ([b , kappa , mu ], * args , ** kwargs )
1489
1501
1502
+ @classmethod
1503
+ def get_kappa (cls , kappa = None , q = None ):
1504
+ if kappa is not None and q is not None :
1505
+ raise ValueError (
1506
+ "Incompatible parameterization. Either use "
1507
+ "kappa or q to specify the distribution."
1508
+ )
1509
+ elif q is not None :
1510
+ if isinstance (q , Variable ):
1511
+ q = check_parameters (q , q > 0 , q < 1 , msg = "0 < q < 1" )
1512
+ else :
1513
+ assert np .all ((np .asarray (q ) > 0 ) | (np .asarray (q ) < 1 ))
1514
+ kappa = (q / (1 - q )) ** 0.5
1515
+
1516
+ return kappa
1517
+
1490
1518
def moment (rv , size , b , kappa , mu ):
1491
1519
mean = mu - (kappa - 1 / kappa ) / b
1492
1520
0 commit comments