1818namespace stan {
1919namespace math {
2020
21- /* * \ingroup multivar_dists
21+ /* * \ingroup prob_dists
2222 * Returns the log PMF of the Generalized Linear Model (GLM)
2323 * with Binomial distribution and logit link function.
2424 * The idea is that binomial_logit_glm_lpmf(n | N, x, alpha, beta) should
@@ -93,27 +93,27 @@ return_type_t<T_x, T_alpha, T_beta> binomial_logit_glm_lpmf(
9393 check_consistent_size (function, " Weight vector" , beta, N_attributes);
9494 check_consistent_size (function, " Vector of intercepts" , alpha, N_instances);
9595
96- const auto & n_val = as_value_column_array_or_scalar (n_ref);
97- const auto & N_val = as_value_column_array_or_scalar (N_ref);
96+ auto & & n_val = as_value_column_array_or_scalar (n_ref);
97+ auto & & N_val = as_value_column_array_or_scalar (N_ref);
9898
9999 check_bounded (function, " Successes variable" , n_val, 0 , N_val);
100100 check_nonnegative (function, " Population size parameter" , N_val);
101101
102- const auto & alpha_val = as_value_column_array_or_scalar (alpha_ref);
103- const auto & beta_val = as_value_column_vector_or_scalar (beta_ref);
104- const auto & x_val = value_of (x_ref);
102+ auto & & alpha_val = as_value_column_array_or_scalar (alpha_ref);
103+ auto & & beta_val = as_value_column_vector_or_scalar (beta_ref);
104+ auto & & x_val = value_of (x_ref);
105105 Eigen::Array<T_partials_return, -1 , 1 > theta (N_instances);
106106 if (T_x_rows == 1 ) {
107107 theta = forward_as<T_xbeta_tmp>((x_val * beta_val)(0 , 0 )) + alpha_val;
108108 } else {
109109 theta = (x_val * beta_val).array () + alpha_val;
110110 }
111111
112- const auto & log_inv_logit_theta = log_inv_logit (theta) ;
113- const auto & log1m_inv_logit_theta = log1m_inv_logit ( theta);
112+ constexpr bool gradients_calc = !is_constant_all<T_beta, T_x, T_alpha>::value ;
113+ auto && log_inv_logit_theta = to_ref_if<gradients_calc>( log_inv_logit ( theta) );
114114
115115 T_partials_return logp = sum (n_val * log_inv_logit_theta
116- + (N_val - n_val) * log1m_inv_logit_theta );
116+ + (N_val - n_val) * log1m_inv_logit (theta) );
117117
118118 using std::isfinite;
119119 if (!isfinite (logp)) {
@@ -128,8 +128,7 @@ return_type_t<T_x, T_alpha, T_beta> binomial_logit_glm_lpmf(
128128 }
129129
130130 auto ops_partials = make_partials_propagator (x_ref, alpha_ref, beta_ref);
131-
132- if (!is_constant_all<T_beta, T_x, T_alpha>::value) {
131+ if (gradients_calc) {
133132 Eigen::Matrix<T_partials_return, -1 , 1 > theta_derivative
134133 = n_val - N_val * exp (log_inv_logit_theta);
135134
0 commit comments