Use nice illustration of the effect of increasing the mean on increasing average scores
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức phù hợp với người mới
- 35/100
- Loại issue
- Tài liệu
- Độ rõ ràng
- Cần làm rõ
- Mức độ hoạt động
- Đình trệ
- Công nghệ
- r
- Lĩnh vực
- data-visualization, documentation
Hướng nghiên cứu
Bắt đầu bằng việc xem xét issue liên quan #929 và các tham chiếu trong bản thảo đến hình minh họa. Kiểm tra mã mô phỏng và vẽ biểu đồ được hiển thị cùng các tệp trong inst/manuscript/output, bao gồm illustration-effect-scale.png và relation-to-scale-example.rds. Công việc được xem là hoàn tất khi dự án có quyết định rõ ràng về việc giữ lại hay xóa hình minh họa và các asset không được sử dụng của bản thảo.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
We have this visualisation:
generated by this code:
library(data.table)
library(dplyr)
library(scoringutils)
library(ggplot2)
library(tidyr)
library(patchwork)
## Real Data
ex <- example_sample_continuous |>
filter(model == "EuroCOVIDhub-ensemble")
scores <- ex |>
score()
setnames(scores, old = c("dss", "crps", "log_score"),
new = c("DSS", "CRPS", "Log score"))
df <- ex[sample_id == 1] |>
merge(scores) |>
melt(measure.vars = c("DSS", "CRPS", "Log score"),
variable.name = "Scoring rule", value.name = "Score")
df[, `Scoring rule` := factor(`Scoring rule`, levels = c("CRPS", "DSS", "Log score"))]
p_true <- df |>
filter(horizon == 3, location == "DE") |>
ggplot(aes(x = observed, y = Score, ,group = `Scoring rule`,
colour = `Scoring rule`)) +
geom_line() +
scale_color_discrete(type = c("#E69F00", "#56B4E9", "#009E73")) +
scale_y_log10() +
scale_x_log10() +
labs(x = "Observed value") +
theme_scoringutils() +
theme(legend.position = "bottom")
# ------------------------------------------------------------------------------
# illustration:
# in this we see that the mean as well as the variance of the scores scale
# for crps, while the variance stays constant for dss and log score
library(tidyr)
simulate <- function(n_samples = 5e3,
n_replicates = 1e3,
true_value = 100,
scale_mean = 1,
scale_sd = scale_mean) {
pred <- rnorm(n_replicates * n_samples,
mean = true_value * scale_mean,
sd = true_value * scale_sd)
df <- data.table(
observed = true_value * scale_mean,
predicted = pred,
sample_id = 1:n_samples,
id = paste0("id", rep(1:n_replicates, each = n_samples)),
model = paste0("mean_", scale_mean, "_sd_", scale_sd)
) |>
as_forecast_sample()
scores <- score_simulation(df, scale_mean = scale_mean, scale_sd = scale_sd)
return(scores)
}
score_simulation <- function(df, scale_mean = 1, scale_sd = scale_mean) {
scores <- score(
df,
metrics = get_metrics(df, select = c("dss", "crps", "log_score"))
)
m <- summarise_scores(scores, by = "model", fun = mean) |>
melt(id.vars = "model", value.name = "mean", variable.name = "score")
s <- summarise_scores(scores, by = "model", fun = stats::sd) |>
melt(id.vars = "model", value.name = "sd", variable.name = "score")
out <- merge(m, s, by = c("model", "score")) |>
melt(id.vars = c("model", "score"), variable.name = "type")
return(out[])
}
scales_mean <- scales_sd <- c(1, 2, 5, 10)
grid <- expand.grid(
scale_mean = scales_mean,
scale_sd = scales_sd
) |>
setDT()
if (!file.exists("inst/manuscript/output/relation-to-scale-example.rds")) {
res <- grid |>
rowwise() |>
mutate(simulation := list(simulate(scale_mean = scale_mean, scale_sd = scale_sd)))
saveRDS(res, file = "inst/manuscript/output/relation-to-scale-example.rds")
} else {
res2 <- readRDS("inst/manuscript/output/relation-to-scale-example.rds")
}
df <- res |>
tidyr::unnest(cols = "simulation")
df <- df |>
rename(`Scoring rule` = score) |>
mutate(type = ifelse(type == "mean", "Mean score", "Sd score")) |>
mutate(`Scoring rule` = ifelse(`Scoring rule` == "dss",
"DSS",
ifelse(`Scoring rule` == "crps", "CRPS", "Log score")))
p1 <- df |>
filter(scale_mean == 1,
scale_sd < 20) |>
ggplot(aes(y = value, x = scale_sd,
group = `Scoring rule`, color = `Scoring rule`)) +
geom_line() +
facet_wrap(~ type, scales = "free") +
scale_y_log10() +
scale_color_discrete(type = c("#E69F00", "#56B4E9", "#009E73")) +
scale_x_log10() +
theme_scoringutils() +
labs(y = "Score", x = "Sd of F and G (mean constant)")
p2 <- df |>
filter(scale_sd == 1,
scale_mean < 20) |>
ggplot(aes(y = value, x = scale_mean,
group = `Scoring rule`, color = `Scoring rule`)) +
geom_line() +
facet_wrap(~ type, scales = "free") +
scale_y_log10() +
scale_x_log10() +
scale_color_discrete(type = c("#E69F00", "#56B4E9", "#009E73")) +
theme_scoringutils() +
labs(y = "Score", x = "Mean of F and G (sd constant)")
layout <- "
AAACC
BBBCC
"
p2 + p1 + p_true +
plot_layout(guides = "collect", design = layout) &
theme(legend.position = "bottom") &
plot_annotation(tag_levels = 'A')
ggsave("inst/manuscript/output/illustration-effect-scale.png",
height = 4.3, width = 8)
It was previously in the manuscript, but we're not using it anymore. But maybe we don't want it at all anymore...
Related: #929
- Ngôn ngữ chính
- R
- Star
- 65
- Fork
- 24
- Merge trung bình
- 1 giờ 24 phút
- Pull request đã merge (30 ngày)
- 2
Chuẩn bị môi trường
Khởi chạy dev container của dự án ngay trên trình duyệt, bằng tài khoản GitHub của bạn.
- Không có Dockerfile hay tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của epiforecasts/scoringutils
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
epiforecasts/scoringutils#1264 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
epiforecasts/scoringutils#1265 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Non-randomised PIT for integer forecasts drops forecasts whose observation exceeds all samplesĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
epiforecasts/scoringutils#1260 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Incorrect guidance in `NEWS.md` re `add_relative_skill()`?Có thể đã có người làm @nikosbosse đã nhận 3 ngày trước. Đang mởbug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
epiforecasts/scoringutils#1226 · 1 bình luận · 2 reaction ·
Maintainer thường phản hồi trong vòng 1 ngày
-
get_pit_histogram(): unsorted breaks produce negative densities; num_bins = 1 returns an empty tableCó thể đã có người làm @nikosbosse đã nhận 3 ngày trước. Đang mởbug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
epiforecasts/scoringutils#1219 ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của epiforecasts/scoringutils
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
waldronlab/bugphyzz#301 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
r-lib/tree-sitter-r#209 ·
-
Suggest rmoriebricklayerĐang mở
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 67/100
-
Suggest rmoriebricklayerĐang mở
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 79/100
cran-task-views/CausalInference#52 · 1 bình luận ·