def test_score(self): n = 200 m = 5 p = 3 pr = 2 for jl in 0, 1: for reml in False, True: for cov_pen_wt in 0, 10: cov_pen = penalties.PSD(cov_pen_wt) np.random.seed(355890504) exog_fe = np.random.normal(size=(n * m, p)) exog_re = np.random.normal(size=(n * m, pr)) endog = exog_fe.sum(1) + np.random.normal(size=n * m) groups = np.kron(range(n), np.ones(m)) md = MixedLM(endog, exog_fe, groups, exog_re) md.reml = reml md.cov_pen = cov_pen if jl == 0: like = lambda x: -md.loglike_sqrt(x) score = lambda x: -md.score_sqrt(x) else: like = lambda x: -md.loglike(x) score = lambda x: -md.score(x) for kr in range(5): fe_params = np.random.normal(size=p) cov_re = np.random.normal(size=(pr, pr)) cov_re = np.dot(cov_re.T, cov_re) params_prof = md._pack(fe_params, cov_re) gr = score(params_prof) ngr = np.zeros_like(gr) for k in range(len(ngr)): def f(x): pp = params_prof.copy() pp[k] = x return like(pp) ngr[k] = derivative(f, params_prof[k], dx=1e-6) assert_almost_equal(gr / ngr, np.ones(len(gr)), decimal=3)
def test_score(self): n = 200 m = 5 p = 3 pr = 2 for jl in 0,1: for reml in False,True: for cov_pen_wt in 0,10: cov_pen = penalties.PSD(cov_pen_wt) np.random.seed(355890504) exog_fe = np.random.normal(size=(n*m, p)) exog_re = np.random.normal(size=(n*m, pr)) endog = exog_fe.sum(1) + np.random.normal(size=n*m) groups = np.kron(range(n), np.ones(m)) md = MixedLM(endog, exog_fe, groups, exog_re) md.reml = reml md.cov_pen = cov_pen if jl == 0: like = lambda x: -md.loglike_sqrt(x) score = lambda x: -md.score_sqrt(x) else: like = lambda x: -md.loglike(x) score = lambda x: -md.score(x) for kr in range(5): fe_params = np.random.normal(size=p) cov_re = np.random.normal(size=(pr,pr)) cov_re = np.dot(cov_re.T, cov_re) params_prof = md._pack(fe_params, cov_re) gr = score(params_prof) ngr = np.zeros_like(gr) for k in range(len(ngr)): def f(x): pp = params_prof.copy() pp[k] = x return like(pp) ngr[k] = derivative(f, params_prof[k], dx=1e-6) assert_almost_equal(gr / ngr, np.ones(len(gr)), decimal=3)