/*
* Multiple Linear Regression
* -----------------------------------------------------
* Copyright: Murat Koptur <muratkoptur@yandex.com>
* Date: 06/08/2018
* License: GPLv3
*/

data {
  int<lower=0> N; // number of observations
  vector[N] fat; // grams of fat
  vector[N] weight; // weight in ounces of one serving
  vector[N] cups; // number of cups in one serving
  vector[N] rating; // a rating of the cereals
}

parameters {
  real b_fat; // coefficents
  real b_weight;
  real b_cups;
  real beta;
  real<lower=0> sigma; // std deviation
}

model {
  b_fat ~ normal(0, 10);
  b_weight ~ normal(0, 10);
  b_cups ~ normal(0, 10);
  beta ~ normal(0, 10);
  sigma ~ cauchy(0, 5);
  rating ~ normal(beta + b_fat * fat + b_weight * weight +
                  b_cups * cups, sigma);
}

generated quantities {
  real rating_pred[N]; // predictions
  real log_lik[N];
  for (n in 1:N)
    rating_pred[n] = normal_rng(beta + b_fat * fat[n] + b_weight * weight[n] +
                                b_cups * cups[n], sigma);
  for (n in 1:N)
    log_lik[n] = normal_lpdf(rating[n] | beta + b_fat * fat[n] + b_weight * weight[n] + 
                                         b_cups * cups[n], sigma);
}