1 #ifndef __STAN__PROB__DISTRIBUTIONS__PARETO_HPP__
2 #define __STAN__PROB__DISTRIBUTIONS__PARETO_HPP__
16 template <
bool propto,
17 typename T_y,
typename T_scale,
typename T_shape,
19 typename return_type<T_y,T_scale,T_shape>::type
20 pareto_log(
const T_y& y,
const T_scale& y_min,
const T_shape& alpha,
22 static const char*
function =
"stan::prob::pareto_log(%1%)";
41 if (!
check_not_nan(
function, y,
"Random variable", &logp, Policy()))
57 "Random variable",
"Scale parameter",
"Shape parameter",
68 size_t N =
max_size(y, y_min, alpha);
70 for (
size_t n = 0; n < N; n++) {
71 if (y_vec[n] < y_min_vec[n])
80 for (
size_t n = 0; n <
length(y); n++)
84 for (
size_t n = 0; n <
length(y); n++)
89 for (
size_t n = 0; n <
length(y_min); n++)
93 for (
size_t n = 0; n <
length(alpha); n++)
98 for (
size_t n = 0; n <
length(alpha); n++)
99 inv_alpha[n] = 1 /
value_of(alpha_vec[n]);
103 for (
size_t n = 0; n < N; n++) {
104 const double alpha_dbl =
value_of(alpha_vec[n]);
107 logp += log_alpha[n];
109 logp += alpha_dbl * log_y_min[n];
111 logp -= alpha_dbl * log_y[n] + log_y[n];
115 operands_and_partials.
d_x1[n] -= alpha_dbl * inv_y[n] + inv_y[n];
117 operands_and_partials.
d_x2[n] += alpha_dbl /
value_of(y_min_vec[n]);
119 operands_and_partials.
d_x3[n] += 1 / alpha_dbl + log_y_min[n] - log_y[n];
121 return operands_and_partials.
to_var(logp);
125 template <
bool propto,
126 typename T_y,
typename T_scale,
typename T_shape>
129 pareto_log(
const T_y& y,
const T_scale& y_min,
const T_shape& alpha) {
133 template <
typename T_y,
typename T_scale,
typename T_shape,
137 pareto_log(
const T_y& y,
const T_scale& y_min,
const T_shape& alpha,
139 return pareto_log<false>(y,y_min,alpha,Policy());
142 template <
typename T_y,
typename T_scale,
typename T_shape>
145 pareto_log(
const T_y& y,
const T_scale& y_min,
const T_shape& alpha) {