Skip to content

Request for vector return from normal_cdf given vector arguments #2468

@adkinsty

Description

@adkinsty

I wish to execute the normal CDF on vector inputs to obtain a vector of cumulative probabilities. However, I am getting a dimension mismatch error. The error says the return on the right-hand side is of type “real”. The Stan documentation says that the cdf function accepts “reals” arguments and has “reals” returns. I thought this psuedotype “reals” included vectors yet it appears to be returning a scalar.

Example code:

vector[N] mu;
vector[N] sigma;
vector[N] x;
vector[N] phi;

phi = normal_cdf(x, mu, sigma);

Example error:

SYNTAX ERROR, MESSAGE(S) FROM PARSER:
Dimension mismatch in assignment; variable name = phi, type = vector; right-hand side type = real.
Illegal statement beginning with non-void expression parsed as
  phi

Activity

SteveBronder

SteveBronder commented on Apr 11, 2021

@SteveBronder
Collaborator

Yes all the lpdf and cdf functions return back a scalar. A real in the stan language is a scalar

It would be nice to have a vlpdf style function that returned a vector but we haven't had time to implement it

spinkney

spinkney commented on Apr 11, 2021

@spinkney
Collaborator

This would be nice to have for all the copula stuff as well. As the copulas use the marginal cdfs evaluated at each data point.

wds15

wds15 commented on Apr 12, 2021

@wds15
Contributor

But I think there would not really be a performance gain..so these functions can live in Stan language is what I would think.

spinkney

spinkney commented on Apr 12, 2021

@spinkney
Collaborator

But I think there would not really be a performance gain..so these functions can live in Stan language is what I would think.

+1 ^

also, the row/col-wise framework proposed by @andrjohns would solve this issue.

wlandau

wlandau commented on Jan 25, 2023

@wlandau

This feature would really help when we need access to individual observation-level log likelihoods but still want to take advantage of the vectorization in the _lpdf functions. Example: https://arxiv.org/abs/2209.09190

hansvancalster

hansvancalster commented on Sep 23, 2024

@hansvancalster

It would also help in case of interval censoring. See this comment: paul-buerkner/brms#1657 (comment)

SteveBronder

SteveBronder commented on Sep 23, 2024

@SteveBronder
Collaborator

I have a PR that examples how we can do this. The main thing is it's a huge rewrite of our distributions that would be a lot of elbow grease effort. It would be nice to have a Stan hackathon to go through the distributions with people and do this split up over several people. We also need a test suite change so that all these are tested for vector returns

#2751

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @wlandau@SteveBronder@wds15@adkinsty@hansvancalster

        Issue actions

          Request for vector return from normal_cdf given vector arguments · Issue #2468 · stan-dev/math