Beef Data

Published

September 22, 2001

Outline

This data includes shear force and cook loss evaluations across different muscles of beef animals.

Final Cooked Temp vs. Cook Loss

The results of this are to be expected: higher final internal temperature, results in more cook loss. No one muscle group or breed is exempt from this.

Final Cook Temp vs. Core Average

This is to be expected because as core temperture rises in a cut of meat the meat becomes less tender thus a higher shear force.

Code
# -------------------------------------------------------------------------
# Plot 2: Final Cook Temp vs. Core Average
# -------------------------------------------------------------------------
p2 <- ggplot(filter(Beef.Data_clean, !is.na(final_temp) & !is.na(core_avg)), 
             aes(x = final_temp, y = core_avg)) +
  geom_point(aes(text = hover_text), color = "#2b5c8f", alpha = 0.7, size = 2.5) +
  geom_smooth(method = "lm", color = "#d95f02", se = TRUE) +
  labs(
    title = "Core Average as a Function of Final Cook Temp",
    x = "Final Cooked Temperature (°C)",
    y = "Core Average Shear Force (kg)"
  ) +
  theme_minimal(base_size = 12)

ggplotly(p2, tooltip = "text")

Core Average vs. % Pied

Code
# -------------------------------------------------------------------------
# Plot 3: Core Average vs. % Pied
# -------------------------------------------------------------------------
p3 <- ggplot(filter(Beef.Data_clean, !is.na(pct_pied) & !is.na(core_avg)), 
             aes(x = pct_pied, y = core_avg)) +
  geom_point(aes(text = hover_text), color = "#2b5c8f", alpha = 0.7, size = 2.5) +
  geom_smooth(method = "lm", color = "#d95f02", se = TRUE) +
  labs(
    title = "Core Average Shear Force by % Pied",
    x = "% Piedmontese",
    y = "Core Average Shear Force (kg)"
  ) +
  theme_minimal(base_size = 12)

ggplotly(p3, tooltip = "text")

Core Average vs. Age (in Months)

Code
# -------------------------------------------------------------------------
# Plot 4: Core Average vs. Age (in Months)
# -------------------------------------------------------------------------
p4 <- ggplot(filter(Beef.Data_clean, !is.na(age_months) & !is.na(core_avg)), 
             aes(x = age_months, y = core_avg)) +
  geom_point(aes(text = hover_text), color = "#2b5c8f", alpha = 0.7, size = 2.5) +
  geom_smooth(method = "lm", color = "#d95f02", se = TRUE) +
  labs(
    title = "Core Average Shear Force by Age",
    x = "Age (Months)",
    y = "Core Average Shear Force (kg)"
  ) +
  theme_minimal(base_size = 12)

ggplotly(p4, tooltip = "text")

Core Average Tenderness by Muscle Cut

Code
p5 <- ggplot(filter(Beef.Data_clean, Muscle != "." & !is.na(core_avg)), 
             aes(x = reorder(Muscle, core_avg, FUN = median), y = core_avg, fill = Muscle)) +
  geom_boxplot(alpha = 0.6, outlier.shape = NA) +
  geom_jitter(aes(text = hover_text), width = 0.15, size = 2, alpha = 0.8) +
  labs(
    title = "Tenderness (Core Average) Across Muscle Cuts",
    x = "Muscle Cut",
    y = "Core Average Shear Force (kg)"
  ) +
  theme_minimal(base_size = 12) +
  theme(legend.position = "none")

ggplotly(p5, tooltip = "text")

Myostatin Copy Count vs. Shear Force

Code
# Clean myostatin copies as factor
Beef.Data_clean <- Beef.Data_clean %>%
  mutate(myostatin_factor = as.factor(`Myostatin Copies`))

# Plot 6: Myostatin Copy Count vs. Shear Force
p6 <- ggplot(filter(Beef.Data_clean, !is.na(myostatin_factor) & !is.na(core_avg)), 
             aes(x = myostatin_factor, y = core_avg, fill = myostatin_factor)) +
  geom_boxplot(alpha = 0.5, outlier.shape = NA) +
  geom_jitter(aes(text = hover_text), width = 0.15, size = 2.5, alpha = 0.8) +
  scale_fill_brewer(palette = "Set2") +
  labs(
    title = "Effect of Myostatin Gene Copies on Core Average Tenderness",
    x = "Myostatin Copies",
    y = "Core Average Shear Force (kg)"
  ) +
  theme_minimal(base_size = 12) +
  theme(legend.position = "none")

ggplotly(p6, tooltip = "text")