2
2
Distributions to use in ARCH models. All distributions must inherit from
3
3
:class:`Distribution` and provide the same methods with the same inputs.
4
4
"""
5
+
5
6
from abc import ABCMeta , abstractmethod
6
7
from collections .abc import Sequence
7
8
from typing import Callable , Optional , Union
@@ -100,8 +101,8 @@ def _check_constraints(
100
101
for p , n , b in zip (params , self .name , bounds ):
101
102
if not (b [0 ] <= p <= b [1 ]):
102
103
raise ValueError (
103
- "{ } does not satisfy the bounds requirement "
104
- "of ({ }, {})". format ( n , * b )
104
+ f" { n } does not satisfy the bounds requirement of "
105
+ f"( { b [ 0 ] } , { b [ 1 ] } )"
105
106
)
106
107
return asarray (params )
107
108
@@ -205,7 +206,7 @@ def loglikelihood(
205
206
resids : ArrayLike ,
206
207
sigma2 : ArrayLike ,
207
208
individual : bool = False ,
208
- ) -> Union [float , Float64Array ]:
209
+ ) -> Union [float , Float64Array ]:
209
210
"""
210
211
Loglikelihood evaluation.
211
212
@@ -264,7 +265,7 @@ def ppf(
264
265
self ,
265
266
pits : Union [float , Sequence [float ], ArrayLike1D ],
266
267
parameters : Union [Sequence [float ], ArrayLike1D , None ] = None ,
267
- ) -> Union [float , Float64Array ]:
268
+ ) -> Union [float , Float64Array ]:
268
269
"""
269
270
Inverse cumulative density function (ICDF)
270
271
@@ -414,7 +415,7 @@ def loglikelihood(
414
415
resids : ArrayLike ,
415
416
sigma2 : ArrayLike ,
416
417
individual : bool = False ,
417
- ) -> Union [float , Float64Array ]:
418
+ ) -> Union [float , Float64Array ]:
418
419
r"""Computes the log-likelihood of assuming residuals are normally
419
420
distributed, conditional on the variance
420
421
@@ -446,7 +447,7 @@ def loglikelihood(
446
447
+\frac{x^{2}}{\sigma^{2}}\right)
447
448
448
449
"""
449
- lls = - 0.5 * (log (2 * pi ) + log (sigma2 ) + resids ** 2.0 / sigma2 )
450
+ lls = - 0.5 * (log (2 * pi ) + log (sigma2 ) + resids ** 2.0 / sigma2 )
450
451
if individual :
451
452
return lls
452
453
else :
@@ -557,7 +558,7 @@ def loglikelihood(
557
558
resids : ArrayLike ,
558
559
sigma2 : ArrayLike ,
559
560
individual : bool = False ,
560
- ) -> Union [float , Float64Array ]:
561
+ ) -> Union [float , Float64Array ]:
561
562
r"""Computes the log-likelihood of assuming residuals are have a
562
563
standardized (to have unit variance) Student's t distribution,
563
564
conditional on the variance.
@@ -595,7 +596,7 @@ def loglikelihood(
595
596
nu = parameters [0 ]
596
597
lls = gammaln ((nu + 1 ) / 2 ) - gammaln (nu / 2 ) - log (pi * (nu - 2 )) / 2
597
598
lls -= 0.5 * (log (sigma2 ))
598
- lls -= ((nu + 1 ) / 2 ) * (log (1 + (resids ** 2.0 ) / (sigma2 * (nu - 2 ))))
599
+ lls -= ((nu + 1 ) / 2 ) * (log (1 + (resids ** 2.0 ) / (sigma2 * (nu - 2 ))))
599
600
600
601
if individual :
601
602
return lls
@@ -685,7 +686,7 @@ def partial_moment(
685
686
nu = parameters [0 ]
686
687
var = nu / (nu - 2 )
687
688
scale = 1.0 / sqrt (var )
688
- moment = (scale ** n ) * self ._ord_t_partial_moment (n , z / scale , nu )
689
+ moment = (scale ** n ) * self ._ord_t_partial_moment (n , z / scale , nu )
689
690
return moment
690
691
691
692
@staticmethod
@@ -729,9 +730,9 @@ def _ord_t_partial_moment(n: int, z: float, nu: float) -> float:
729
730
elif n == 1 :
730
731
c = gamma (0.5 * (nu + 1 )) / (sqrt (nu * pi ) * gamma (0.5 * nu ))
731
732
e = 0.5 * (nu + 1 )
732
- moment = (0.5 * (c * nu ) / (1 - e )) * ((1 + (z ** 2 ) / nu ) ** (1 - e ))
733
+ moment = (0.5 * (c * nu ) / (1 - e )) * ((1 + (z ** 2 ) / nu ) ** (1 - e ))
733
734
else :
734
- t1 = (z ** (n - 1 )) * (nu + z ** 2 ) * stats .t .pdf (z , nu )
735
+ t1 = (z ** (n - 1 )) * (nu + z ** 2 ) * stats .t .pdf (z , nu )
735
736
t2 = (n - 1 ) * nu * StudentsT ._ord_t_partial_moment (n - 2 , z , nu )
736
737
moment = (1 / (n - nu )) * (t1 - t2 )
737
738
return moment
@@ -846,7 +847,7 @@ def loglikelihood(
846
847
const_a = self .__const_a (parameters )
847
848
const_b = self .__const_b (parameters )
848
849
849
- resids = resids / sigma2 ** 0.5
850
+ resids = resids / sigma2 ** 0.5
850
851
lls = log (const_b ) + const_c - log (sigma2 ) / 2
851
852
if abs (lam ) >= 1.0 :
852
853
lam = sign (lam ) * (1.0 - 1e-6 )
@@ -911,7 +912,7 @@ def simulate(
911
912
def parameter_names (self ) -> list [str ]:
912
913
return ["eta" , "lambda" ]
913
914
914
- def __const_a (self , parameters : Union [Float64Array , Sequence [float ]]) -> float :
915
+ def __const_a (self , parameters : Union [Float64Array , Sequence [float ]]) -> float :
915
916
"""
916
917
Compute a constant.
917
918
@@ -930,7 +931,7 @@ def __const_a(self, parameters: Union[Float64Array , Sequence[float]]) -> float:
930
931
c = self .__const_c (parameters )
931
932
return float (4 * lam * exp (c ) * (eta - 2 ) / (eta - 1 ))
932
933
933
- def __const_b (self , parameters : Union [Float64Array , Sequence [float ]]) -> float :
934
+ def __const_b (self , parameters : Union [Float64Array , Sequence [float ]]) -> float :
934
935
"""
935
936
Compute b constant.
936
937
@@ -946,7 +947,7 @@ def __const_b(self, parameters: Union[Float64Array , Sequence[float]]) -> float:
946
947
"""
947
948
lam = float (parameters [1 ])
948
949
a = self .__const_a (parameters )
949
- return (1 + 3 * lam ** 2 - a ** 2 ) ** 0.5
950
+ return (1 + 3 * lam ** 2 - a ** 2 ) ** 0.5
950
951
951
952
@staticmethod
952
953
def __const_c (parameters : Union [Float64Array , Sequence [float ]]) -> float :
@@ -999,7 +1000,7 @@ def ppf(
999
1000
self ,
1000
1001
pits : Union [float , Sequence [float ], ArrayLike1D ],
1001
1002
parameters : Union [Sequence [float ], ArrayLike1D , None ] = None ,
1002
- ) -> Union [float , Float64Array ]:
1003
+ ) -> Union [float , Float64Array ]:
1003
1004
parameters = self ._check_constraints (parameters )
1004
1005
scalar = isscalar (pits )
1005
1006
if scalar :
@@ -1052,8 +1053,8 @@ def moment(
1052
1053
)
1053
1054
l_pmom = ((- 1 ) ** k ) * r_pmom
1054
1055
1055
- lhs = (1 - lam ) * (lscale ** k ) * (loc ** (n - k )) * l_pmom
1056
- rhs = (1 + lam ) * (rscale ** k ) * (loc ** (n - k )) * r_pmom
1056
+ lhs = (1 - lam ) * (lscale ** k ) * (loc ** (n - k )) * l_pmom
1057
+ rhs = (1 + lam ) * (rscale ** k ) * (loc ** (n - k )) * r_pmom
1057
1058
moment += comb (n , k ) * (lhs + rhs )
1058
1059
1059
1060
return moment
@@ -1083,15 +1084,15 @@ def partial_moment(
1083
1084
lhs = (
1084
1085
(1 - lam )
1085
1086
* (loc ** (n - k ))
1086
- * (lscale ** k )
1087
+ * (lscale ** k )
1087
1088
* StudentsT ._ord_t_partial_moment (k , z = (lbound - loc ) / lscale , nu = eta )
1088
1089
)
1089
1090
1090
1091
if z > loc :
1091
1092
rhs = (
1092
1093
(1 + lam )
1093
1094
* (loc ** (n - k ))
1094
- * (rscale ** k )
1095
+ * (rscale ** k )
1095
1096
* (
1096
1097
StudentsT ._ord_t_partial_moment (k , z = (z - loc ) / rscale , nu = eta )
1097
1098
- StudentsT ._ord_t_partial_moment (k , z = 0.0 , nu = eta )
@@ -1285,7 +1286,7 @@ def partial_moment(
1285
1286
parameters = self ._check_constraints (parameters )
1286
1287
nu = parameters [0 ]
1287
1288
scale = 1.0 / sqrt (stats .gennorm (nu ).var ())
1288
- moment = (scale ** n ) * self ._ord_gennorm_partial_moment (n , z / scale , nu )
1289
+ moment = (scale ** n ) * self ._ord_gennorm_partial_moment (n , z / scale , nu )
1289
1290
return moment
1290
1291
1291
1292
@staticmethod
0 commit comments