ошибка иерархической линейной регрессии в python - PullRequest
0 голосов
/ 30 мая 2020
    with pm.Model() as hierarchical_model:
        # Hyperpriors for group nodes
        mu_a = pm.Normal('mu_a', mu=0., sigma=100)
        sigma_a = pm.HalfNormal('sigma_a', 5.)
        mu_b = pm.Normal('mu_b', mu=0., sigma=100)
        sigma_b = pm.HalfNormal('sigma_b', 5.)
        mu_c = pm.Normal('mu_c', mu=0., sigma=100)
        sigma_c = pm.HalfNormal('sigma_c', 5.)
        mu_d = pm.Normal('mu_d', mu=0., sigma=100)
        sigma_d = pm.HalfNormal('sigma_d', 5.)
        mu_e = pm.Normal('mu_e', mu=0., sigma=100)
        sigma_e = pm.HalfNormal('sigma_e', 5.)
        mu_f = pm.Normal('mu_f', mu=0., sigma=100)
        sigma_f = pm.HalfNormal('sigma_f', 5.)

        # Intercept for each county, distributed around group mean mu_a
        # Above we just set mu and sd to a fixed value while here we
        # plug in a common group distribution for all a and b (which are
        # vectors of length n_counties).
        a = pm.Normal('a', mu=mu_a, sigma=sigma_a, shape=n_school)
        # Intercept for each county, distributed around group mean mu_a
        b = pm.Normal('b', mu=mu_b, sigma=sigma_b, shape=n_school)
        c = pm.Normal('c', mu=mu_c, sigma=sigma_c, shape=n_school)
        d = pm.Normal('d', mu=mu_d, sigma=sigma_d, shape=n_school)
        e = pm.Normal('e', mu=mu_e, sigma=sigma_e, shape=n_school)
        f = pm.Normal('f', mu=mu_f, sigma=sigma_f, shape=n_school)

        # Model error
        eps = pm.HalfCauchy('eps', 5.)

        test_score_est = a[school_idx] + b[school_idx]*df.student_ses.values+ c[school_idx]*df.student_iq.values+ d[school_idx]*df.school_avrg._ses.values+ e[school_idx]*df.school_avrg._iq.values+ f[school_idx]*df.student_gender_0.values

        # Data likelihood
        test_like = pm.Normal('test_like', mu=test_score_est,
                               sigma=eps, observed=df.test_score)

Я получаю следующую ошибку:

OUTPUT: IndexError: index 211 is out of bounds for size 211

** Привет. Я получаю эту ошибку из-за иерархического регресса. n_school = 211 почему я получаю такую ​​ошибку? Буду признателен, если вы мне поможете. Заранее всем спасибо.

ниже я предоставляю информацию о том, как вычислить n_school и school_idx. **

school_idx=df.school_id.values
n_school=len(df.school_id.unique())
OUTPUT= n_school=211

1 Ответ

0 голосов
/ 30 мая 2020

Python проиндексировано 0, у вас есть 211 элементов в списке, таком как структура данных, содержимое будет в индексах [0,1,2,..,210] у вас есть несоответствие размера где-то, скорее всего, исходя из этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...