def test_ssr(self):
     # if x is a N x M array, then beta must be a M x P array, then y must be a N x P array
     x = np.array([[1, 0, 4, 3, 2], [1, 1, 2, 2, 3]])
     y = np.array([[1, 1], [1, 2]])
     beta = np.array([[1, 2], [2, 3], [1, 1], [1, 2], [0, 1]])
     result = bayes_stats.ssr(x, y, beta)
     np.testing.assert_array_equal(result, 398)
 def test_calc_rate_lin_alg_error(self):
     x = np.array([[1, 2, 3], [2, 4, 6], [4, 8, 12], [8, 16, 24]])
     y = np.array([[1, 2, 3], [0, 1, 1], [1, 1, 1], [1, 0, 1]])
     xtx = np.dot(x.T, x)  # [k x k]
     xty = np.dot(x.T, y)  # [k x 1]
     gprior = np.array([[1, 1, 1, 1], [1, 0, 1, 0], [0, 0, 1, 1],
                        [1, 0, 1, 1]])
     with self.assertRaises(np.linalg.LinAlgError):
         model_beta = bayes_stats._solve_model(xtx, xty)
         model_ssr = bayes_stats.ssr(x, y, model_beta)
         scale_param = bayes_stats._calc_ig_scale(model_beta, model_ssr,
                                                  xtx, gprior)
    def test_calc_rate(self):
        x = np.array([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]])
        y = np.array([[1, 2, 3], [0, 1, 1], [1, 1, 1], [1, 0, 1]])
        xtx = np.dot(x.T, x)  # [k x k]
        xty = np.dot(x.T, y)  # [k x 1]
        gprior = np.array([[1, 1, 1, 1], [1, 0, 1, 0], [0, 0, 1, 1],
                           [1, 0, 1, 1]])

        model_beta = bayes_stats._solve_model(xtx, xty)
        model_ssr = bayes_stats.ssr(x, y, model_beta)
        scale_param = bayes_stats._calc_ig_scale(model_beta, model_ssr, xtx,
                                                 gprior)

        np.testing.assert_array_equal(
            scale_param,
            np.array([[1.5, 1.5, 2.5], [1.5, 2.5, 3.5], [2.5, 3.5, 5.5]]))
 def test_ssr_negative(self):
     x = np.array([[0, 1, -1, -2, 1], [-1, 2, 0, -1, 1]])
     y = np.array([[2, -1], [1, 2]])
     beta = np.array([[-1, -1], [1, 2], [2, 1], [-2, 1], [1, -1]])
     result = bayes_stats.ssr(x, y, beta)
     np.testing.assert_array_equal(result, 31)
 def test_ssr_zeros(self):
     x = np.array([[0, 0, 0, 0], [0, 0, 0, 0]])
     y = np.array([[0, 0], [0, 0]])
     beta = np.array([[0, 0], [0, 0], [0, 0], [0, 0]])
     result = bayes_stats.ssr(x, y, beta)
     np.testing.assert_array_equal(result, 0)