本文整理汇总了Python中statsmodels.tools.numdiff.approx_fprime_cs函数的典型用法代码示例。如果您正苦于以下问题:Python approx_fprime_cs函数的具体用法?Python approx_fprime_cs怎么用?Python approx_fprime_cs使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了approx_fprime_cs函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: test_hess
def test_hess(self):
#NOTE: I had to overwrite this to lessen the tolerance
for test_params in self.params:
he = self.mod.hessian(test_params)
hefd = numdiff.approx_fprime_cs(test_params, self.mod.score)
assert_almost_equal(he, hefd, decimal=DEC8)
#NOTE: notice the accuracy below and the epsilon changes
# this doesn't work well for score -> hessian with non-cs step
# it's a little better around the optimum
assert_almost_equal(he, hefd, decimal=7)
hefd = numdiff.approx_fprime(test_params, self.mod.score,
centered=True)
assert_almost_equal(he, hefd, decimal=4)
hefd = numdiff.approx_fprime(test_params, self.mod.score, 1e-9,
centered=False)
assert_almost_equal(he, hefd, decimal=2)
hescs = numdiff.approx_fprime_cs(test_params, self.mod.score)
assert_almost_equal(he, hescs, decimal=DEC8)
hecs = numdiff.approx_hess_cs(test_params, self.mod.loglike)
assert_almost_equal(he, hecs, decimal=5)
#NOTE: these just don't work well
#hecs = numdiff.approx_hess1(test_params, self.mod.loglike, 1e-3)
#assert_almost_equal(he, hecs, decimal=1)
#hecs = numdiff.approx_hess2(test_params, self.mod.loglike, 1e-4)
#assert_almost_equal(he, hecs, decimal=0)
hecs = numdiff.approx_hess3(test_params, self.mod.loglike, 1e-4)
assert_almost_equal(he, hecs, decimal=0)
示例2: deriv
def deriv(self, mu):
"""
Derivative of the variance function v'(mu)
"""
from statsmodels.tools.numdiff import approx_fprime_cs
# TODO: diag workaround proplem with numdiff for 1d
return np.diag(approx_fprime_cs(mu, self))
示例3: score
def score(self, params, *args, **kwargs):
"""
Compute the score function at params.
Parameters
----------
params : array_like
Array of parameters at which to evaluate the score.
*args, **kwargs
Additional arguments to the `loglike` method.
Returns
----------
score : array
Score, evaluated at `params`.
Notes
-----
This is a numerical approximation, calculated using first-order complex
step differentiation on the `loglike` method.
Both \*args and \*\*kwargs are necessary because the optimizer from
`fit` must call this function and only supports passing arguments via
\*args (for example `scipy.optimize.fmin_l_bfgs`).
"""
transformed = (
args[0] if len(args) > 0 else kwargs.get('transformed', False)
)
score = approx_fprime_cs(params, self.loglike, kwargs={
'transformed': transformed
})
return score
示例4: score
def score(self, params, *args, **kwargs):
"""
Compute the score function at params.
Parameters
----------
params : array_like
Array of parameters at which to evaluate the score.
*args, **kwargs
Additional arguments to the `loglike` method.
Returns
----------
score : array
Score, evaluated at `params`.
Notes
-----
This is a numerical approximation, calculated using first-order complex
step differentiation on the `loglike` method.
Both \*args and \*\*kwargs are necessary because the optimizer from
`fit` must call this function and only supports passing arguments via
\*args (for example `scipy.optimize.fmin_l_bfgs`).
"""
nargs = len(args)
if nargs < 1:
kwargs.setdefault('average_loglike', True)
if nargs < 2:
kwargs.setdefault('transformed', False)
if nargs < 3:
kwargs.setdefault('set_params', False)
return approx_fprime_cs(params, self.loglike, args=args, kwargs=kwargs)
示例5: test_grad_fun1_cs
def test_grad_fun1_cs(self):
for test_params in self.params:
#gtrue = self.x.sum(0)
gtrue = self.gradtrue(test_params)
fun = self.fun()
gcs = numdiff.approx_fprime_cs(test_params, fun, args=self.args)
assert_almost_equal(gtrue, gcs, decimal=DEC13)
示例6: deriv2
def deriv2(self, p):
"""Second derivative of the link function g''(p)
implemented through numerical differentiation
"""
from statsmodels.tools.numdiff import approx_fprime_cs
# TODO: workaround proplem with numdiff for 1d
return np.diag(approx_fprime_cs(p, self.deriv))
示例7: test_score
def test_score(self):
for test_params in self.params:
sc = self.mod.score(test_params)
scfd = numdiff.approx_fprime(test_params.ravel(),
self.mod.loglike)
assert_almost_equal(sc, scfd, decimal=1)
sccs = numdiff.approx_fprime_cs(test_params.ravel(),
self.mod.loglike)
assert_almost_equal(sc, sccs, decimal=11)
示例8: score
def score(self, params, *args, **kwargs):
"""
Compute the score function at params.
Parameters
----------
params : array_like
Array of parameters at which to evaluate the score.
*args, **kwargs
Additional arguments to the `loglike` method.
Returns
----------
score : array
Score, evaluated at `params`.
Notes
-----
This is a numerical approximation.
Both \*args and \*\*kwargs are necessary because the optimizer from
`fit` must call this function and only supports passing arguments via
\*args (for example `scipy.optimize.fmin_l_bfgs`).
"""
nargs = len(args)
if nargs < 1:
kwargs.setdefault('average_loglike', True)
if nargs < 2:
kwargs.setdefault('transformed', False)
if nargs < 3:
kwargs.setdefault('set_params', False)
initial_state = kwargs.pop('initial_state', None)
initial_state_cov = kwargs.pop('initial_state_cov', None)
if initial_state is not None and initial_state_cov is not None:
# If initialization is stationary, we don't want to recalculate the
# initial_state_cov for each new set of parameters here
initialization = self.initialization
_initial_state = self._initial_state
_initial_state_cov = self._initial_state_cov
_initial_variance = self._initial_variance
self.initialize_known(initial_state, initial_state_cov)
score = approx_fprime_cs(params, self.loglike, epsilon=1e-9, args=args,
kwargs=kwargs)
if initial_state is not None and initial_state_cov is not None:
# Reset the initialization
self.initialization = initialization
self._initial_state = _initial_state
self._initial_state_cov = _initial_state_cov
self._initial_variance = _initial_variance
return score
示例9: jac_predict
def jac_predict(self, params):
'''jacobian of prediction function using complex step derivative
This assumes that the predict function does not use complex variable
but is designed to do so.
'''
from statsmodels.tools.numdiff import approx_fprime_cs
jaccs_err = approx_fprime_cs(params, self._predict)
return jaccs_err
示例10: score_numdiff
def score_numdiff(self, params, pen_weight=None, method='fd', **kwds):
"""score based on finite difference derivative
"""
if pen_weight is None:
pen_weight = self.pen_weight
loglike = lambda p: self.loglike(p, pen_weight=pen_weight, **kwds)
if method == 'cs':
return approx_fprime_cs(params, loglike)
elif method == 'fd':
return approx_fprime(params, loglike, centered=True)
else:
raise ValueError('method not recognized, should be "fd" or "cs"')
示例11: arma_scoreobs
def arma_scoreobs(endog, ar_params=None, ma_params=None, sigma2=1,
prefix=None):
"""
Compute the score per observation (gradient of the loglikelihood function)
Parameters
----------
endog : ndarray
The observed time-series process.
ar_params : ndarray, optional
Autoregressive coefficients, not including the zero lag.
ma_params : ndarray, optional
Moving average coefficients, not including the zero lag, where the sign
convention assumes the coefficients are part of the lag polynomial on
the right-hand-side of the ARMA definition (i.e. they have the same
sign from the usual econometrics convention in which the coefficients
are on the right-hand-side of the ARMA definition).
sigma2 : ndarray, optional
The ARMA innovation variance. Default is 1.
prefix : str, optional
The BLAS prefix associated with the datatype. Default is to find the
best datatype based on given input. This argument is typically only
used internally.
Returns
----------
scoreobs : array
Score per observation, evaluated at the given parameters.
Notes
-----
This is a numerical approximation, calculated using first-order complex
step differentiation on the `arma_loglike` method.
"""
ar_params = [] if ar_params is None else ar_params
ma_params = [] if ma_params is None else ma_params
p = len(ar_params)
q = len(ma_params)
def func(params):
return arma_loglikeobs(endog, params[:p], params[p:p + q],
params[p + q:])
params0 = np.r_[ar_params, ma_params, sigma2]
epsilon = _get_epsilon(params0, 2., None, len(params0))
return approx_fprime_cs(params0, func, epsilon)
示例12: transform_jacobian
def transform_jacobian(self, unconstrained):
"""
Jacobian matrix for the parameter transformation function
Parameters
----------
unconstrained : array_like
Array of unconstrained parameters used by the optimizer.
Returns
-------
jacobian : array
Jacobian matrix of the transformation, evaluated at `unconstrained`
Notes
-----
This is a numerical approximation.
See Also
--------
transform_params
"""
return approx_fprime_cs(unconstrained, self.transform_params)
示例13: score_obs
def score_obs(self, params, **kwargs):
"""
Compute the score per observation, evaluated at params
Parameters
----------
params : array_like
Array of parameters at which to evaluate the score.
*args, **kwargs
Additional arguments to the `loglike` method.
Returns
----------
score : array (nobs, k_vars)
Score per observation, evaluated at `params`.
Notes
-----
This is a numerical approximation, calculated using first-order complex
step differentiation on the `loglikeobs` method.
"""
self.update(params)
return approx_fprime_cs(params, self.loglikeobs, kwargs=kwargs)
示例14: print
epsilon = 1e-6
nobs = 200
x = np.arange(nobs*3).reshape(nobs,-1)
x = np.random.randn(nobs,3)
xk = np.array([1,2,3])
xk = np.array([1.,1.,1.])
#xk = np.zeros(3)
beta = xk
y = np.dot(x, beta) + 0.1*np.random.randn(nobs)
xkols = np.dot(np.linalg.pinv(x),y)
print(approx_fprime((1,2,3),fun,epsilon,x))
gradtrue = x.sum(0)
print(x.sum(0))
gradcs = approx_fprime_cs((1,2,3), fun, (x,), h=1.0e-20)
print(gradcs, maxabs(gradcs, gradtrue))
print(approx_hess_cs((1,2,3), fun, (x,), h=1.0e-20)) #this is correctly zero
print(approx_hess_cs((1,2,3), fun2, (y,x), h=1.0e-20)-2*np.dot(x.T, x))
print(numdiff.approx_hess(xk,fun2,1e-3, (y,x))[0] - 2*np.dot(x.T, x))
gt = (-x*2*(y-np.dot(x, [1,2,3]))[:,None])
g = approx_fprime_cs((1,2,3), fun1, (y,x), h=1.0e-20)#.T #this shouldn't be transposed
gd = numdiff.approx_fprime((1,2,3),fun1,epsilon,(y,x))
print(maxabs(g, gt))
print(maxabs(gd, gt))
import statsmodels.api as sm
示例15: test_partials_logistic
def test_partials_logistic():
# Here we compare to analytic derivatives and to finite-difference
# approximations
logistic = markov_switching._logistic
partials_logistic = markov_switching._partials_logistic
# For a number, logistic(x) = np.exp(x) / (1 + np.exp(x))
# Then d/dx = logistix(x) - logistic(x)**2
cases = [0, 10., -4]
for x in cases:
assert_allclose(partials_logistic(x), logistic(x) - logistic(x)**2)
assert_allclose(partials_logistic(x), approx_fprime_cs([x], logistic))
# For a vector, logistic(x) returns
# np.exp(x[i]) / (1 + np.sum(np.exp(x[:]))) for each i
# Then d logistic(x[i]) / dx[i] = (logistix(x) - logistic(x)**2)[i]
# And d logistic(x[i]) / dx[j] = -(logistic(x[i]) * logistic[x[j]])
cases = [[1.], [0, 1.], [-2, 3., 1.2, -30.]]
for x in cases:
evaluated = np.atleast_1d(logistic(x))
partials = np.diag(evaluated - evaluated**2)
for i in range(len(x)):
for j in range(i):
partials[i, j] = partials[j, i] = -evaluated[i] * evaluated[j]
assert_allclose(partials_logistic(x), partials)
assert_allclose(partials_logistic(x), approx_fprime_cs(x, logistic))
# For a 2-dim, logistic(x) returns
# np.exp(x[i, t]) / (1 + np.sum(np.exp(x[:, t]))) for each i, each t
# but squeezed
case = [[1.]]
evaluated = logistic(case)
partial = [evaluated - evaluated**2]
assert_allclose(partials_logistic(case), partial)
assert_allclose(partials_logistic(case), approx_fprime_cs(case, logistic))
# # Here, np.array(case) is 2x1, so it is interpreted as i=0, 1 and t=0
case = [[0], [1.]]
evaluated = logistic(case)[:, 0]
partials = np.diag(evaluated - evaluated**2)
partials[0, 1] = partials[1, 0] = -np.multiply(*evaluated)
assert_allclose(partials_logistic(case)[:, :, 0], partials)
assert_allclose(partials_logistic(case),
approx_fprime_cs(np.squeeze(case), logistic)[..., None])
# Here, np.array(case) is 1x2, so it is interpreted as i=0 and t=0, 1
case = [[0, 1.]]
evaluated = logistic(case)
partials = (evaluated - evaluated**2)[None, ...]
assert_allclose(partials_logistic(case), partials)
assert_allclose(partials_logistic(case),
approx_fprime_cs(case, logistic).T)
# For a 3-dim, logistic(x) returns
# np.exp(x[i, j, t]) / (1 + np.sum(np.exp(x[:, j, t])))
# for each i, each j, each t
case = np.arange(2*3*4).reshape(2, 3, 4)
evaluated = logistic(case)
partials = partials_logistic(case)
for t in range(4):
for j in range(3):
desired = np.diag(evaluated[:, j, t] - evaluated[:, j, t]**2)
desired[0, 1] = desired[1, 0] = -np.multiply(*evaluated[:, j, t])
assert_allclose(partials[..., j, t], desired)