Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[bug] default_prior does not work with grouped random effects #201

Closed
GidonFrischkorn opened this issue Apr 4, 2024 · 2 comments · Fixed by #206
Closed

[bug] default_prior does not work with grouped random effects #201

GidonFrischkorn opened this issue Apr 4, 2024 · 2 comments · Fixed by #206
Assignees
Labels
bug Something isn't working
Milestone

Comments

@GidonFrischkorn
Copy link
Collaborator

Describe the bug
When using a bmmformula that includes grouped random effects, such as the formula we use in the second example of our Tutorial manuscript:

LS_formula <- bmf(
  kappa ~ 0 + ageGroup:RI:cueCond + (0 + RI:cueCond || gr(id, by = ageGroup)), 
  thetat ~ 0 + ageGroup:RI:cueCond + (0 + RI:cueCond || gr(id, by = ageGroup))
)

then the default_prior function does not parse these effects correctly. As a result it only sets priors on the whole formula, as it does not recognize the gr() commond around the grouping variable ID.

To Reproduce
Using the wmData of the second example, you can reproduce the error specifying the following bmmodel and bmf:

LS_model <- mixture2p(resp_error = "dev_rad")
LS_formula <- bmf(
  kappa ~ 0 + ageGroup:RI:cueCond + (0 + RI:cueCond || gr(id, by = ageGroup)), 
  thetat ~ 0 + ageGroup:RI:cueCond + (0 + RI:cueCond || gr(id, by = ageGroup))
)
default_priors(LS_formula, data = wmData, model = LS_model)

Here is a screenshot from the output:
image

Expected behavior
If implemented correctly, the bmm default priors specified in the bmmodel should be applied to the flat priors listed in the output.

@GidonFrischkorn GidonFrischkorn added the bug Something isn't working label Apr 4, 2024
@venpopov
Copy link
Owner

venpopov commented Apr 4, 2024

Strange. I can look into it

@venpopov
Copy link
Owner

venpopov commented Apr 7, 2024

Ok, this is not a problem with the grouped random effects, but a problem when there are random effects and an interaction only fixed effects:

data <- oberauer_lin_2017
model <- mixture2p('dev_rad')

# this is fine
formula <- bmf(
  kappa ~ 0 + set_size*session + (1|ID),
  thetat ~ 0 + set_size*session + (1|ID)
)

default_prior(formula, data, model)
#>                 prior     class               coef group resp   dpar  nlpar   lb   ub       source     link
#>        logistic(0, 1)    theta2                                             -Inf  Inf      default identity
#>          normal(0, 1)         b           session2                    kappa <NA> <NA> (vectorized) identity
#>          normal(0, 1)         b set_size2:session2                    kappa <NA> <NA> (vectorized) identity
#>          normal(0, 1)         b set_size3:session2                    kappa <NA> <NA> (vectorized) identity
#>          normal(0, 1)         b set_size4:session2                    kappa <NA> <NA> (vectorized) identity
#>          normal(0, 1)         b set_size5:session2                    kappa <NA> <NA> (vectorized) identity
#>          normal(0, 1)         b set_size6:session2                    kappa <NA> <NA> (vectorized) identity
#>          normal(0, 1)         b set_size7:session2                    kappa <NA> <NA> (vectorized) identity
#>          normal(0, 1)         b set_size8:session2                    kappa <NA> <NA> (vectorized) identity
#>  student_t(3, 0, 2.5)        sd                                       kappa    0           default identity
#>  student_t(3, 0, 2.5)        sd                       ID              kappa    0      (vectorized) identity
#>  student_t(3, 0, 2.5)        sd          Intercept    ID              kappa    0      (vectorized) identity
#>                (flat)         b                                      thetat                default identity
#>                (flat)         b           session2                   thetat           (vectorized) identity
#>                (flat)         b set_size2:session2                   thetat           (vectorized) identity
#>                (flat)         b set_size3:session2                   thetat           (vectorized) identity
#>                (flat)         b set_size4:session2                   thetat           (vectorized) identity
#>                (flat)         b set_size5:session2                   thetat           (vectorized) identity
#>                (flat)         b set_size6:session2                   thetat           (vectorized) identity
#>                (flat)         b set_size7:session2                   thetat           (vectorized) identity
#>                (flat)         b set_size8:session2                   thetat           (vectorized) identity
#>  student_t(3, 0, 2.5)        sd                                      thetat    0           default identity
#>  student_t(3, 0, 2.5)        sd                       ID             thetat    0      (vectorized) identity
#>  student_t(3, 0, 2.5)        sd          Intercept    ID             thetat    0      (vectorized) identity
#>          normal(0, 1)         b                                       kappa <NA> <NA>         user identity
#>          normal(2, 1)         b          set_size1                    kappa <NA> <NA>         user identity
#>          normal(2, 1)         b          set_size2                    kappa <NA> <NA>         user identity
#>          normal(2, 1)         b          set_size3                    kappa <NA> <NA>         user identity
#>          normal(2, 1)         b          set_size4                    kappa <NA> <NA>         user identity
#>          normal(2, 1)         b          set_size5                    kappa <NA> <NA>         user identity
#>          normal(2, 1)         b          set_size6                    kappa <NA> <NA>         user identity
#>          normal(2, 1)         b          set_size7                    kappa <NA> <NA>         user identity
#>          normal(2, 1)         b          set_size8                    kappa <NA> <NA>         user identity
#>        logistic(0, 1)         b          set_size1                   thetat <NA> <NA>         user identity
#>        logistic(0, 1)         b          set_size2                   thetat <NA> <NA>         user identity
#>        logistic(0, 1)         b          set_size3                   thetat <NA> <NA>         user identity
#>        logistic(0, 1)         b          set_size4                   thetat <NA> <NA>         user identity
#>        logistic(0, 1)         b          set_size5                   thetat <NA> <NA>         user identity
#>        logistic(0, 1)         b          set_size6                   thetat <NA> <NA>         user identity
#>        logistic(0, 1)         b          set_size7                   thetat <NA> <NA>         user identity
#>        logistic(0, 1)         b          set_size8                   thetat <NA> <NA>         user identity
#>           constant(0) Intercept                                  mu1        <NA> <NA>         user tan_half
#>           constant(0) Intercept                                  mu2        <NA> <NA>         user identity
#>        constant(-100) Intercept                               kappa2        <NA> <NA>         user identity


