MetaculR

library(MetaculR)

Login

Add the following lines to .Renviron using usethis::edit_r_environ():

Metaculus_username="yourUsername"
Metaculus_password="yourPassword"

Then, login:

Metaculus_response_login <- MetaculR_login()

Download Your Predictions

questions_myPredictions <- MetaculR_myPredictions(guessed_by = Metaculus_response_login$Metaculus_user_id)

Analyze Your Predictions

How different is my last prediction from current community?

questions_myPredictions_byDiff <- MetaculR_myDiff(questions_myPredictions)
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.01| 0.51| 0.53| 103.0| | 1332|Will global malaria mortality rates be reduced by 90% when compared with 2015 rates, by 2030? | 0.01| 0.44| 0.46| 77.8| | 10574|Will a 8-year gross world product doubling complete before a 2-year doubling does? | 0.99| 0.66| 0.75| 51.0| | 8334|Will spending on US office construction be less than $77 Billion USD in 2022? | 0.01| 0.30| 0.30| 42.4| | 10084|Will Sweden join NATO before 2024? | 0.14| 0.87| 0.42| 41.1| | 10085|Will Finland join NATO before 2024? | 0.26| 0.90| 0.83| 25.6|

Plot those differences

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

Where has community moved most since my last prediction?

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| |-----:|:-------------------------------------------------------------------------------------|-------------:|------------:|-------------------:|----------------------------:| | 10084|Will Sweden join NATO before 2024? | 0.14| 0.87| 0.42| 9.2| | 9994|Will at least 5 million refugees from Ukraine seek assistance from other countries? | 0.99| 0.99| 0.94| 6.3| | 10057|Will Russia control Chernihiv on June 1, 2022? | 0.01| 0.01| 0.05| 5.2| | 10667|Will Elon Musk hold major political office in the United States before February 2033? | 0.01| 0.04| 0.16| 4.6| | 10004|Will a major nuclear power plant in Germany be operational on June 1, 2023? | 0.10| 0.25| 0.55| 3.7| | 10492|Will Mariupol be under Russian control on June 1, 2022? | 0.99| 0.95| 0.85| 3.4|

Plot those differences

MetaculR_plot(MetaculR_questions = questions_myPredictions,
              Metaculus_id = 9939)

plot of chunk unnamed-chunk-10

MetaculR_plot(MetaculR_questions = questions_myPredictions,
              Metaculus_id = 6604,
              scale_binary = "logodds")

plot of chunk unnamed-chunk-11

Score Predictions

Let's see some Brier statistics on resolved questions:

# questions_myPredictions_resolved <- MetaculR_myPredictions_Resolved(guessed_by = Metaculus_response_login$Metaculus_user_id)
brier_me <- MetaculR_brier(questions_myPredictions)
#> Warning in x$results$possibilities$type == "binary" & !is.na(x$results$resolution) & : longer object length is not a multiple
#> of shorter object length

#> Warning in x$results$possibilities$type == "binary" & !is.na(x$results$resolution) & : longer object length is not a multiple
#> of shorter object length

#> Warning in x$results$possibilities$type == "binary" & !is.na(x$results$resolution) & : longer object length is not a multiple
#> of shorter object length

#> Warning in x$results$possibilities$type == "binary" & !is.na(x$results$resolution) & : longer object length is not a multiple
#> of shorter object length

#> Warning in x$results$possibilities$type == "binary" & !is.na(x$results$resolution) & : longer object length is not a multiple
#> of shorter object length

#> Warning in x$results$possibilities$type == "binary" & !is.na(x$results$resolution) & : longer object length is not a multiple
#> of shorter object length

#> Warning in x$results$possibilities$type == "binary" & !is.na(x$results$resolution) & : longer object length is not a multiple
#> of shorter object length

#> Warning in x$results$possibilities$type == "binary" & !is.na(x$results$resolution) & : longer object length is not a multiple
#> of shorter object length

Plot scores

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(-1, 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-14

Histogram

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

Calibration

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

Analyze community predictions

For questions you may not have predicted.

Score, Community Predictions

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 <-
  MetaculR_brier(
    questions_recent_resolved,
    me = FALSE)

Plot scores, Community Predictions

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(-1, 1)) +
  ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 45, vjust = 1, hjust = 1))
#> Warning: Removed 23 rows containing missing values (geom_col).
#> Warning: Removed 23 rows containing missing values (geom_text).

plot of chunk unnamed-chunk-19

Histogram, Community Predictions

