-
Notifications
You must be signed in to change notification settings - Fork 2
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
create_task_id()
for horizon returns an error if required and optional set to NULL
#4
Comments
So I feel a task id that has both Indeed I thought |
I think we should allow to have the required and optional set to |
Oh interesting. This feels like a bigger question because it has additional config as well as model output validation implications. I'm not 100% null is right either, it might be that one or the other should be |
Here's an artificial/simple example with my understanding of the issue: We have a hub with two task ids:
The question is what to list for the optional and required values for the If we'd like submissions for target b to be required, we could maybe do something like:
Where I am not totally sure that works, but the idea is that we are requiring submissions for target b, with an empty string in the Or if submission for target b is optional, either/both of the entries under that target group could be moved from If we instead list
my question is what value are we expecting to see in the |
This is a very instructive example @elray1 Firstly completely agree that config for values of For me the most natural and simplest approach for coding values of Testing on the example @kjsato reported in hubverse-org/hubValidations#75 which was using
by producing the following expanded grid of valid values: grid %>%
+ filter(is.na(horizon))
# A tibble: 10,800 × 7
origin_date target horizon location age_group output_type output_type_id
<chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 2023-11-26 peak size hosp NA US 0-130 quantile 0.01
2 2023-11-26 peak size hosp NA 01 0-130 quantile 0.01
3 2023-11-26 peak size hosp NA 02 0-130 quantile 0.01
4 2023-11-26 peak size hosp NA 04 0-130 quantile 0.01
5 2023-11-26 peak size hosp NA 05 0-130 quantile 0.01
6 2023-11-26 peak size hosp NA 06 0-130 quantile 0.01
7 2023-11-26 peak size hosp NA 08 0-130 quantile 0.01
8 2023-11-26 peak size hosp NA 09 0-130 quantile 0.01
9 2023-11-26 peak size hosp NA 10 0-130 quantile 0.01
10 2023-11-26 peak size hosp NA 11 0-130 quantile 0.01
# ℹ 10,790 more rows
# ℹ Use `print(n = ...)` to see more rows Here's the {
"schema_version": "https://raw.githubusercontent.com/Infectious-Disease-Modeling-Hubs/schemas/main/v2.0.0/tasks-schema.json",
"rounds": [
{
"round_id_from_variable": true,
"round_id": "origin_date",
"model_tasks": [
{
"task_ids": {
"origin_date": {
"required": null,
"optional": [
"2023-11-12", "2023-11-19", "2023-11-26", "2023-12-03",
"2023-12-10", "2023-12-17", "2023-12-24", "2023-12-31",
"2024-01-07", "2024-01-14", "2024-01-21", "2024-01-28",
"2024-02-05", "2024-02-11", "2024-02-18", "2024-02-25",
"2024-03-03", "2024-03-10", "2024-03-17", "2024-03-24",
"2024-03-31", "2024-04-07", "2024-04-14", "2024-04-21",
"2024-04-28", "2024-05-05", "2024-05-12"
]
},
"target": {
"required": ["inc hosp"],
"optional": null
},
"horizon": {
"required": [1, 2, 3, 4],
"optional": [0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]
},
"location": {
"required": null,
"optional": [
"US",
"01",
"02",
"04",
"05",
"06",
"08",
"09",
"10",
"11",
"12",
"13",
"15",
"16",
"17",
"18",
"19",
"20",
"21",
"22",
"23",
"24",
"25",
"26",
"27",
"28",
"29",
"30",
"31",
"32",
"33",
"34",
"35",
"36",
"37",
"38",
"39",
"40",
"41",
"42",
"44",
"45",
"46",
"47",
"48",
"49",
"50",
"51",
"53",
"54",
"55",
"56",
"72",
"78"
]
},
"age_group":{
"required":["0-130"],
"optional":["0-0.99","1-4","5-17","5-64","18-49","50-64","65-130"]
}
},
"output_type": {
"quantile":{
"output_type_id":{
"required": [
0.01,
0.025,
0.05,
0.1,
0.15,
0.2,
0.25,
0.3,
0.35,
0.4,
0.45,
0.5,
0.55,
0.6,
0.65,
0.7,
0.75,
0.8,
0.85,
0.9,
0.95,
0.975,
0.99
],
"optional":null
},
"value":{
"type":"double",
"minimum":0
}
}
},
"target_metadata": [
{
"target_id": "inc hosp",
"target_name": "Weekly incident RSV hospitalizations",
"target_units": "count",
"target_keys": {
"target": ["inc hosp"]
},
"target_type": "continuous",
"is_step_ahead": true,
"time_unit": "week"
}
]
},
{
"task_ids": {
"origin_date": {
"required": null,
"optional": [
"2023-11-12", "2023-11-19", "2023-11-26", "2023-12-03",
"2023-12-10", "2023-12-17", "2023-12-24", "2023-12-31",
"2024-01-07", "2024-01-14", "2024-01-21", "2024-01-28",
"2024-02-05", "2024-02-11", "2024-02-18", "2024-02-25",
"2024-03-03", "2024-03-10", "2024-03-17", "2024-03-24",
"2024-03-31", "2024-04-07", "2024-04-14", "2024-04-21",
"2024-04-28", "2024-05-05", "2024-05-12"
]
},
"target": {
"required": null,
"optional": ["inc hosp", "cum hosp"]
},
"horizon": {
"required": [1, 2, 3, 4],
"optional": [0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]
},
"location": {
"required": null,
"optional": [
"US",
"01",
"02",
"04",
"05",
"06",
"08",
"09",
"10",
"11",
"12",
"13",
"15",
"16",
"17",
"18",
"19",
"20",
"21",
"22",
"23",
"24",
"25",
"26",
"27",
"28",
"29",
"30",
"31",
"32",
"33",
"34",
"35",
"36",
"37",
"38",
"39",
"40",
"41",
"42",
"44",
"45",
"46",
"47",
"48",
"49",
"50",
"51",
"53",
"54",
"55",
"56",
"72",
"78"
]
},
"age_group":{
"required":["0-130"],
"optional":["0-0.99","1-4","5-17","5-64","18-49","50-64","65-130"]
}
},
"output_type": {
"sample":{
"output_type_id":{
"required": null,
"optional":[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]
},
"value":{
"type":"double",
"minimum":0
}
}
},
"target_metadata": [
{
"target_id": "inc hosp",
"target_name": "Weekly incident RSV hospitalizations",
"target_units": "count",
"target_keys": {
"target": ["inc hosp"]
},
"target_type": "discrete",
"is_step_ahead": true,
"time_unit": "week"
},
{
"target_id": "cum hosp",
"target_name":"Weekly incident cumulative RSV hospitalizations",
"target_units":"count",
"target_keys":{
"target":["cum hosp"]
},
"target_type": "discrete",
"is_step_ahead": true,
"time_unit": "week"
}
]
},
{
"task_ids": {
"origin_date": {
"required": null,
"optional": [
"2023-11-12", "2023-11-19", "2023-11-26", "2023-12-03",
"2023-12-10", "2023-12-17", "2023-12-24", "2023-12-31",
"2024-01-07", "2024-01-14", "2024-01-21", "2024-01-28",
"2024-02-05", "2024-02-11", "2024-02-18", "2024-02-25",
"2024-03-03", "2024-03-10", "2024-03-17", "2024-03-24",
"2024-03-31", "2024-04-07", "2024-04-14", "2024-04-21",
"2024-04-28", "2024-05-05", "2024-05-12"
]
},
"target": {
"required": null,
"optional": ["peak size hosp"]
},
"horizon": {
"required": null,
"optional": ["NA"]
},
"location": {
"required": null,
"optional": [
"US",
"01",
"02",
"04",
"05",
"06",
"08",
"09",
"10",
"11",
"12",
"13",
"15",
"16",
"17",
"18",
"19",
"20",
"21",
"22",
"23",
"24",
"25",
"26",
"27",
"28",
"29",
"30",
"31",
"32",
"33",
"34",
"35",
"36",
"37",
"38",
"39",
"40",
"41",
"42",
"44",
"45",
"46",
"47",
"48",
"49",
"50",
"51",
"53",
"54",
"55",
"56",
"72",
"78"
]
},
"age_group":{
"required":["0-130"],
"optional":["0-0.99","1-4","5-17","5-64","18-49","50-64","65-130"]
}
},
"output_type": {
"quantile":{
"output_type_id":{
"required":[0.01,0.025,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,0.975,0.99],
"optional":[0,1]
},
"value":{
"type":"double",
"minimum":0
}
}
},
"target_metadata": [
{
"target_id": "peak size hosp",
"target_name": "Peak size of hospitalization",
"target_units": "count",
"target_keys": {
"target": ["peak size hosp"]
},
"target_type": "discrete",
"is_step_ahead": false
}
]
},
{
"task_ids": {
"origin_date": {
"required": null,
"optional": [
"2023-11-12", "2023-11-19", "2023-11-26", "2023-12-03",
"2023-12-10", "2023-12-17", "2023-12-24", "2023-12-31",
"2024-01-07", "2024-01-14", "2024-01-21", "2024-01-28",
"2024-02-05", "2024-02-11", "2024-02-18", "2024-02-25",
"2024-03-03", "2024-03-10", "2024-03-17", "2024-03-24",
"2024-03-31", "2024-04-07", "2024-04-14", "2024-04-21",
"2024-04-28", "2024-05-05", "2024-05-12"
]
},
"target": {
"required": null,
"optional": ["peak time hosp"]
},
"horizon": {
"required": null,
"optional": ["NA"]
},
"location": {
"required": null,
"optional": [
"US",
"01",
"02",
"04",
"05",
"06",
"08",
"09",
"10",
"11",
"12",
"13",
"15",
"16",
"17",
"18",
"19",
"20",
"21",
"22",
"23",
"24",
"25",
"26",
"27",
"28",
"29",
"30",
"31",
"32",
"33",
"34",
"35",
"36",
"37",
"38",
"39",
"40",
"41",
"42",
"44",
"45",
"46",
"47",
"48",
"49",
"50",
"51",
"53",
"54",
"55",
"56",
"72",
"78"
]
},
"age_group":{
"required":["0-130"],
"optional":["0-0.99","1-4","5-17","5-64","18-49","50-64","65-130"]
}
},
"output_type": {
"cdf":{
"output_type_id":{
"required":null,
"optional":[1]
},
"value":{
"type":"double",
"minimum":0,
"maximum":1
}
}
},
"target_metadata": [
{
"target_id": "peak time hosp",
"target_name": "Peak timing of hospitalization",
"target_units": "population",
"target_keys": {
"target": ["peak time hosp"]
},
"target_type": "discrete",
"is_step_ahead": true,
"time_unit": "week"
}
]
}
],
"submissions_due": {
"relative_to": "origin_date",
"start": -6,
"end": 100
}
}
]
}
|
I agree with having "NA" instead of both required and optional set to For the coding values of
So, I will put
|
Hey @LucieContamin ! Re the concerns regarding If the jsonlite::fromJSON('{"required": ["NA"]}')
#> $required
#> [1] NA
jsonlite::fromJSON('{"required": ["NA", "MA"]}')
#> $required
#> [1] "NA" "MA" Created on 2024-03-04 with reprex v2.0.2 I have not found a quick solution to the situation where an Regarding the Finally re: |
I'm now actually changing my mind about Instead what I propose is that we indeed use I feel in the end this is the cleanest way and get's round both the |
It sounds good. I think it makes sense. |
Great. If I made a start on implementing it, would you help me with documenting it? |
sure! |
@annakrystalli thanks for informing, I would appreciate it if you would update it! |
I have a tasks.json that contains the information for a particular optional target:
and the tasks.json passes the validation without issues:
For additional information, the target has no horizon information (no date).
However when I try to reproduce the json with the
hubUtils::create_task_id()
function, I have an error:Created on 2023-11-02 with reprex v2.0.2
The function documentation indicates that both cannot NULL so I am not sure on which is incorrect?
The text was updated successfully, but these errors were encountered: