{"id":57,"date":"2026-09-25T13:55:36","date_gmt":"2026-09-25T20:55:36","guid":{"rendered":"https:\/\/blogs.reed.edu\/datalab\/?p=57"},"modified":"2026-09-25T16:07:36","modified_gmt":"2026-09-25T23:07:36","slug":"whos-the-fattest-of-them-all","status":"publish","type":"post","link":"https:\/\/blogs.reed.edu\/datalab\/2026\/09\/25\/whos-the-fattest-of-them-all\/","title":{"rendered":"Who&#8217;s the fattest of them all?"},"content":{"rendered":"\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"608\" height=\"405\" data-id=\"64\" src=\"https:\/\/blogs.reed.edu\/datalab\/files\/2026\/09\/fatbear1-1.png\" alt=\"a very fat brown bear\" class=\"wp-image-64\" style=\"width:293px;height:auto\" srcset=\"https:\/\/blogs.reed.edu\/datalab\/files\/2026\/09\/fatbear1-1.png 608w, https:\/\/blogs.reed.edu\/datalab\/files\/2026\/09\/fatbear1-1-300x200.png 300w\" sizes=\"auto, (max-width: 608px) 100vw, 608px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"608\" height=\"405\" data-id=\"62\" src=\"https:\/\/blogs.reed.edu\/datalab\/files\/2026\/09\/fatbear2.jpg\" alt=\"another very fat brown bear\" class=\"wp-image-62\" style=\"width:313px;height:auto\" srcset=\"https:\/\/blogs.reed.edu\/datalab\/files\/2026\/09\/fatbear2.jpg 608w, https:\/\/blogs.reed.edu\/datalab\/files\/2026\/09\/fatbear2-300x200.jpg 300w\" sizes=\"auto, (max-width: 608px) 100vw, 608px\" \/><\/figure>\n<\/figure>\n\n\n\n<p>Two fat bears: 435 Holly (left) and 747 (right)<\/p>\n\n\n\n<p>If you haven&#8217;t heard, Fat Bear Week is an annual online contest run by Katmai National Park and Preserve in Alaska. The public votes on which brown bear has done the best job of fattening up for winter. The site Explore.org runs live webcams at along the Brooks River where the bears hunt salmon, so people all over the world can watch the bears fish throughout the season.<\/p>\n\n\n\n<p>The contest of bear fatness started in 2014 as a day of single voting, but has expanded into a bracket style tournament that lasts a week. The contest continues until September 29th, so <a href=\"https:\/\/explore.org\/fat-bear-week\">go vote for the fattest bear<\/a>!<\/p>\n\n\n\n<p>Our graphic this week shows the history of past champions and the correlation between votes in the contest and money raised for the nature preserve. <\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"910\" height=\"1024\" data-id=\"58\" src=\"https:\/\/blogs.reed.edu\/datalab\/files\/2026\/09\/contest_and_revenue-910x1024.png\" alt=\"\" class=\"wp-image-58\" srcset=\"https:\/\/blogs.reed.edu\/datalab\/files\/2026\/09\/contest_and_revenue-910x1024.png 910w, https:\/\/blogs.reed.edu\/datalab\/files\/2026\/09\/contest_and_revenue-267x300.png 267w, https:\/\/blogs.reed.edu\/datalab\/files\/2026\/09\/contest_and_revenue-768x864.png 768w, https:\/\/blogs.reed.edu\/datalab\/files\/2026\/09\/contest_and_revenue.png 1200w\" sizes=\"auto, (max-width: 910px) 100vw, 910px\" \/><\/figure>\n<\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Where did we find the data?<\/strong><\/h2>\n\n\n\n<p>There&#8217;s no official Fat Bear Week repository, so honestly getting the data was kind of a pain. Vote totals and winners were compiled by hand from the National Park Service, Explore.org (which hosts the bear cams and the voting), and news coverage of each year&#8217;s contest. The revenue of the Katmai Conservancy was much easier to find and comes from their IRS Form 990 filings. All nonprofits (including schools like Reed) have to file these publicly, which makes them a good source for data. You can find them on <a href=\"https:\/\/projects.propublica.org\/nonprofits\/\">ProPublica&#8217;s website<\/a>. <\/p>\n\n\n\n<p>Some information was not possible to find. I couldn&#8217;t find the full list of bears entered in the competition for years before 2020, only the champion and runner up were available. The vote counts are also rough estimates that were reported from news sites, not hard numbers from Explore.org. I also couldn&#8217;t find any estimates for 2015-2017, but 1700 votes were cast in the first year of the contest. <\/p>\n\n\n\n<p>If you&#8217;re interested in looking at the raw data, you can find csv files with data for each year on the <a href=\"https:\/\/github.com\/data-at-reed-college\/quest\">Quest repository of the Data@Reed Github page<\/a>. The &#8216;summary.csv&#8217; file contains the information used to make the graph, and the other files contain information about individual bears, their relation to one another, and the sources I used to find this data. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Making the Graphic<\/strong><\/h2>\n\n\n\n<p>The code to the graphic is in &#8216;scripts\/analysis.R&#8217; on the Github page, but I will copy the relevant portions of it below. There&#8217;s an additional script that pulls together data for the summary file and another that compiles the sources, but these aren&#8217;t really material to the analysis.<\/p>\n\n\n\n<p>The final figure is two charts stacked on top of each other and sharing one year axis. I used four packages besides the tidyverse: <a href=\"https:\/\/github.com\/xiangpin\/ggstar\">{ggstar}<\/a> for star-shaped markers, <a href=\"https:\/\/patchwork.data-imaginist.com\/\">{patchwork}<\/a> for stacking plots, <a href=\"https:\/\/wilkelab.org\/ggtext\/\">{ggtext}<\/a> for the boxed subtitle and caption, and <a href=\"https:\/\/scales.r-lib.org\/\">{scales}<\/a> for axis labels.<\/p>\n\n\n\n<p>The first bit of the script just to see which bears had the most appearances in the contest so that we could only graph those. When I did this, bear 409 was not included because the data about entries wasn&#8217;t great for the first few years. So I forced the appearances to include Beadnose because she was a two-time champion. Then I added some labeling columns so that things would appear nicely on the graph and set how the years would be displayed on the x-axis in order to save room. <\/p>\n\n\n\n<details>\n<summary style=\"font-size: 1.3em;font-weight: bold;color: #e84a37\">Click to see the wrangling R script<\/summary>\n<pre class=\"wp-block-code\"><code>\nlibrary(tidyverse)\nlibrary(ggstar)\nlibrary(patchwork)\nlibrary(ggtext)\n\n# --- Update summary.csv with labeled entries\/champion\/runner_up ---------\nappearances &lt;- read_csv(&quot;data\/appearances.csv&quot;, show_col_types = FALSE)\nsummary_df &lt;- read_csv(&quot;data\/summary.csv&quot;, show_col_types = FALSE)\nbears &lt;- read_csv(&quot;data\/bears.csv&quot;, show_col_types = FALSE)\n\nbear_names \n  mutate(bear_id = as.character(bear_id)) |&gt;\n  select(bear_id, name)\n\n# \" \" labels, falling back to just the bear_id\nlabel_bears \n    left_join(bear_names, by = \"bear_id\") |&gt;\n    mutate(label = if_else(is.na(name), bear_id, str_c(bear_id, name, sep = \" \"))) |&gt;\n    pull(label)\n}\n\n# Per-year entry list (2014-2020 = finalists only)\nentries_per_year \n  mutate(bear_label = label_bears(bear_id)) |&gt;\n  arrange(bear_label) |&gt;\n  summarize(entries = str_flatten(bear_label, collapse = \", \"), .by = year)\n\nsummary_out \n  select(-any_of(\"entries\")) |&gt;\n  left_join(entries_per_year, by = \"year\") |&gt;\n  relocate(entries, .after = year) |&gt;\n  mutate(\n    year = as.integer(year),\n    champion = label_bears(champion),\n    runner_up = label_bears(runner_up)\n  )\n\nwrite_csv(summary_out, \"data\/summary.csv\")\n\n# --- Per-bear contest chart ---------------------------------------------\n# TODO: bump a bear now that 409 is force-included (8 shown)\nmin_appearances &lt;- 4\nforce_include &lt;- c(&quot;409&quot;)\n\ncompleted_appearances \n  filter(year != 2026)\n\nqualifying \n  count(bear_id, name = \"n_appearances\") |&gt;\n  filter(n_appearances &gt;= min_appearances | bear_id %in% force_include)\n\ncontest_data \n  inner_join(qualifying, by = \"bear_id\") |&gt;\n  mutate(\n    label = label_bears(bear_id),\n    status = case_when(\n      result == \"champion\" ~ \"Champion\",\n      result == \"runner_up\" ~ \"Runner-up\",\n      TRUE ~ \"Entered\"\n    ) |&gt; factor(levels = c(\"Entered\", \"Runner-up\", \"Champion\"))\n  ) |&gt;\n  mutate(first_year = min(year), .by = bear_id) |&gt;\n  mutate(label = fct_reorder(label, -first_year, .fun = min))\n\ncontest_span \n  summarize(min_year = min(year), max_year = max(year), .by = c(bear_id, label))\n\ncontest_years &lt;- min(contest_data$year):max(contest_data$year)\n\n&lt;\/details&gt;\n<\/code><\/pre>\n<\/details>\n<\/ br>\n\n\n\n<p>Next I started arranging the plot. I created each component of the chart separately and then used the package {patchwork} to arrange them into one figure. I first started with just the title and the boxed text that I wanted to appear at the top and bottom. <\/p>\n\n\n\n<details>\n<summary style=\"font-size: 1.3em;font-weight: bold;color: #e84a37\">Show the graph headings code<\/summary>\n<pre class=\"wp-block-code\"><code>\ntitle_text &lt;- &quot;It&#039;s Fat Bear Week!&quot;\nsubtitle_text &lt;- &quot;Below are the historical top competitors for fattest bear in Katmai National Park Alaska, which has occurred annually since 2014. All bears have a numerical ID and some bears also have a name.&quot;\ntitle_style &lt;- element_text(face = &quot;bold&quot;, size = 28, hjust = 0.5)\n\n# Shared boxed-text style for subtitle\/caption\nboxed_text &lt;- function(outer_margin) {\n  element_textbox_simple(\n    size = 11, face = &quot;bold&quot;, color = &quot;black&quot;, hjust = 0.5, halign = 0.5,\n    margin = outer_margin, padding = margin(5, 8, 5, 8),\n    linetype = 1, box.color = &quot;grey60&quot;, linewidth = 0.4, fill = NA\n  )\n}\n&lt;\/details&gt;\n<\/code><\/pre>\n<\/details>\n<\/ br>\n\n\n\n<p>Then I made the top chart by using the geom_segment() command. A start shape isn&#8217;t an option within basic ggplot, so that&#8217;s where the {ggstar} package came in. Then I just did a lot of adjusting the theme to get things to look <em>exactly<\/em> how I wanted them. That&#8217;s one of the greatest things about R is you can really customize things down to a very fine level. <\/p>\n\n\n\n<details>\n<summary style=\"font-size: 1.3em;font-weight: bold;color: #e84a37\">Show code to make the contest chart<\/summary>\n<pre class=\"wp-block-code\"><code>\ntitle_text &lt;- &quot;It&#039;s Fat Bear Week!&quot;\nsubtitle_text &lt;- &quot;Below are the historical top competitors for fattest bear in Katmai National Park Alaska, which has occurred annually since 2014. All bears have a numerical ID and some bears also have a name.&quot;\ntitle_style &lt;- element_text(face = &quot;bold&quot;, size = 28, hjust = 0.5)\n\n# Shared boxed-text style for subtitle\/caption\nboxed_text &lt;- function(outer_margin) {\n  element_textbox_simple(\n    size = 11, face = &quot;bold&quot;, color = &quot;black&quot;, hjust = 0.5, halign = 0.5,\n    margin = outer_margin, padding = margin(5, 8, 5, 8),\n    linetype = 1, box.color = &quot;grey60&quot;, linewidth = 0.4, fill = NA\n  )\n}\n&lt;\/details&gt;\n<\/code><\/pre>\n<\/details>\n<\/ br>\n\n\n\n<p>Next I made the revenue plot with the votes displayed on the same figure as an overlay. To do this, the y-axis on the left was set to show revenue and the y-axis on the right shows total vote. I got lucky here because these numbers scale almost identically. That often doesn&#8217;t happen, so then you&#8217;d need to use transformations to make your it work on the same figure, or just separate the two data sources to their own figures. <\/p>\n\n\n\n<details>\n<summary style=\"font-size: 1.3em;font-weight: bold;color: #e84a37\">Show code to make the revenue and votes graph\n<\/summary>\n<pre class=\"wp-block-code\"><code>\ntitle_text &lt;- &quot;It&#039;s Fat Bear Week!&quot;\nsubtitle_text &lt;- &quot;Below are the historical top competitors for fattest bear in Katmai National Park Alaska, which has occurred annually since 2014. All bears have a numerical ID and some bears also have a name.&quot;\ntitle_style &lt;- element_text(face = &quot;bold&quot;, size = 28, hjust = 0.5)\n\n# Shared boxed-text style for subtitle\/caption\nboxed_text &lt;- function(outer_margin) {\n  element_textbox_simple(\n    size = 11, face = &quot;bold&quot;, color = &quot;black&quot;, hjust = 0.5, halign = 0.5,\n    margin = outer_margin, padding = margin(5, 8, 5, 8),\n    linetype = 1, box.color = &quot;grey60&quot;, linewidth = 0.4, fill = NA\n  )\n}\n&lt;\/details&gt;\n<\/code><\/pre>\n<\/details>\n<\/ br>\n\n\n\n<p>There&#8217;s a little bit of code in there that also runs cor() which calculates the Pearson&#8217;s correlation coefficient to test the linear correlation between the two datasets. Note that this isn&#8217;t saying anything about the cause of the trends, just that they do go up at a very similar rate, 0.93, where 1 is a perfect relationship. <\/p>\n\n\n\n<p>Then I added code to stack the figures and display only one x-axis at the bottom of the graph. <\/p>\n\n\n\n<details>\n<summary style=\"font-size: 1.3em;font-weight: bold;color: #e84a37\">Show code to make the contest chart<\/summary>\n<pre class=\"wp-block-code\"><code>\n# --- Combined stacked figure -----------------------------------------\n# Drop top chart's x-axis (shown below instead)\ncontest_chart_top &lt;- contest_chart +\n  theme(\n    axis.text.x = element_blank(),\n    axis.ticks.x = element_blank(),\n    plot.margin = margin(b = 2)\n  )\n\n# Shared year axis between the two panels\noverlay_chart_bottom &lt;- overlay_chart +\n  scale_x_continuous(\n    breaks = contest_years, labels = abbreviate_years, limits = range(contest_years),\n    position = &quot;top&quot;\n  ) +\n  theme(\n    axis.text.x.top = element_text(color = &quot;black&quot;, size = 12, face = &quot;bold&quot;),\n    axis.ticks.x.top = element_blank(),\n    plot.margin = margin(t = 2)\n  )\n\ncontest_and_overlay &lt;- contest_chart_top \/ overlay_chart_bottom +\n  plot_layout(heights = c(3, 1.5), axis_titles = &quot;collect&quot;) +\n  plot_annotation(\n    title = title_text,\n    subtitle = subtitle_text,\n    caption = caption_text,\n    theme = theme(\n      plot.title = title_style,\n      plot.subtitle = boxed_text(margin(t = 4, b = 6)),\n      plot.caption = boxed_text(margin(t = 6, b = 2))\n    )\n  )\ncontest_and_overlay\n&lt;\/details&gt;\n<\/code><\/pre>\n<\/details>\n<\/ br>\n\n\n\n<p>Adding the text boxes was the fiddliest bit. Honestly, that&#8217;s something that probably could have been done easier in an imaging program like PowerPoint or Adobe, but I get stubborn when I know something can be done in R, so I pushed until everything was tweaked just how I wanted it. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Things you could do with this data<\/h2>\n\n\n\n<p>Inside the spreadsheets, there&#8217;s more data about each bear. There&#8217;s information on their family members, their sex, and the year they were born. A more thorough internet search could probably reveal even more than is already in there. Here are a few ideas of other things you could do with this data: <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Who&#8217;s fatter: mama bears or papa bears?<\/li>\n\n\n\n<li>Does a bear do a better job of fattening up over time or are they the fattest when they&#8217;re young and able to exert more energy hunting? <\/li>\n\n\n\n<li>You could trace the lineage of many of the bears to see if champions beget champions or if fatness is maybe more environmental.<\/li>\n\n\n\n<li>You could look up data about salmon numbers in Alaska for the same years as the bear data. Then you could see if there was any correlation between the winners and the salmon abundance. For that, you&#8217;d probably need to have a fat score for each bear, which you could subjectively do based off of pictures. <\/li>\n<\/ul>\n\n\n\n<p>I&#8217;ll leave you with a couple pictures of Otis, the four-time champion. RIP, you fat bear!<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"548\" height=\"364\" src=\"https:\/\/blogs.reed.edu\/datalab\/files\/2026\/09\/otis.jpeg\" alt=\"a fat brown bear sitting midstream and facing the camera\" class=\"wp-image-70\" srcset=\"https:\/\/blogs.reed.edu\/datalab\/files\/2026\/09\/otis.jpeg 548w, https:\/\/blogs.reed.edu\/datalab\/files\/2026\/09\/otis-300x199.jpeg 300w\" sizes=\"auto, (max-width: 548px) 100vw, 548px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/blogs.reed.edu\/datalab\/files\/2026\/09\/otis-mid-chew-1024x576.jpg\" alt=\"a fat brown bear in the river with a bit of fish in his mouth and the rest in his paw\" class=\"wp-image-71\" srcset=\"https:\/\/blogs.reed.edu\/datalab\/files\/2026\/09\/otis-mid-chew-1024x576.jpg 1024w, https:\/\/blogs.reed.edu\/datalab\/files\/2026\/09\/otis-mid-chew-300x169.jpg 300w, https:\/\/blogs.reed.edu\/datalab\/files\/2026\/09\/otis-mid-chew-768x432.jpg 768w, https:\/\/blogs.reed.edu\/datalab\/files\/2026\/09\/otis-mid-chew-1536x864.jpg 1536w, https:\/\/blogs.reed.edu\/datalab\/files\/2026\/09\/otis-mid-chew-2048x1152.jpg 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Two fat bears: 435 Holly (left) and 747 (right) If you haven&#8217;t heard, Fat Bear Week is an annual online contest run by Katmai National Park and Preserve in Alaska. The public votes on which brown bear has done the&nbsp;&hellip; <a href=\"https:\/\/blogs.reed.edu\/datalab\/2026\/09\/25\/whos-the-fattest-of-them-all\/\">finish&nbsp;reading&nbsp;Who&#8217;s the fattest of them all?<\/a><\/p>\n","protected":false},"author":3079,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[4],"class_list":["post-57","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-r"],"_links":{"self":[{"href":"https:\/\/blogs.reed.edu\/datalab\/wp-json\/wp\/v2\/posts\/57","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.reed.edu\/datalab\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.reed.edu\/datalab\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.reed.edu\/datalab\/wp-json\/wp\/v2\/users\/3079"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.reed.edu\/datalab\/wp-json\/wp\/v2\/comments?post=57"}],"version-history":[{"count":6,"href":"https:\/\/blogs.reed.edu\/datalab\/wp-json\/wp\/v2\/posts\/57\/revisions"}],"predecessor-version":[{"id":72,"href":"https:\/\/blogs.reed.edu\/datalab\/wp-json\/wp\/v2\/posts\/57\/revisions\/72"}],"wp:attachment":[{"href":"https:\/\/blogs.reed.edu\/datalab\/wp-json\/wp\/v2\/media?parent=57"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.reed.edu\/datalab\/wp-json\/wp\/v2\/categories?post=57"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.reed.edu\/datalab\/wp-json\/wp\/v2\/tags?post=57"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}