brier_recent_resolved$brier_bins_df %>%
  ggplot2::ggplot() +
  ggplot2::geom_col(
    ggplot2::aes(x = centers,
                 y = freqs,
                 fill = ID),
    position = ggplot2::position_dodge2(width = 0.1)
  ) +
  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-20

Calibration, Community Predictions

brier_recent_resolved$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.02), #"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-21

Find Exciting Questions

Various sports now have an "Excitement Index" to identify games that interest fans--maybe we can do the same for predictions?

Among your 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| |-----:|:-----------------------------------------------------------------------------------|------------:|--------------------:|-----------------:|-------------------------:| | 10448|Will Russia use chemical weapons in Ukraine in 2022? | 2.03| 9.17| 0.71| 3.33| | 10085|Will Finland join NATO before 2024? | 0.71| 4.26| 0.18| 1.13| | 10057|Will Russia control Chernihiv on June 1, 2022? | 0.71| 6.53| 0.09| 0.89| | 10084|Will Sweden join NATO before 2024? | 0.69| 3.78| 0.22| 1.19| | 9994|Will at least 5 million refugees from Ukraine seek assistance from other countries? | 0.47| 5.17| 0.19| 1.38| | 10246|Will a coup or regime change take place in Russia in 2022 or 2023? | 0.46| 3.67| 0.22| 1.75|

MetaculR_plot(MetaculR_questions = questions_myPredictions,
              Metaculus_id = 9790)

plot of chunk unnamed-chunk-23

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| |-----:|:-----------------------------------------------------------------------------------|------------:|--------------------:|-----------------:|-------------------------:| | 10448|Will Russia use chemical weapons in Ukraine in 2022? | 2.03| 9.17| 0.71| 3.33| | 10057|Will Russia control Chernihiv on June 1, 2022? | 0.71| 6.53| 0.09| 0.89| | 9994|Will at least 5 million refugees from Ukraine seek assistance from other countries? | 0.47| 5.17| 0.19| 1.38| | 10094|Will Russia control Kyiv on June 1, 2022? | 0.17| 4.50| 0.03| 0.95| | 10085|Will Finland join NATO before 2024? | 0.71| 4.26| 0.18| 1.13| | 10269|Will Kyiv be under Russian control before 2023? | 0.34| 4.03| 0.04| 0.72|

MetaculR_plot(MetaculR_questions = questions_myPredictions,
              Metaculus_id = 6725)

plot of chunk unnamed-chunk-25

Among community predictions

Resolved questions

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| |-----:|:-------------------------------------------------------------------------------------------|------------:|--------------------:|-----------------:|-------------------------:| | 6763|Will Marine Le Pen win the 2022 French presidential election? | 0.30| 3.16| 0.16| 1.79| | 10282|Will Russia default on its debt in 2022? | 0.46| 2.09| 0.12| 0.49| | 2511|Will Emmanuel Macron be re-elected President of France in 2022? | 0.25| 2.24| 0.11| 0.93| | 9182|Will more than 20,000 people die within 28 days of a positive Covid test in the UK in 2022? | 0.20| 1.33| 0.03| 0.17| | 9609|Will Viktor Orbán win the 2022 Hungarian Parliamentary Election? | 0.17| 0.87| 0.03| 0.15| | 9790|Will Éric Zemmour be in the 2nd round of the 2022 French presidential election? | 0.15| 3.50| 0.03| 0.55|

MetaculR_plot(MetaculR_questions = questions_recent_resolved,
              Metaculus_id = 8898)

plot of chunk unnamed-chunk-27

Open questions

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| |-----:|:----------------------------------------------------------------------|------------:|--------------------:|-----------------:|-------------------------:| | 10448|Will Russia use chemical weapons in Ukraine in 2022? | 2.03| 9.17| 0.71| 3.33| | 9459|Will Russian troops enter Kyiv, Ukraine before December 31, 2022? | 0.61| 3.59| 0.43| 2.86| | 10040|Will YouTube be blocked in Russia in 2022? | 0.74| 3.44| 0.39| 1.89| | 10423|Will Belarus invade Ukraine before June 1, 2022? | 0.56| 5.74| 0.14| 1.75| | 10255|Will Sweden's government initiate the process of joining NATO in 2022? | 0.84| 5.16| 0.24| 1.57| | 8899|Will Hungary declare a referendum in 2022 to exit the EU? | 0.03| 2.11| 0.02| 1.41|

MetaculR_plot(MetaculR_questions = questions_recent_open,
              Metaculus_id = 9566)

plot of chunk unnamed-chunk-30



Try the MetaculR package in your browser

Any scripts or data that you put into this service are public.

MetaculR documentation built on April 26, 2022, 1:07 a.m.