ACCT 426/BUDA 450

Spring 2024, Exam 1

Your name: _____Nathaniel Rippeto___

Question 1 (30%)

Fix the code below

library(tidyverse)
library(dplyr)

Margin = 0.5

ugly_tibble <- tibble(
  id = 1:5,
  region = c('a', 'b', 'a', 'b', NA),
  sales = c(23, 44, 44, 22, 100))


# Remove NA values
# Create a profit field using margin
# Sort by profit
# Remove id column
clean_tibble <- ugly_tibble %>% 
  filter(!is.na(region)) %>% 
  mutate(profit = sales * Margin) %>% 
  arrange(profit) %>% 
  select(-id)
  
# Find the number of rows per region, as well as the 
# sum of sales

group_tibble <- clean_tibble %>% 
  group_by(region) %>% 
  summarise(n_of_rows = n(),
            sum_of_sales = sum(sales))

# Use the cor function to find the correlation 
# between sales and profit
cor(clean_tibble$sales, clean_tibble$profit)

Question 2

Complete the following tasks with this tibble.


# Data tibbles used for following tasks
# Do not modify
t <- tibble(
  id = 1:100,
  region = rep(c('WV', 'VA', 'CA', 'TX', 'FL'), 20),
  sales = (1 + runif(100)) ^ 4
)

t[1, ]$sales <- NA
t[2, ]$region <- NA

state_names <- tibble(
  region = c('WV', 'VA', 'CA', 'TX', 'FL'),
  state_name = c('West Virginia', 'Virginia', 'California', 'Texas', 'Florida')
)

Q2a (20 points)

Create a tibble called WV sales that shows all sales for that state. Place the rows in order by sales. Round sales to the nearest integer (whole number) Exclude any values that are less than 5.

wv_sales <- t %>% 
  select(sales, region, id) %>% 
  left_join(state_names, by = 'region') %>% 
  mutate(sales_rounded = round(sales)) %>% 
  filter(sales_rounded >= 5) %>% 
  arrange(sales)

print(wv_sales)

Q2b (20 points)

Create a tibble called sales summary that shows grouped sales for each state.

Join it with the state names tibble.

Show the median sales by state name. Be sure to fix any issues with NA values.


sales_summary <- t %>% 
  select(sales, region) %>% 
  left_join(state_names, by = 'region') %>% 
  group_by(state_name) %>% 
  mutate(med_sales_state = median(`sales`)) %>% 
  filter(!is.na(med_sales_state)) %>% 
  arrange(state_name)
             
          
print(sales_summary)

Q2c (10 points)

Use ggplot to create a box plot of the t tibble. Show region as x, and sales as y.


ggplot(data = t) +
  geom_boxplot(mapping = aes(x = region, y = sales))

Q3 (10 points)

There are significant differences between accuracy, precision, and recall. Which measure we would care most about in the following situations:

  1. Investigating fraud. We never want to miss a case, even if we have to investigate a lot of false positives.

accuracy

  1. Screening for a minor medical condition. We want to balance false positives and false negatives equally.

recall

  1. Testing before giving a difficult chemotherapy treatment. We never want to give this treatment unless it is absolutely necessary.

precision

LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KIyBBQ0NUIDQyNi9CVURBIDQ1MA0KIyBTcHJpbmcgMjAyNCwgRXhhbSAxDQoNCllvdXIgbmFtZTogX19fX19OYXRoYW5pZWwgUmlwcGV0b19fXw0KDQojIFF1ZXN0aW9uIDEgKDMwJSkNCg0KRml4IHRoZSBjb2RlIGJlbG93DQoNCmBgYHtyfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGRwbHlyKQ0KDQpNYXJnaW4gPSAwLjUNCg0KdWdseV90aWJibGUgPC0gdGliYmxlKA0KICBpZCA9IDE6NSwNCiAgcmVnaW9uID0gYygnYScsICdiJywgJ2EnLCAnYicsIE5BKSwNCiAgc2FsZXMgPSBjKDIzLCA0NCwgNDQsIDIyLCAxMDApKQ0KDQoNCiMgUmVtb3ZlIE5BIHZhbHVlcw0KIyBDcmVhdGUgYSBwcm9maXQgZmllbGQgdXNpbmcgbWFyZ2luDQojIFNvcnQgYnkgcHJvZml0DQojIFJlbW92ZSBpZCBjb2x1bW4NCmNsZWFuX3RpYmJsZSA8LSB1Z2x5X3RpYmJsZSAlPiUgDQogIGZpbHRlcighaXMubmEocmVnaW9uKSkgJT4lIA0KICBtdXRhdGUocHJvZml0ID0gc2FsZXMgKiBNYXJnaW4pICU+JSANCiAgYXJyYW5nZShwcm9maXQpICU+JSANCiAgc2VsZWN0KC1pZCkNCiAgDQojIEZpbmQgdGhlIG51bWJlciBvZiByb3dzIHBlciByZWdpb24sIGFzIHdlbGwgYXMgdGhlIA0KIyBzdW0gb2Ygc2FsZXMNCg0KZ3JvdXBfdGliYmxlIDwtIGNsZWFuX3RpYmJsZSAlPiUgDQogIGdyb3VwX2J5KHJlZ2lvbikgJT4lIA0KICBzdW1tYXJpc2Uobl9vZl9yb3dzID0gbigpLA0KICAgICAgICAgICAgc3VtX29mX3NhbGVzID0gc3VtKHNhbGVzKSkNCg0KIyBVc2UgdGhlIGNvciBmdW5jdGlvbiB0byBmaW5kIHRoZSBjb3JyZWxhdGlvbiANCiMgYmV0d2VlbiBzYWxlcyBhbmQgcHJvZml0DQpjb3IoY2xlYW5fdGliYmxlJHNhbGVzLCBjbGVhbl90aWJibGUkcHJvZml0KQ0KYGBgDQoNCg0KIyBRdWVzdGlvbiAyIA0KDQpDb21wbGV0ZSB0aGUgZm9sbG93aW5nIHRhc2tzIHdpdGggdGhpcyB0aWJibGUuDQoNCmBgYHtyfQ0KDQojIERhdGEgdGliYmxlcyB1c2VkIGZvciBmb2xsb3dpbmcgdGFza3MNCiMgRG8gbm90IG1vZGlmeQ0KdCA8LSB0aWJibGUoDQogIGlkID0gMToxMDAsDQogIHJlZ2lvbiA9IHJlcChjKCdXVicsICdWQScsICdDQScsICdUWCcsICdGTCcpLCAyMCksDQogIHNhbGVzID0gKDEgKyBydW5pZigxMDApKSBeIDQNCikNCg0KdFsxLCBdJHNhbGVzIDwtIE5BDQp0WzIsIF0kcmVnaW9uIDwtIE5BDQoNCnN0YXRlX25hbWVzIDwtIHRpYmJsZSgNCiAgcmVnaW9uID0gYygnV1YnLCAnVkEnLCAnQ0EnLCAnVFgnLCAnRkwnKSwNCiAgc3RhdGVfbmFtZSA9IGMoJ1dlc3QgVmlyZ2luaWEnLCAnVmlyZ2luaWEnLCAnQ2FsaWZvcm5pYScsICdUZXhhcycsICdGbG9yaWRhJykNCikNCg0KYGBgDQoNCiMjIFEyYSAoMjAgcG9pbnRzKQ0KDQpDcmVhdGUgYSB0aWJibGUgY2FsbGVkIFdWIHNhbGVzIHRoYXQgc2hvd3MgYWxsIHNhbGVzIGZvciB0aGF0IHN0YXRlLg0KUGxhY2UgdGhlIHJvd3MgaW4gb3JkZXIgYnkgc2FsZXMuDQpSb3VuZCBzYWxlcyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyICh3aG9sZSBudW1iZXIpDQpFeGNsdWRlIGFueSB2YWx1ZXMgdGhhdCBhcmUgbGVzcyB0aGFuIDUuDQoNCmBgYCB7cn0NCnd2X3NhbGVzIDwtIHQgJT4lIA0KICBzZWxlY3Qoc2FsZXMsIHJlZ2lvbiwgaWQpICU+JSANCiAgbGVmdF9qb2luKHN0YXRlX25hbWVzLCBieSA9ICdyZWdpb24nKSAlPiUgDQogIG11dGF0ZShzYWxlc19yb3VuZGVkID0gcm91bmQoc2FsZXMpKSAlPiUgDQogIGZpbHRlcihzYWxlc19yb3VuZGVkID49IDUpICU+JSANCiAgYXJyYW5nZShzYWxlcykNCg0KcHJpbnQod3Zfc2FsZXMpDQpgYGANCg0KIyMgUTJiICgyMCBwb2ludHMpDQoNCkNyZWF0ZSBhIHRpYmJsZSBjYWxsZWQgc2FsZXMgc3VtbWFyeSB0aGF0IHNob3dzIGdyb3VwZWQgc2FsZXMgZm9yIGVhY2ggc3RhdGUuDQoNCkpvaW4gaXQgd2l0aCB0aGUgc3RhdGUgbmFtZXMgdGliYmxlLg0KDQpTaG93IHRoZSBtZWRpYW4gc2FsZXMgYnkgc3RhdGUgbmFtZS4gQmUgc3VyZSB0byBmaXggYW55IGlzc3VlcyB3aXRoIE5BIHZhbHVlcy4NCg0KYGBgIHtyfQ0KDQpzYWxlc19zdW1tYXJ5IDwtIHQgJT4lIA0KICBzZWxlY3Qoc2FsZXMsIHJlZ2lvbikgJT4lIA0KICBsZWZ0X2pvaW4oc3RhdGVfbmFtZXMsIGJ5ID0gJ3JlZ2lvbicpICU+JSANCiAgZ3JvdXBfYnkoc3RhdGVfbmFtZSkgJT4lIA0KICBtdXRhdGUobWVkX3NhbGVzX3N0YXRlID0gbWVkaWFuKGBzYWxlc2ApKSAlPiUgDQogIGZpbHRlcighaXMubmEobWVkX3NhbGVzX3N0YXRlKSkgJT4lIA0KICBhcnJhbmdlKHN0YXRlX25hbWUpDQogICAgICAgICAgICAgDQogICAgICAgICAgDQpwcmludChzYWxlc19zdW1tYXJ5KQ0KYGBgDQoNCg0KDQojIyBRMmMgKDEwIHBvaW50cykNCg0KVXNlIGdncGxvdCB0byBjcmVhdGUgYSBib3ggcGxvdCBvZiB0aGUgdCB0aWJibGUuIFNob3cgcmVnaW9uIGFzIHgsIGFuZCBzYWxlcyBhcyB5Lg0KYGBge3J9DQoNCmdncGxvdChkYXRhID0gdCkgKw0KICBnZW9tX2JveHBsb3QobWFwcGluZyA9IGFlcyh4ID0gcmVnaW9uLCB5ID0gc2FsZXMpKQ0KDQoNCg0KYGBgDQoNCiMjIFEzICgxMCBwb2ludHMpDQoNClRoZXJlIGFyZSBzaWduaWZpY2FudCBkaWZmZXJlbmNlcyBiZXR3ZWVuIGFjY3VyYWN5LCBwcmVjaXNpb24sIGFuZCByZWNhbGwuIFdoaWNoIG1lYXN1cmUgd2Ugd291bGQgY2FyZSBtb3N0IGFib3V0IGluIHRoZSBmb2xsb3dpbmcgc2l0dWF0aW9uczoNCg0KYSkgSW52ZXN0aWdhdGluZyBmcmF1ZC4gV2UgKm5ldmVyKiB3YW50IHRvIG1pc3MgYSBjYXNlLCBldmVuIGlmIHdlIGhhdmUgdG8gaW52ZXN0aWdhdGUgYSBsb3Qgb2YgZmFsc2UgcG9zaXRpdmVzLg0KDQphY2N1cmFjeQ0KDQpiKSBTY3JlZW5pbmcgZm9yIGEgbWlub3IgbWVkaWNhbCBjb25kaXRpb24uIFdlIHdhbnQgdG8gYmFsYW5jZSBmYWxzZSBwb3NpdGl2ZXMgYW5kIGZhbHNlIG5lZ2F0aXZlcyBlcXVhbGx5Lg0KDQpyZWNhbGwNCg0KYykgVGVzdGluZyBiZWZvcmUgZ2l2aW5nIGEgZGlmZmljdWx0IGNoZW1vdGhlcmFweSB0cmVhdG1lbnQuIFdlICpuZXZlciogd2FudCB0byBnaXZlIHRoaXMgdHJlYXRtZW50IHVubGVzcyBpdCBpcyBhYnNvbHV0ZWx5IG5lY2Vzc2FyeS4NCg0KcHJlY2lzaW9u