Genentech / jmpost

https://genentech.github.io/jmpost/
17 stars 4 forks source link

Logit-Normal parameterisation for GSF Phi #375

Closed gowerc closed 3 months ago

gowerc commented 3 months ago

Closes #374

A bit messy just because the GSF distribution is used all over the place so had to edit a lot of testing locations.

The implementation is slightly different compared to the other parameters. This is because Stan doesn't have a native logit-normal distribution. Some of their articles recommend implementing logit-normal via:

logit(phi) ~ normal(mu, sigma)

Problem is if you do it this way you need to apply a Jacobian adjustment which I didn't want to mess around with. So to avoid that instead of having phi as the parameter I have phi_logit as the parameter (thus placing the prior on phi_logit) and then transform it to the required value via phi = inv_logit(phi_logit)

github-actions[bot] commented 3 months ago

badge

Code Coverage Summary

Filename                           Stmts    Miss  Cover    Missing
-------------------------------  -------  ------  -------  --------------------------------
R/brier_score.R                      167       0  100.00%
R/DataJoint.R                         76       2  97.37%   264, 270
R/DataLongitudinal.R                 119       1  99.16%   244
R/DataSubject.R                       85       1  98.82%   142
R/DataSurvival.R                      98       0  100.00%
R/defaults.R                          10       6  40.00%   18-57, 84
R/generics.R                          33       4  87.88%   52, 396, 416, 471
R/Grid.R                              27       1  96.30%   173
R/GridEven.R                          32       0  100.00%
R/GridEvent.R                         22       0  100.00%
R/GridFixed.R                         30       0  100.00%
R/GridGrouped.R                       52       0  100.00%
R/GridManual.R                        23       3  86.96%   78-80
R/GridObserved.R                      20       0  100.00%
R/GridPopulation.R                    31       4  87.10%   61, 69-71
R/GridPrediction.R                    36       6  83.33%   83, 91-95
R/JointModel.R                       126      10  92.06%   146-151, 201, 205, 247, 293, 299
R/JointModelSamples.R                 66       0  100.00%
R/link_generics.R                     13       3  76.92%   59, 76, 91
R/Link.R                              62       4  93.55%   200-203
R/LinkComponent.R                     19       3  84.21%   88, 120-121
R/LongitudinalClaretBruno.R           83       6  92.77%   156-160, 175
R/LongitudinalGSF.R                   84       0  100.00%
R/LongitudinalModel.R                 19       0  100.00%
R/LongitudinalQuantities.R            71       0  100.00%
R/LongitudinalRandomSlope.R           42       5  88.10%   98-102
R/LongitudinalSteinFojo.R             76       5  93.42%   149-153
R/Parameter.R                         14       0  100.00%
R/ParameterList.R                     42       1  97.62%   184
R/Prior.R                            236       8  96.61%   481, 577, 589-607
R/Promise.R                           25       0  100.00%
R/Quantities.R                        60       0  100.00%
R/QuantityGeneratorPopulation.R       22       0  100.00%
R/QuantityGeneratorPrediction.R       48       0  100.00%
R/QuantityGeneratorSubject.R          19       0  100.00%
R/settings.R                          12      12  0.00%    55-69
R/SimGroup.R                           5       0  100.00%
R/SimJointData.R                      72       1  98.61%   103
R/SimLongitudinal.R                    5       2  60.00%   22, 40
R/SimLongitudinalClaretBruno.R        52       0  100.00%
R/SimLongitudinalGSF.R                60       0  100.00%
R/SimLongitudinalRandomSlope.R        42       0  100.00%
R/SimLongitudinalSteinFojo.R          50       0  100.00%
R/SimSurvival.R                      104       0  100.00%
R/StanModel.R                         15       0  100.00%
R/StanModule.R                       176       6  96.59%   192-193, 235, 246, 383, 411
R/SurvivalExponential.R               10       0  100.00%
R/SurvivalLoglogistic.R               11       0  100.00%
R/SurvivalModel.R                     19       0  100.00%
R/SurvivalQuantities.R               170       1  99.41%   125
R/SurvivalWeibullPH.R                 11       0  100.00%
R/utilities.R                        144       2  98.61%   13, 335
R/zzz.R                               28      25  10.71%   3, 8-12, 14-35, 47
TOTAL                               2974     122  95.90%

Diff against main

Filename                  Stmts    Miss  Cover
----------------------  -------  ------  --------
R/LongitudinalGSF.R          +1       0  +100.00%
R/SimLongitudinalGSF.R       +7       0  +100.00%
TOTAL                        +8       0  +0.01%

Results for commit: eceb927fbc2ff5da6b0ed0effcbedec2003662a3

Minimum allowed coverage is 80%

:recycle: This comment has been updated with latest results

github-actions[bot] commented 3 months ago

Unit Tests Summary

    1 files    154 suites   6m 28s :stopwatch:   136 tests   133 :white_check_mark: 3 :zzz: 0 :x: 1 021 runs  1 017 :white_check_mark: 4 :zzz: 0 :x:

Results for commit eceb927f.

:recycle: This comment has been updated with latest results.

github-actions[bot] commented 3 months ago

Unit Test Performance Difference

Test Suite $Status$ Time on main $±Time$ $±Tests$ $±Skipped$ $±Failures$ $±Errors$
JointModelSamples 💔 $8.36$ $+23.81$ $0$ $-1$ $0$ $0$
model_multi_chain 💚 $54.27$ $-52.34$ $0$ $0$ $0$ $0$
Additional test case details | Test Suite | $Status$ | Time on `main` | $±Time$ | Test Case | |:-----|:----:|:----:|:----:|:-----| | Grid | 💚 | $100.78$ | $-95.73$ | Grid_objects_work_with_QuantityGenerator_and_QuantityCollapser | | GridPrediction | 💔 | $124.42$ | $+2.96$ | GridPrediction_works_as_expected_for_Survival_models | | JointModelSamples | 💔 | $8.36$ | $+23.81$ | print_works_as_expected_for_JointModelSamples | | LongitudinalClaretBruno | 💚 | $6.05$ | $-1.51$ | LongitudinalClaretBruno_works_as_expected_with_default_arguments | | LongitudinalGSF | 💚 | $330.43$ | $-326.77$ | LongitudinalGSF_works_as_expected_with_default_arguments | | LongitudinalRandomSlope | 💚 | $92.30$ | $-85.41$ | Print_method_for_LongitudinalRandomSlope_works_as_expected | | LongitudinalSteinFojo | 💚 | $434.20$ | $-430.15$ | LongitudinalSteinFojo_works_as_expected_with_default_arguments | | SurvivalLoglogistic | 💚 | $36.81$ | $-11.69$ | sim_os_loglogistic_is_consistant_with_flexsurv | | SurvivalQuantities | 💚 | $57.92$ | $-51.80$ | SurvivalQuantities_and_autoplot.SurvivalQuantities_works_as_expected | | brierScore | 💔 | $4.13$ | $+24.19$ | brierScore_SurvivalQuantities_returns_same_results_as_survreg | | model_multi_chain | 💚 | $54.27$ | $-52.34$ | Can_recover_known_distribution_parameters_from_random_slope_model_when_using_multiple_chains | | stan_functions | 💚 | $34.40$ | $-5.41$ | GSF_SLD_function_works_as_expected |

Results for commit ab1270711afaf85c3f03192c14309320969bf29e

♻️ This comment has been updated with latest results.