Что означает двоеточие в Стэне? - PullRequest
0 голосов
/ 16 сентября 2018

Я новичок в программировании на Stan и пытаюсь проработать какой-то код, который я нашел в сети: https://modernstatisticalworkflow.blogspot.com/2017/11/bayesian-instrumental-variables-with.html

data {
  int N;
  int PX; // dimension of exogenous covariates
  int PN; // dimension of endogenous covariates
  int PZ; // dimension of instruments
  matrix[N, PX] X_exog; // exogenous covariates
  matrix[N, PN] X_endog; // engogenous covariates
  matrix[N, PZ] Z; // instruments
  vector[N] Y_outcome; // outcome variable
  int<lower=0,upper=1> run_estimation; // simulate (0) or estimate (1)
}
transformed data {
  matrix[N, 1 + PN] Y;
  Y[,1] = Y_outcome;
  Y[,2:] = X_endog;
}
parameters {
  vector[PX + PN] gamma1;
  matrix[PX + PZ, PN] gamma2;
  vector[PN + 1] alpha;
  vector<lower = 0>[1 + PN] scale;
  cholesky_factor_corr[1 + PN] L_Omega;
}
transformed parameters {
  matrix[N, 1 + PN] mu; // the conditional means of the process

  mu[:,1] = rep_vector(alpha[1], N) + append_col(X_endog,X_exog)*gamma1;
  mu[:,2:] = rep_matrix(alpha[2:]', N) + append_col(X_exog, Z)*gamma2;

}

Это начало модели инструментальных переменных.В разделе «преобразованные параметры» я не совсем уверен, что «:» делает в строках:

 mu[:,1] = rep_vector(alpha[1], N) + append_col(X_endog,X_exog)*gamma1;
  mu[:,2:] = rep_matrix(alpha[2:]', N) + append_col(X_exog, Z)*gamma2; 

Сообщает ли Стэн, что это должно повторяться по существующим строкам / столбцам?

1 Ответ

0 голосов
/ 16 сентября 2018

Как правило, двоеточие обозначает последовательность последовательных целых чисел (если только она не используется как часть троичного оператора).Обычно вы видите его с целыми числами с обеих сторон цвета, например for (n in 1:N) {...}.Тем не менее, в разделе 27.2 Руководства пользователя Stan описано подмножество массивов, векторов, матриц и т. Д. С «односторонними» целочисленными последовательностями, такими как

. Также можно указать только нижнюю границу или простоверхняя граница.Запись c[3:] - это просто сокращение для c[3:size(c)].Запись c[:5] - это просто сокращение для c[1:5].

. Кроме того, в руководстве пользователя Stan описывается подстановка целочисленных последовательностей с нулевой стороной как

Наконец, этоМожно написать индекс диапазона, который охватывает весь диапазон массива, либо просто включив в качестве индекса только символ диапазона (:), либо оставив позицию индекса пустой.В обоих случаях c[] и c[:] равны c[1:size(c)], что в свою очередь равно c.

Таким образом, mu[:,2:] = эквивалентно mu[ , 2:cols(mu)] = изаполняет все строки для всех, кроме первого столбца, с (под) матрицей в правой части оператора присваивания.

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