Data 606 - Project Proposal

Author

Shanice Smith

Published

November 8, 2026

Research Question

As a self-proclaimed pop culture and film bluff, my question is: Do movies with higher production budgets tend to receive higher audience ratings?


Statistical Test

Both the explanatory variable (production budget) and the response variable (audience rating) are numerical and continuous, making simple linear regression the appropriate test. This will allow us to estimate the direction and magnitude of the relationship between budget and rating, and assess whether the relationship is statistically significant.


Setup

In order to verify the dataset, we’re loading in the latest version of the CSV locally and then filtering out the fields we don’t need for our analysis.

Movies with missing or unreported production budgets (recorded as $0) were excluded because they cannot contribute meaningful information to the budget analysis.

Films with fewer than 50 audience votes were also excluded because ratings based on very small numbers of users may not reliably reflect general audience reception.

A higher threshold, such as 250 votes, was considered but could disproportionately exclude lower-budget films with limited theatrical releases, potentially introducing selection bias. The 50-vote threshold was selected as a balance between rating reliability and maintaining a sufficiently large and diverse sample.

Code
library(tidyverse)
library(scales)

# Load the dataset
movies_raw <- read_csv("TMDB_movie_dataset_v11.csv")

# Remove movies in production with unreported budgets (recorded as 0) and missing ratings
movies <- movies_raw |>
  filter(
    budget > 0,
    vote_count >= 50,
    !is.na(vote_average),
    status == "Released"
  ) |>
  select(title, budget, vote_average, vote_count,
         release_date, genres)

Cases

Each case (row) in the dataset represents one film listed in The Movie Database (TMDb). After removing movies in production with unreported budgets (recorded as $0) and films with fewer than 50 votes, the working dataset contains:

Code
cat("Number of cases (movies):", nrow(movies))
Number of cases (movies): 10334

Method of Data Collection

The data was aggregated from The Movie Database (TMDb), a community-built movie and TV database. Users and studios contribute metadata — including budget figures sourced from public records, press releases, and industry reporting — while audience ratings are collected through TMDb’s own user rating system (1–10 scale). This dataset was compiled and published on Kaggle.

Note: The vote_average variable represents the average audience rating submitted by TMDb users on a scale of 1 to 10. These ratings reflect audience opinions collected through the TMDb platform and serve as the response variable for this analysis.


Type of Study

This is an observational study. No treatment was assigned or manipulated. Budget and rating data were recorded; we are only observing and analyzing the relationship between pre-existing values.


Data Source

asaniczka. (2023). TMDB Movies Dataset 2023 (930K Movies) [Dataset]. Kaggle. Dataset version: Downloaded November 2026. https://www.kaggle.com/datasets/asaniczka/tmdb-movies-dataset-2023-930k-movies

The dataset contains movie metadata collected from The Movie Database (TMDb), including production budgets, audience ratings, vote counts, release dates, and genres.

Original data source: The Movie Database (TMDb). https://www.themoviedb.org/


Variables

Response variable: vote_average — the mean audience rating a film received on TMDb, on a scale of 1 to 10. This is a numerical (continuous) variable.

Explanatory variable: budget — the production budget for the film in U.S. dollars. This is a numerical (continuous) variable.


Potential Limitations

There are several limitations to consider in this analysis.

First, production budgets are reported in nominal U.S. dollars and are not adjusted for inflation. Therefore, budgets from different release years may not be directly comparable.

Second, TMDb audience ratings represent the opinions of users who chose to submit ratings and may not represent the opinions of all movie viewers.

Finally, other factors, such as movie genre, release year, marketing, and franchise popularity, may influence audience ratings independently of production budget.

Because this is an observational study, the results will identify associations rather than establish causation.

Relevant Summary Statistics

Production Budget

Code
movies |>
  summarise(
    Mean   = dollar(mean(budget)),
    Median = dollar(median(budget)),
    SD     = dollar(sd(budget)),
    Min    = dollar(min(budget)),
    Max    = dollar(max(budget))
  ) |>
  knitr::kable(
    digits = 2,
    caption = "Summary Statistics: Production Budget (USD)"
  )
Summary Statistics: Production Budget (USD)
Mean Median SD Min Max
$24,213,951 $10,000,000 $37,243,459 $1 $460,000,000
Code
ggplot(movies, aes(x = budget)) +
  geom_histogram(bins = 40, fill = "#4e79a7", color = "white") +
  scale_x_continuous(labels = label_dollar(scale = 1e-6, suffix = "M")) +
  labs(
    title = "Distribution of Production Budgets",
    x = "Budget (Millions USD)",
    y = "Count"
  ) +
  theme_minimal()

The distribution is right-skewed, with most films having modest budgets and a smaller number of blockbusters pulling the mean above the median.


Audience Rating

Code
movies |>
  summarise(
    Mean   = round(mean(vote_average), 2),
    Median = round(median(vote_average), 2),
    SD     = round(sd(vote_average), 2),
    Min    = round(min(vote_average), 2),
    Max    = round(max(vote_average), 2)
  ) |>
  knitr::kable(caption = "Summary Statistics: Audience Rating (1–10)")
Summary Statistics: Audience Rating (1–10)
Mean Median SD Min Max
6.39 6.44 0.88 1.84 9.09
Code
ggplot(movies, aes(x = vote_average)) +
  geom_histogram(bins = 30, fill = "#f28e2b", color = "white") +
  labs(
    title = "Distribution of Audience Ratings",
    x = "TMDb Audience Rating (1–10)",
    y = "Count"
  ) +
  theme_minimal()


Relationship Between Budget and Rating

Code
ggplot(movies, aes(x = budget, y = vote_average)) +
  geom_point(alpha = 0.3, color = "#59a14f") +
  geom_smooth(method = "lm", se = TRUE, color = "#e15759") +
  scale_x_continuous(labels = label_dollar(scale = 1e-6, suffix = "M")) +
  labs(
    title = "Production Budget vs. Audience Rating",
    subtitle = "Each point represents one film; red line shows linear trend",
    x = "Production Budget (Millions USD)",
    y = "Audience Rating (1–10)"
  ) +
  theme_minimal()

Code
# Correlation coefficient
cor_val <- cor(movies$budget, movies$vote_average, use = "complete.obs")
cat("Pearson correlation (budget vs. rating):", round(cor_val, 3))
Pearson correlation (budget vs. rating): 0.092

The scatter plot and correlation coefficient give an early indication of whether a meaningful linear relationship exists between budget and audience rating before formal regression modeling is conducted.

Regression Output

Code
model <- lm(vote_average ~ budget, data = movies)

summary(model)

Call:
lm(formula = vote_average ~ budget, data = movies)

Residuals:
    Min      1Q  Median      3Q     Max 
-4.5688 -0.5392  0.0469  0.6216  2.7528 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 6.335e+00  1.033e-02 613.244   <2e-16 ***
budget      2.183e-09  2.326e-10   9.386   <2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.8804 on 10332 degrees of freedom
Multiple R-squared:  0.008454,  Adjusted R-squared:  0.008359 
F-statistic:  88.1 on 1 and 10332 DF,  p-value: < 2.2e-16