def quadratic_form_test( params: ArrayLike, cov: ArrayLike, restriction: OptionalArrayLike = None, value: OptionalArrayLike = None, formula: Optional[Union[str, List[str]]] = None, ) -> WaldTestStatistic: if formula is not None and restriction is not None: raise ValueError("restriction and formula cannot be used" "simultaneously.") if formula is not None: assert isinstance(params, Series) di = DesignInfo(list(params.index)) lc = di.linear_constraint(formula) restriction, value = lc.coefs, lc.constants restriction = np.asarray(restriction) if value is None: value = np.zeros(restriction.shape[0]) value = np.asarray(value).ravel()[:, None] diff = restriction @ np.asarray(params)[:, None] - value rcov = restriction @ cov @ restriction.T stat = float(diff.T @ np.linalg.inv(rcov) @ diff) df = restriction.shape[0] null = "Linear equality constraint is valid" name = "Linear Equality Hypothesis Test" return WaldTestStatistic(stat, null, df, name=name)
def quadratic_form_test(params, cov, restriction=None, value=None, formula=None): if formula is not None and restriction is not None: raise ValueError('restriction and formula cannot be used' 'simultaneously.') if formula is not None: di = DesignInfo(list(params.index)) lc = di.linear_constraint(formula) restriction, value = lc.coefs, lc.constants restriction = np.asarray(restriction) if value is None: value = np.zeros(restriction.shape[0]) value = np.asarray(value).ravel()[:, None] diff = restriction @ params.values[:, None] - value rcov = restriction @ cov @ restriction.T stat = float(diff.T @ np.linalg.inv(rcov) @ diff) df = restriction.shape[0] null = 'Linear equality constraint is valid' name = 'Linear Equality Hypothesis Test' return WaldTestStatistic(stat, null, df, name=name)