Я новичок в Stan и вероятностном программировании. Я пытаюсь построить нелинейную модель роста. Я был в состоянии построить модель в NLS
Построение нелинейной экспоненциальной модели - использование вектора или реального?
Формула NLS я использовал: Trump_Pct ~ alpha - beta * lambda^Population
Мое резюме NLS является:
Parameters:
Estimate Std. Error t value Pr(>|t|)
alpha 5.627e+01 2.053e+00 27.41 <2e-16 ***
beta 3.018e+01 1.974e+00 15.29 <2e-16 ***
lambda 9.981e-01 2.486e-04 4014.47 <2e-16 ***
Другими словами, основной экспоненциальной кривой затухания. Я пытаюсь повторить со Стэном.
Мои данные следующим образом:
У меня есть N
наблюдения в наборе данных: Предсказатель является население округа («населения») и предсказанным Y является процент голосов в Trump «Trump_Pct».
Я пробовал два способа построения этой модели.
В одном я передаю каждому компоненту данные в модель в виде вектора.
В другом случае я оставляю каждый компонент данных в виде списка и пытаюсь использовать каждую точку данных.
Я не могу в любом случае, чтобы модель успешно работала.
Вот мои модели:
Случай 1:
Это адаптация this model.
Здесь я создал векторизованные версии столбцов Trump_Pct и Population.
data {
int N;
vector[N] PopulationV;
vector[N] Trump_PctV;
}
parameters {
vector [1] alpha;
vector [1] beta;
vector [1] lambda;
real<lower=0> sigma;
}
model {
vector[N] ypred;
ypred = alpha[1] - beta[1] * (lambda[1]^PopulationV);
Trump_PctV ~ ypred + sigma;
}
Эта модель не в соответствии с показателем по следующей причине:
`Синтаксическая ошибка, MESSAGE (S) ОТ PARSER:
аргументы^должны быть примитивным (реальный или ИНТ); не может быть экспоненциальным по вектору в блоке = местный
Я пробовал использовать pow()
, но не могу найти способ двигаться вперед. Какие-нибудь советы?
Случай 2:
data {
int<lower=0> N;
real <lower=0> Population[N];
real <lower=0> Trump_Pct[N];
}
parameters {
real alpha;
real beta;
real<lower=3,upper= 4> lambda;
real<lower=0> tau;
}
transformed parameters {
real sigma;
sigma = 1/sqrt(tau);
}
model {
real m[N];
for (i in 1:N)
m[i] = alpha - beta * pow(lambda, Population[i]);
Trump_Pct ~ normal(m, sigma);
alpha ~ normal(10, 20);
beta ~ normal(5, 10);
lambda ~ uniform(3, 4);
tau ~ gamma(.0001, .0001);
}
В случае 2, я не в состоянии держать оценки параметров в пределах:
"Informational Message: The current Metropolis proposal is about to be rejected because of the following issue:"
[2] "Exception thrown at line 21: normal_log: Location parameter[2873] is -inf, but must be finite!"
Может кто-нибудь посоветовать для простого нелинейного модель моей формулы?
Помещение 'lambda ~ uniform (3, 4);' в блок модели не требуется, потому что это подразумевается под «real lambda;'. Тем не менее, единообразные перья не рекомендуются в Стэне. То же самое можно сказать и для tau ~ gamma (.0001, .0001), которая почти однородна в широком диапазоне положительных вещественных чисел, но имеет очень резкую кривизну вблизи нуля. В Стэне есть рекомендации для авторов в https://github.com/stan-dev/stan/wiki/Prior-Choice-Recommendations. Наконец, функция «brm» в пакете brms позволяет вам указать модель аналогично «nls». –