Add the following lines to .Renviron
using usethis::edit_r_environ()
:
Metaculus_username="yourUsername"
Metaculus_password="yourPassword"
Then, login:
questions_myPredictions_byDiff %>%
dplyr::select(id, title, my_prediction, community_q2, community_q2_pre_me, diff_me_q2_abs_odds) %>%
dplyr::mutate(diff_me_q2_abs_odds = round(diff_me_q2_abs_odds, 1)) %>%
dplyr::arrange(dplyr::desc(diff_me_q2_abs_odds)) %>%
head() %>%
knitr::kable()
id | title | my_prediction | community_q2 | community_q2_pre_me | diff_me_q2_abs_odds |
---|---|---|---|---|---|
1634 | Will US Income Inequality Increase by 2025? | 0.02 | 0.53 | 0.47 | 55.3 |
9933 | Will any NATO country invoke Article 5 by March 31, 2022? | 0.13 | 0.01 | 0.02 | 14.8 |
5407 | If Starlink offers an IPO before 2030, will it set a record for the largest IPO? | 0.03 | 0.24 | 0.30 | 10.2 |
9937 | Will more than 50,000 people be killed in the Russo-Ukrainian War in 2022? | 0.15 | 0.60 | 0.45 | 8.5 |
2605 | Will any country’s military expenditure exceed that of the United States before 2030? | 0.01 | 0.07 | 0.08 | 7.5 |
7977 | Will US core CPI inflation rise by more than 3% from December 2021 to December 2022? | 0.94 | 0.70 | 0.68 | 6.7 |
questions_myPredictions_byDiff %>%
dplyr::arrange(dplyr::desc(diff_me_q2_abs_odds)) %>%
dplyr::slice_head(n = 10) %>%
ggplot2::ggplot() +
ggplot2::geom_col(
ggplot2::aes(x = reorder(factor(id), -diff_me_q2_abs_odds),
y = diff_me_q2_abs_odds,
fill = reorder(factor(id), -diff_me_q2_abs_odds))
) +
ggplot2::theme_classic() +
ggplot2::labs(x = "ID",
y = "Odds difference between me and community q2") +
ggplot2::guides(fill = FALSE) +
ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 45, vjust = 1, hjust = 1))
plot of chunk unnamed-chunk-8
questions_myPredictions_byDiff %>%
dplyr::select(id, title, my_prediction, community_q2, community_q2_pre_me, diff_comm_q2_pre_me_abs_odds) %>%
dplyr::mutate(diff_comm_q2_pre_me_abs_odds = round(diff_comm_q2_pre_me_abs_odds, 1)) %>%
dplyr::arrange(dplyr::desc(diff_comm_q2_pre_me_abs_odds)) %>%
head() %>%
knitr::kable()
id | title | my_prediction | community_q2 | community_q2_pre_me | diff_comm_q2_pre_me_abs_odds |
---|---|---|---|---|---|
10004 | Will a major nuclear power plant in Germany be operational on June 1, 2023? | 0.10 | 0.20 | 0.56 | 5.1 |
9939 | Will Kyiv fall to Russian forces by April 2022? | 0.01 | 0.02 | 0.09 | 4.8 |
6604 | Will annual U.S. inflation reach 100% in any year before 2050? | 0.01 | 0.02 | 0.08 | 4.3 |
8766 | Will the Omicron variant be less lethal than Delta? | 0.98 | 0.98 | 0.94 | 3.1 |
9933 | Will any NATO country invoke Article 5 by March 31, 2022? | 0.13 | 0.01 | 0.02 | 2.0 |
6725 | Will a large American city fully abolish their police department before 2035? | 0.01 | 0.02 | 0.04 | 2.0 |
Let’s see some Brier statistics on resolved questions:
brier_me$brier_df %>%
ggplot2::ggplot() +
ggplot2::geom_col(
ggplot2::aes(x = name,
y = value,
fill = ID),
position = "dodge2"
) +
ggplot2::geom_text(
ggplot2::aes(x = name,
y = value,
label = round(value, 3)),
size = 2,
position = ggplot2::position_dodge2(width = 1), #"dodge2",
vjust = 0.5,
hjust = -0.25,
angle = 90) +
ggplot2::theme_classic() +
ggplot2::labs(x = "Statistic",
y = "Value") +
ggplot2::coord_cartesian(ylim = c(0, 1)) +
ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 45, vjust = 1, hjust = 1))
#> Warning: Removed 10 rows containing missing values (geom_col).
#> Warning: Removed 10 rows containing missing values (geom_text).
plot of chunk unnamed-chunk-14
brier_me$brier_bins_df %>%
ggplot2::ggplot() +
ggplot2::geom_col(
ggplot2::aes(x = centers,
y = freqs,
fill = ID),
position = ggplot2::position_dodge2(width = 0.1, preserve = "single")
) +
ggplot2::geom_text(
ggplot2::aes(x = centers,
y = freqs,
label = round(freqs, 3)),
size = 2,
position = ggplot2::position_dodge2(width = 0.1), #"dodge2",
# vjust = 0.5,
hjust = -0.25,
angle = 90) +
ggplot2::theme_classic() +
ggplot2::coord_cartesian(ylim = c(0, 1))
plot of chunk unnamed-chunk-15
brier_me$brier_bins_df %>%
ggplot2::ggplot() +
ggplot2::geom_pointrange(
ggplot2::aes(x = centers,
y = obars,
ymin = ci_low,
ymax = ci_high,
color = ID),
position = ggplot2::position_dodge2(width = 0.02)
) +
ggplot2::geom_line(
ggplot2::aes(x = centers,
y = ideal)
) +
ggplot2::geom_text(
ggplot2::aes(x = centers,
y = obars,
label = format(round(obars, 3), nsmall = 3)),
size = 2,
position = ggplot2::position_dodge2(width = 0.1), #"dodge2",
vjust = -0.5,
hjust = -0.25,
angle = 90) +
ggplot2::theme_classic() +
ggplot2::coord_cartesian(ylim = c(0, max(brier_me$brier_bins_df $obars) * 1.1))
plot of chunk unnamed-chunk-16
What if question bins were not 5 percentage points each, but were based on logodds?
brier_me <- MetaculR_brier(questions_myPredictions_resolved,
thresholds = c(0, exp(seq(from = -log(99), to = log(99), by = log(99) / 5)) / (exp(seq(from = -log(99), to = log(99), by = log(99) / 5)) + 1), 1))
brier_me$brier_df %>%
ggplot2::ggplot() +
ggplot2::geom_col(
ggplot2::aes(x = name,
y = value,
fill = ID),
position = "dodge2"
) +
ggplot2::geom_text(
ggplot2::aes(x = name,
y = value,
label = round(value, 3)),
size = 2,
position = ggplot2::position_dodge2(width = 1), #"dodge2",
vjust = 0.5,
hjust = -0.25,
angle = 90) +
ggplot2::theme_classic() +
ggplot2::labs(x = "Statistic",
y = "Value") +
ggplot2::coord_cartesian(ylim = c(0, 1)) +
ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 45, vjust = 1, hjust = 1))
#> Warning: Removed 10 rows containing missing values (geom_col).
#> Warning: Removed 10 rows containing missing values (geom_text).
plot of chunk unnamed-chunk-18
brier_me$brier_bins_df %>%
ggplot2::ggplot() +
ggplot2::geom_col(
ggplot2::aes(x = centers,
y = freqs,
fill = ID),
position = ggplot2::position_dodge2(width = 0.1, preserve = "single")
) +
ggplot2::geom_text(
ggplot2::aes(x = centers,
y = freqs,
label = round(freqs, 3)),
size = 2,
position = ggplot2::position_dodge2(width = 0.05), #"dodge2",
# vjust = 0.5,
hjust = -0.25,
angle = 90) +
ggplot2::theme_classic() +
ggplot2::coord_cartesian(ylim = c(0, 1))
plot of chunk unnamed-chunk-19
brier_me$brier_bins_df %>%
ggplot2::ggplot() +
ggplot2::geom_pointrange(
ggplot2::aes(x = centers,
y = obars,
ymin = ci_low,
ymax = ci_high,
color = ID),
position = ggplot2::position_dodge2(width = 0.02)
) +
ggplot2::geom_line(
ggplot2::aes(x = centers,
y = ideal)
) +
ggplot2::geom_text(
ggplot2::aes(x = centers,
y = obars,
label = format(round(obars, 3), nsmall = 3)),
size = 2,
position = ggplot2::position_dodge2(width = 0.1), #"dodge2",
vjust = -0.5,
hjust = -0.25,
angle = 90) +
ggplot2::theme_classic() +
ggplot2::coord_cartesian(ylim = c(0, max(brier_me$brier_bins_df$obars) * 1.1))
plot of chunk unnamed-chunk-20
For questions you may not have predicted.
Let’s see some Brier statistics on resolved questions:
questions_recent_resolved <-
MetaculR_questions(
order_by = "-resolve_time",
status= "resolved",
guessed_by = "",
pages = 32,
offset = 0)
brier_recent_resolved$brier_df %>%
ggplot2::ggplot() +
ggplot2::geom_col(
ggplot2::aes(x = name,
y = value,
fill = ID),
position = "dodge2"
) +
ggplot2::geom_text(
ggplot2::aes(x = name,
y = value,
label = round(value, 3)),
size = 2,
position = ggplot2::position_dodge2(width = 1), #"dodge2",
vjust = 0.5,
hjust = -0.25,
angle = 90) +
ggplot2::theme_classic() +
ggplot2::labs(x = "Statistic",
y = "Value") +
ggplot2::coord_cartesian(ylim = c(0, 1)) +
ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 45, vjust = 1, hjust = 1))
#> Warning: Removed 17 rows containing missing values (geom_col).
#> Warning: Removed 17 rows containing missing values (geom_text).
plot of chunk unnamed-chunk-23
brier_recent_resolved$brier_bins_df %>%
ggplot2::ggplot() +
ggplot2::geom_col(
ggplot2::aes(x = centers,
y = freqs)
) +
ggplot2::geom_text(
ggplot2::aes(x = centers,
y = freqs,
label = round(freqs, 3)),
size = 2,
# position = ggplot2::position_dodge2(width = 0.1), #"dodge2",
# vjust = 0.5,
hjust = -0.25,
angle = 90) +
ggplot2::theme_classic() +
ggplot2::coord_cartesian(ylim = c(0, max(brier_recent_resolved$brier_bins_df$freqs) * 1.1))
plot of chunk unnamed-chunk-24
brier_recent_resolved$brier_bins_df %>%
ggplot2::ggplot() +
ggplot2::geom_pointrange(
ggplot2::aes(x = centers,
y = obars,
ymin = ci_low,
ymax = ci_high)
) +
ggplot2::geom_line(
ggplot2::aes(x = centers,
y = ideal)
) +
ggplot2::geom_text(
ggplot2::aes(x = centers,
y = obars,
label = format(round(obars, 3), nsmall = 3)),
size = 2,
# position = ggplot2::position_dodge2(width = 0.1), #"dodge2",
vjust = -0.5,
hjust = -0.25,
angle = 90) +
ggplot2::theme_classic() +
ggplot2::coord_cartesian(ylim = c(0, max(brier_recent_resolved$brier_bins_df$obars) * 1.1))
plot of chunk unnamed-chunk-25
brier_recent_resolved <-
MetaculR_brier(
questions_recent_resolved,
me = FALSE,
thresholds = c(0, exp(seq(from = -log(99), to = log(99), by = log(99) / 5)) / (exp(seq(from = -log(99), to = log(99), by = log(99) / 5)) + 1), 1))
brier_recent_resolved$brier_df %>%
ggplot2::ggplot() +
ggplot2::geom_col(
ggplot2::aes(x = name,
y = value,
fill = ID),
position = "dodge2"
) +
ggplot2::geom_text(
ggplot2::aes(x = name,
y = value,
label = round(value, 3)),
size = 2,
position = ggplot2::position_dodge2(width = 1), #"dodge2",
vjust = 0.5,
hjust = -0.25,
angle = 90) +
ggplot2::theme_classic() +
ggplot2::labs(x = "Statistic",
y = "Value") +
ggplot2::coord_cartesian(ylim = c(0, 1)) +
ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 45, vjust = 1, hjust = 1))
#> Warning: Removed 17 rows containing missing values (geom_col).
#> Warning: Removed 17 rows containing missing values (geom_text).
plot of chunk unnamed-chunk-27
brier_recent_resolved$brier_bins_df %>%
ggplot2::ggplot() +
ggplot2::geom_col(
ggplot2::aes(x = centers,
y = freqs)
) +
ggplot2::geom_text(
ggplot2::aes(x = centers,
y = freqs,
label = round(freqs, 3)),
size = 2,
# position = ggplot2::position_dodge2(width = 0.1), #"dodge2",
# vjust = 0.5,
hjust = -0.25,
angle = 90) +
ggplot2::theme_classic() +
ggplot2::coord_cartesian(ylim = c(0, max(brier_recent_resolved$brier_bins_df$freqs) * 1.1))
plot of chunk unnamed-chunk-28
brier_recent_resolved$brier_bins_df %>%
ggplot2::ggplot() +
ggplot2::geom_pointrange(
ggplot2::aes(x = centers,
y = obars,
ymin = ci_low,
ymax = ci_high)
) +
ggplot2::geom_line(
ggplot2::aes(x = centers,
y = ideal)
) +
ggplot2::geom_text(
ggplot2::aes(x = centers,
y = obars,
label = format(round(obars, 3), nsmall = 3)),
size = 2,
# position = ggplot2::position_dodge2(width = 0.1), #"dodge2",
vjust = -0.5,
hjust = -0.25,
angle = 90) +
ggplot2::theme_classic() +
ggplot2::coord_cartesian(ylim = c(0, max(brier_recent_resolved$brier_bins_df$obars) * 1.1))
plot of chunk unnamed-chunk-29
Various sports now have an “Excitement Index” to identify games that interest fans–maybe we can do the same for predictions?
questions_myPredictions_byExcitement <- MetaculR_excitement(questions_myPredictions)
questions_myPredictions_byExcitement %>%
dplyr::mutate(Total_logodds_Change = round(Total_logodds_Change, 2),
Total_logodds_Change_Even = round(Total_logodds_Change_Even, 2)) %>%
dplyr::arrange(dplyr::desc(Total_Change)) %>%
head() %>%
knitr::kable()
id | title | Total_Change | Total_logodds_Change | Total_Change_Even | Total_logodds_Change_Even |
---|---|---|---|---|---|
9790 | Will Éric Zemmour be in the 2nd round of the 2022 French presidential election? | 1.12 | 5.38 | 0.50 | 2.32 |
8944 | Will Boris Johnson be Prime Minister of the UK on June 1, 2022? | 0.35 | 2.00 | 0.00 | 0.00 |
8882 | Will 2022 be the hottest year on record? | 0.22 | 1.60 | 0.11 | 0.80 |
8554 | Will women receive at least 70% of bachelor’s degrees in the US in the year 2050? | 0.19 | 1.49 | 0.10 | 0.79 |
2511 | Will Emmanuel Macron be re-elected President of France in 2022? | 0.18 | 1.40 | 0.00 | 0.00 |
6330 | Will Donald J. Trump be a candidate for President in the 2024 cycle? | 0.15 | 0.79 | 0.05 | 0.25 |
plot of chunk unnamed-chunk-31
questions_myPredictions_byExcitement %>%
dplyr::mutate(Total_logodds_Change = round(Total_logodds_Change, 2),
Total_logodds_Change_Even = round(Total_logodds_Change_Even, 2)) %>%
dplyr::arrange(dplyr::desc(Total_logodds_Change)) %>%
head() %>%
knitr::kable()
id | title | Total_Change | Total_logodds_Change | Total_Change_Even | Total_logodds_Change_Even |
---|---|---|---|---|---|
9790 | Will Éric Zemmour be in the 2nd round of the 2022 French presidential election? | 1.12 | 5.38 | 0.50 | 2.32 |
8944 | Will Boris Johnson be Prime Minister of the UK on June 1, 2022? | 0.35 | 2.00 | 0.00 | 0.00 |
8882 | Will 2022 be the hottest year on record? | 0.22 | 1.60 | 0.11 | 0.80 |
8554 | Will women receive at least 70% of bachelor’s degrees in the US in the year 2050? | 0.19 | 1.49 | 0.10 | 0.79 |
6604 | Will annual U.S. inflation reach 100% in any year before 2050? | 0.06 | 1.45 | 0.00 | 0.00 |
2511 | Will Emmanuel Macron be re-elected President of France in 2022? | 0.18 | 1.40 | 0.00 | 0.00 |
plot of chunk unnamed-chunk-33
What were the most exciting resolved questions?
questions_recent_byExcitement <- MetaculR_excitement(questions_recent_resolved)
questions_recent_byExcitement %>%
dplyr::mutate(Total_logodds_Change = round(Total_logodds_Change, 2),
Total_logodds_Change_Even = round(Total_logodds_Change_Even, 2)) %>%
dplyr::arrange(dplyr::desc(Total_Change_Even)) %>%
head() %>%
knitr::kable()
id | title | Total_Change | Total_logodds_Change | Total_Change_Even | Total_logodds_Change_Even |
---|---|---|---|---|---|
8859 | Will Ukraine ban wheat export before April 2023? | 0.17 | 1.37 | 0.11 | 0.92 |
9517 | Will Russian troops enter Mariupol, Ukraine by December 31, 2022? | 0.52 | 4.86 | 0.09 | 0.44 |
9590 | Will there be a Pi variant of COVID by Pi Day (March 14, 2022)? | 0.41 | 1.95 | 0.07 | 0.30 |
8898 | Will Russia invade Ukrainian territory before 2023? | 0.38 | 2.97 | 0.06 | 0.32 |
7211 | Will any body of the US federal government conclude that COVID-19 originated in a lab in Hubei before June 1st 2022? | 0.02 | 0.08 | 0.02 | 0.08 |
9693 | Will the gray wolf be relisted as Threatened or Endangered by the US before 2030? | 0.00 | 0.00 | 0.00 | 0.00 |
plot of chunk unnamed-chunk-35
What are the most exciting questions that are still open?
questions_recent_open <-
MetaculR_questions(
order_by = "close_time",
status = "open",
guessed_by = "")
questions_recent_open_byExcitement <- MetaculR_excitement(questions_recent_open)
questions_recent_open_byExcitement %>%
dplyr::mutate(Total_logodds_Change = round(Total_logodds_Change, 2),
Total_logodds_Change_Even = round(Total_logodds_Change_Even, 2)) %>%
dplyr::arrange(dplyr::desc(Total_logodds_Change_Even)) %>%
head() %>%
knitr::kable()
id | title | Total_Change | Total_logodds_Change | Total_Change_Even | Total_logodds_Change_Even |
---|---|---|---|---|---|
9746 | Will Ukraine fulfill its Minsk-II obligations in Donetsk and Luhansk Oblast by 2023? | 0.57 | 11.73 | 0.14 | 4.72 |
9566 | Will Russian troops enter Odessa, Ukraine before December 31, 2022? | 1.18 | 10.03 | 0.48 | 4.56 |
9791 | Will Éric Zemmour win the French presidential election in 2022? | 0.15 | 9.40 | 0.07 | 4.35 |
9743 | Will Volodymyr Zelensky remain President of Ukraine by 2023? | 1.66 | 8.13 | 0.74 | 3.70 |
7237 | Will Coinbase default on an obligation to hand over their users’ assets on request by the end of 2022? | 0.13 | 5.05 | 0.07 | 2.67 |
9584 | Will Ketanji Brown Jackson be confirmed as an Associate Justice of the Supreme Court before 2023? | 0.67 | 8.62 | 0.12 | 2.46 |
plot of chunk unnamed-chunk-38