From 9aebfd36db392ae30ad908b83e9a9a66c80168e6 Mon Sep 17 00:00:00 2001 From: Ben Bales Date: Wed, 19 Apr 2017 11:55:00 -0700 Subject: [PATCH] Added Stan hooks for categorical_logit_rng (feature 517) --- src/docs/stan-reference/distributions.tex | 8 ++++++-- src/docs/stan-reference/examples.tex | 2 +- src/stan/lang/function_signatures.h | 1 + .../good/function-signatures/distributions/rngs.stan | 1 + 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/docs/stan-reference/distributions.tex b/src/docs/stan-reference/distributions.tex index f25dc71f773..f144db5b120 100644 --- a/src/docs/stan-reference/distributions.tex +++ b/src/docs/stan-reference/distributions.tex @@ -642,8 +642,12 @@ \subsubsection{Stan Functions} categorical variate with $N$-simplex distribution parameter \farg{theta}; may only be used in generated quantities block} \end{description} - - +% +\begin{description} +\fitem{int}{categorical\_logit\_rng}{vector \farg{beta}}{Generate a + categorical variate with outcome in range $1:N$ from log-odds vector +\farg{beta}; may only be used in generated quantities block} +\end{description} \section{Ordered Logistic Distribution} diff --git a/src/docs/stan-reference/examples.tex b/src/docs/stan-reference/examples.tex index c74471269cd..147c4cbce84 100644 --- a/src/docs/stan-reference/examples.tex +++ b/src/docs/stan-reference/examples.tex @@ -5145,7 +5145,7 @@ \subsection{Discrete Sampling} \begin{stancode} generated quantities { int s; - s = categorical_rng(softmax(lp)); + s = categorical_logit_rng(lp); } \end{stancode} % diff --git a/src/stan/lang/function_signatures.h b/src/stan/lang/function_signatures.h index b0a0c98cba7..67cc89befdb 100644 --- a/src/stan/lang/function_signatures.h +++ b/src/stan/lang/function_signatures.h @@ -161,6 +161,7 @@ for (size_t i = 0; i < int_vector_types.size(); ++i) { VECTOR_T); } add("categorical_rng", INT_T, VECTOR_T); +add("categorical_logit_rng", INT_T, VECTOR_T); for (size_t i = 0; i < vector_types.size(); ++i) { for (size_t j = 0; j < vector_types.size(); ++j) { for (size_t k = 0; k < vector_types.size(); ++k) { diff --git a/src/test/test-models/good/function-signatures/distributions/rngs.stan b/src/test/test-models/good/function-signatures/distributions/rngs.stan index 46347b5f071..cd7bd7cf2a9 100644 --- a/src/test/test-models/good/function-signatures/distributions/rngs.stan +++ b/src/test/test-models/good/function-signatures/distributions/rngs.stan @@ -29,6 +29,7 @@ generated quantities { n <- poisson_log_rng(2.7); n <- categorical_rng(theta); + n <- categorical_logit_rng(theta); ns <- multinomial_rng(theta,20); z <- normal_rng(0,1);