Буду признателен за любую помощь в этом:
- для каждого
P
соответствует модели для каждого столбца weights
.
- выполните шаг 1 для всех наблюдений в наборе данных, чтобы получить
p * w
подмоделей, где p
- это число P
, а w
- это число
столбцы weights
.
- объединить результаты путем объединения задних образцов
подмодели.
Аналогичная реализация brms
доступна здесь , также обсуждается здесь . Но это допускает только включение неопределенности, возникающей в результате многократного вменения P
. Я хочу учесть неопределенность, которая исходит также из оценки weights
.
@paul.buerkner говорит там , что мы могли бы также extract those data sets and then pass them to the actual model fitting function as a list of data frames
. Используя этот подход, решением, вероятно, будет передача моих отдельных p * w
фреймов данных, каждый из которых имеет p=1
и w=1
. Тем не менее, неясно, как на практике список этих фреймов данных может быть передан в функцию подбора модели.
В моем случае, кратно вмененные значения предикторов представлены в длинном формате, причем каждый этап вменения представлен значением переменной P
, а набор weights
, оцененный для каждого P
, равен в широком формате и представлены переменными от w_1
до w_10
.
Здесь также обсуждается stan
подход здесь . Для этого требуется вызвать "stan by parallel , и он возвращает список объектов stanfit", а затем использовать sflist2stanfit
для создания одного объекта stanfit из списка. Здесь проблема в том, что мне нужно разделить мой фрейм данных на p * w = 50
или более чем на 100 наборов данных (если я увеличу количество импутаций P
до более 10, как обычно рекомендуется), каждый с p=1
и w=1
.
Следуя рекомендации @ BobCarpenter, ниже я представлю свою попытку распараллелить вероятность. Кажется, что этот подход мог бы позволить мне объяснить один из источников неопределенности отдельно, но не оба вместе, как предполагалось. Здесь я не уверен, как указать блок transformed parameters
и likelihood
для учета неопределенности также из P
.
Любая помощь в улучшении и / или исправлении моей нынешней попытки достичь моей цели будет принята с благодарностью. Любой вклад в реализацию любого из других подходов, обсужденных выше, также будет высоко оценен. Я прошу прощения, если вы найдете какие-либо основные ошибки в моем коде. Несмотря на то, что я уверен в том, что я хочу сделать и почему, стандартная реализация моих идей все еще остается сложной - все еще учусь.
# модель
data{
int N;
int P;
int ncases[N];
int A[N];
int B[N];
int nn[N];
int id[N];
real w_1[N];
real w_2[N];
real w_3[N];
real w_4[N];
real w_5[N];
real w_6[N];
real w_7[N];
real w_8[N];
real w_9[N];
real w_10[N];
}
parameters {
real beta_0;
real beta_1;
real beta_2;
real beta_3;
}
transformed parameters {
vector[N] pp_hat;
vector[N] odds;
for (i in 1:N) {
odds[i] = exp(beta_0) * (1 + beta_1*A[i] + beta_2*B[i] + beta_3*A[i]*B[i]);
pp_hat[i] = odds[i]/(1 + odds[i]);
}
}
model {
beta_0 ~ normal(0, 5);
beta_1 ~ normal(0, 5);
beta_2 ~ normal(0, 5);
beta_3 ~ normal(0, 5);
for (i in 1:N){
target += w_1[i] * binomial_lpmf(ncases[i] | nn[i], pp_hat[i]);
target += w_2[i] * binomial_lpmf(ncases[i] | nn[i], pp_hat[i]);
target += w_3[i] * binomial_lpmf(ncases[i] | nn[i], pp_hat[i]);
target += w_4[i] * binomial_lpmf(ncases[i] | nn[i], pp_hat[i]);
target += w_5[i] * binomial_lpmf(ncases[i] | nn[i], pp_hat[i]);
target += w_6[i] * binomial_lpmf(ncases[i] | nn[i], pp_hat[i]);
target += w_7[i] * binomial_lpmf(ncases[i] | nn[i], pp_hat[i]);
target += w_8[i] * binomial_lpmf(ncases[i] | nn[i], pp_hat[i]);
target += w_9[i] * binomial_lpmf(ncases[i] | nn[i], pp_hat[i]);
target += w_10[i] * binomial_lpmf(ncases[i] | nn[i], pp_hat[i]);
}
}
Заранее спасибо.