# this is not fine
formula <- bmf(
  kappa ~ 0 + set_size:session + (1|ID),
  thetat ~ 0 + set_size:session + (1|ID)
)

default_prior(formula, data, model)
#>                 prior     class               coef group resp   dpar  nlpar   lb   ub       source     link
#>        logistic(0, 1)    theta2                                             -Inf  Inf      default identity
#>                (flat)         b                                       kappa                default identity
#>                (flat)         b set_size1:session1                    kappa           (vectorized) identity
#>                (flat)         b set_size1:session2                    kappa           (vectorized) identity
#>                (flat)         b set_size2:session1                    kappa           (vectorized) identity
#>                (flat)         b set_size2:session2                    kappa           (vectorized) identity
#>                (flat)         b set_size3:session1                    kappa           (vectorized) identity
#>                (flat)         b set_size3:session2                    kappa           (vectorized) identity
#>                (flat)         b set_size4:session1                    kappa           (vectorized) identity
#>                (flat)         b set_size4:session2                    kappa           (vectorized) identity
#>                (flat)         b set_size5:session1                    kappa           (vectorized) identity
#>                (flat)         b set_size5:session2                    kappa           (vectorized) identity
#>                (flat)         b set_size6:session1                    kappa           (vectorized) identity
#>                (flat)         b set_size6:session2                    kappa           (vectorized) identity
#>                (flat)         b set_size7:session1                    kappa           (vectorized) identity
#>                (flat)         b set_size7:session2                    kappa           (vectorized) identity
#>                (flat)         b set_size8:session1                    kappa           (vectorized) identity
#>                (flat)         b set_size8:session2                    kappa           (vectorized) identity
#>  student_t(3, 0, 2.5)        sd                                       kappa    0           default identity
#>  student_t(3, 0, 2.5)        sd                       ID              kappa    0      (vectorized) identity
#>  student_t(3, 0, 2.5)        sd          Intercept    ID              kappa    0      (vectorized) identity
#>                (flat)         b                                      thetat                default identity
#>                (flat)         b set_size1:session1                   thetat           (vectorized) identity
#>                (flat)         b set_size1:session2                   thetat           (vectorized) identity
#>                (flat)         b set_size2:session1                   thetat           (vectorized) identity
#>                (flat)         b set_size2:session2                   thetat           (vectorized) identity
#>                (flat)         b set_size3:session1                   thetat           (vectorized) identity
#>                (flat)         b set_size3:session2                   thetat           (vectorized) identity
#>                (flat)         b set_size4:session1                   thetat           (vectorized) identity
#>                (flat)         b set_size4:session2                   thetat           (vectorized) identity
#>                (flat)         b set_size5:session1                   thetat           (vectorized) identity
#>                (flat)         b set_size5:session2                   thetat           (vectorized) identity
#>                (flat)         b set_size6:session1                   thetat           (vectorized) identity
#>                (flat)         b set_size6:session2                   thetat           (vectorized) identity
#>                (flat)         b set_size7:session1                   thetat           (vectorized) identity
#>                (flat)         b set_size7:session2                   thetat           (vectorized) identity
#>                (flat)         b set_size8:session1                   thetat           (vectorized) identity
#>                (flat)         b set_size8:session2                   thetat           (vectorized) identity
#>  student_t(3, 0, 2.5)        sd                                      thetat    0           default identity
#>  student_t(3, 0, 2.5)        sd                       ID             thetat    0      (vectorized) identity
#>  student_t(3, 0, 2.5)        sd          Intercept    ID             thetat    0      (vectorized) identity
#>          normal(2, 1)         b             1 | ID                    kappa <NA> <NA>         user identity
#>        logistic(0, 1)         b             1 | ID                   thetat <NA> <NA>         user identity
#>           constant(0) Intercept                                  mu1        <NA> <NA>         user tan_half
#>           constant(0) Intercept                                  mu2        <NA> <NA>         user identity
#>        constant(-100) Intercept                               kappa2        <NA> <NA>         user identity

Created on 2024-04-07 with reprex v2.1.0

@venpopov venpopov self-assigned this Apr 7, 2024
@venpopov venpopov added this to the 1.0.0 milestone Apr 7, 2024
venpopov added a commit that referenced this issue Apr 7, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants