Using the information you collected on movie ratings, implement a Global Baseline Estimate recommendation system in R.

Most recommender systems use personalized algorithms like “content management” and “item-item collaborative filtering.” Sometimes non-personalized recommenders are also useful or necessary. One of the best non-personalized recommender system algorithms is the “Global Baseline Estimate.

The job here is to use the survey data collected and write the R code that makes a movie recommendation using the Global Baseline Estimate algorithm. Please see the attached spreadsheet for implementation details.

library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.4.2
## Warning: package 'ggplot2' was built under R version 4.4.2
## Warning: package 'tibble' was built under R version 4.4.2
## Warning: package 'stringr' was built under R version 4.4.2
## Warning: package 'lubridate' was built under R version 4.4.2
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.1     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.1
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(openintro)
## Loading required package: airports
## Loading required package: cherryblossom
## Loading required package: usdata
library(readxl)
library(dplyr)
library(fortunes)

#load data

movie_rating_data <- read.csv("https://raw.githubusercontent.com/asadny82/Data607/refs/heads/main/MovieRatings.csv", header = TRUE)
head(movie_rating_data)
##      Critic CaptainAmerica Deadpool Frozen JungleBook PitchPerfect2
## 1    Burton             NA       NA     NA          4              
## 2   Charley              4        5      4          3             2
## 3       Dan             NA        5     NA         NA              
## 4 Dieudonne              5        4     NA         NA              
## 5      Matt              4       NA      2         NA             2
## 6  Mauricio              4       NA      3          3             4
##   StarWarsForce
## 1             4
## 2             3
## 3             5
## 4             5
## 5             5
## 6            NA

#change NA to zero

#movie_rating_data <- replace(movie_rating_data, is.na(movie_rating_data),0)

Euclidean distance according to movie rating with upper false

round(dist(movie_rating_data, diag =T, upper=F, method = "euclidean"),2)
## Warning in dist(movie_rating_data, diag = T, upper = F, method = "euclidean"):
## NAs introduced by coercion
##        1     2     3     4     5     6     7     8     9    10    11    12
## 1   0.00                                                                  
## 2   2.65  0.00                                                            
## 3   2.65  3.74  0.00                                                      
## 4   2.65  3.74  1.87  0.00                                                
## 5   2.65  3.74  0.00  1.87  0.00                                          
## 6   2.65  2.96    NA  2.65  3.42  0.00                                    
## 7   3.74  1.87  2.65  2.16  2.96  3.24  0.00                              
## 8   0.00  2.65  2.65  2.65  2.65    NA  0.00  0.00                        
## 9   2.65  4.95  1.87  1.53  1.53  3.74  4.18  2.65  0.00                  
## 10  2.65  3.24  5.29  3.74  4.77  4.58  3.74  2.65  6.06  0.00            
## 11  1.87  3.13  1.87  2.16  5.07  4.58  4.10  0.00  5.77  2.90  0.00      
## 12  2.65  3.06  5.29  5.29  5.29  4.18  4.83  2.65  6.75  1.53  2.16  0.00
## 13  1.87  3.58  0.00  1.53  4.95  3.24  3.74  2.65  5.61  4.04  1.67  3.74
## 14  0.00  1.87  2.65  2.65  1.87  0.00  0.00  0.00  1.87  1.87  1.87  2.65
## 15  2.65  1.67  0.00  2.65  2.16  1.32  2.37    NA  3.42  4.27  3.97  4.18
## 16  2.65  4.18    NA    NA  7.94  5.29  5.92    NA 10.58  0.00  0.00  1.87
##       13    14    15    16
## 1                         
## 2                         
## 3                         
## 4                         
## 5                         
## 6                         
## 7                         
## 8                         
## 9                         
## 10                        
## 11                        
## 12                        
## 13  0.00                  
## 14  2.65  0.00            
## 15  3.13  0.00  0.00      
## 16  1.87    NA  5.29  0.00

Euclidean distance according to movie rating with upper true

round(dist(movie_rating_data, diag =T, upper=T, method = "euclidean"),1)
## Warning in dist(movie_rating_data, diag = T, upper = T, method = "euclidean"):
## NAs introduced by coercion
##       1    2    3    4    5    6    7    8    9   10   11   12   13   14   15
## 1   0.0  2.6  2.6  2.6  2.6  2.6  3.7  0.0  2.6  2.6  1.9  2.6  1.9  0.0  2.6
## 2   2.6  0.0  3.7  3.7  3.7  3.0  1.9  2.6  4.9  3.2  3.1  3.1  3.6  1.9  1.7
## 3   2.6  3.7  0.0  1.9  0.0   NA  2.6  2.6  1.9  5.3  1.9  5.3  0.0  2.6  0.0
## 4   2.6  3.7  1.9  0.0  1.9  2.6  2.2  2.6  1.5  3.7  2.2  5.3  1.5  2.6  2.6
## 5   2.6  3.7  0.0  1.9  0.0  3.4  3.0  2.6  1.5  4.8  5.1  5.3  4.9  1.9  2.2
## 6   2.6  3.0   NA  2.6  3.4  0.0  3.2   NA  3.7  4.6  4.6  4.2  3.2  0.0  1.3
## 7   3.7  1.9  2.6  2.2  3.0  3.2  0.0  0.0  4.2  3.7  4.1  4.8  3.7  0.0  2.4
## 8   0.0  2.6  2.6  2.6  2.6   NA  0.0  0.0  2.6  2.6  0.0  2.6  2.6  0.0   NA
## 9   2.6  4.9  1.9  1.5  1.5  3.7  4.2  2.6  0.0  6.1  5.8  6.7  5.6  1.9  3.4
## 10  2.6  3.2  5.3  3.7  4.8  4.6  3.7  2.6  6.1  0.0  2.9  1.5  4.0  1.9  4.3
## 11  1.9  3.1  1.9  2.2  5.1  4.6  4.1  0.0  5.8  2.9  0.0  2.2  1.7  1.9  4.0
## 12  2.6  3.1  5.3  5.3  5.3  4.2  4.8  2.6  6.7  1.5  2.2  0.0  3.7  2.6  4.2
## 13  1.9  3.6  0.0  1.5  4.9  3.2  3.7  2.6  5.6  4.0  1.7  3.7  0.0  2.6  3.1
## 14  0.0  1.9  2.6  2.6  1.9  0.0  0.0  0.0  1.9  1.9  1.9  2.6  2.6  0.0  0.0
## 15  2.6  1.7  0.0  2.6  2.2  1.3  2.4   NA  3.4  4.3  4.0  4.2  3.1  0.0  0.0
## 16  2.6  4.2   NA   NA  7.9  5.3  5.9   NA 10.6  0.0  0.0  1.9  1.9   NA  5.3
##      16
## 1   2.6
## 2   4.2
## 3    NA
## 4    NA
## 5   7.9
## 6   5.3
## 7   5.9
## 8    NA
## 9  10.6
## 10  0.0
## 11  0.0
## 12  1.9
## 13  1.9
## 14   NA
## 15  5.3
## 16  0.0

#similat matrix

movie_rating1 = 1/(1+as.matrix(dist(movie_rating_data)))
## Warning in dist(movie_rating_data): NAs introduced by coercion
round(movie_rating1,2)
##       1    2    3    4    5    6    7    8    9   10   11   12   13   14   15
## 1  1.00 0.27 0.27 0.27 0.27 0.27 0.21 1.00 0.27 0.27 0.35 0.27 0.35 1.00 0.27
## 2  0.27 1.00 0.21 0.21 0.21 0.25 0.35 0.27 0.17 0.24 0.24 0.25 0.22 0.35 0.37
## 3  0.27 0.21 1.00 0.35 1.00   NA 0.27 0.27 0.35 0.16 0.35 0.16 1.00 0.27 1.00
## 4  0.27 0.21 0.35 1.00 0.35 0.27 0.32 0.27 0.40 0.21 0.32 0.16 0.40 0.27 0.27
## 5  0.27 0.21 1.00 0.35 1.00 0.23 0.25 0.27 0.40 0.17 0.16 0.16 0.17 0.35 0.32
## 6  0.27 0.25   NA 0.27 0.23 1.00 0.24   NA 0.21 0.18 0.18 0.19 0.24 1.00 0.43
## 7  0.21 0.35 0.27 0.32 0.25 0.24 1.00 1.00 0.19 0.21 0.20 0.17 0.21 1.00 0.30
## 8  1.00 0.27 0.27 0.27 0.27   NA 1.00 1.00 0.27 0.27 1.00 0.27 0.27 1.00   NA
## 9  0.27 0.17 0.35 0.40 0.40 0.21 0.19 0.27 1.00 0.14 0.15 0.13 0.15 0.35 0.23
## 10 0.27 0.24 0.16 0.21 0.17 0.18 0.21 0.27 0.14 1.00 0.26 0.40 0.20 0.35 0.19
## 11 0.35 0.24 0.35 0.32 0.16 0.18 0.20 1.00 0.15 0.26 1.00 0.32 0.37 0.35 0.20
## 12 0.27 0.25 0.16 0.16 0.16 0.19 0.17 0.27 0.13 0.40 0.32 1.00 0.21 0.27 0.19
## 13 0.35 0.22 1.00 0.40 0.17 0.24 0.21 0.27 0.15 0.20 0.37 0.21 1.00 0.27 0.24
## 14 1.00 0.35 0.27 0.27 0.35 1.00 1.00 1.00 0.35 0.35 0.35 0.27 0.27 1.00 1.00
## 15 0.27 0.37 1.00 0.27 0.32 0.43 0.30   NA 0.23 0.19 0.20 0.19 0.24 1.00 1.00
## 16 0.27 0.19   NA   NA 0.11 0.16 0.14   NA 0.09 1.00 1.00 0.35 0.35   NA 0.16
##      16
## 1  0.27
## 2  0.19
## 3    NA
## 4    NA
## 5  0.11
## 6  0.16
## 7  0.14
## 8    NA
## 9  0.09
## 10 1.00
## 11 1.00
## 12 0.35
## 13 0.35
## 14   NA
## 15 0.16
## 16 1.00

recommendation

recommend_movies=(1/sum(movie_rating1[16,c(1:16)])) * (movie_rating1[16,c(1:16)] %*% movie_rating1)
recommend_movies
##       1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16
## [1,] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA

Create Subset the data frame, Calculate the global average

movies_data_subset <- movie_rating_data [, c("CaptainAmerica","Deadpool","Frozen","JungleBook","PitchPerfect2","StarWarsForce")]

global_average_rating <- mean(as.matrix(movies_data_subset), na.rm = TRUE)
## Warning in mean.default(as.matrix(movies_data_subset), na.rm = TRUE): argument
## is not numeric or logical: returning NA
print(global_average_rating)
## [1] NA

Function to calculate baseline estimate

Calculate global average rating excluding NA values

calculate_baseline <- function(rating_matrix, mu) {
 
  baseline_matrix <- matrix(0, nrow = nrow(rating_matrix), ncol = ncol(rating_matrix))
  
  
  for (i in 1:nrow(rating_matrix)) {
   
    for (j in 1:ncol(rating_matrix)) {
      
      if (!is.na(rating_matrix[i, j])) {
        baseline_matrix[i, j] <- mu + mean(rating_matrix[i, ], na.rm = TRUE) - mu + mean(rating_matrix[, j], na.rm = TRUE) - mu
      }
    }
  }
  
  return(baseline_matrix)
}

 
mu <- mean(as.matrix(movie_rating_data), na.rm = TRUE)
## Warning in mean.default(as.matrix(movie_rating_data), na.rm = TRUE): argument
## is not numeric or logical: returning NA

Subset the data to exclude the first column (Critic column)

rating_matrix <- as.matrix(movie_rating_data[, -1])
baseline_estimation <- calculate_baseline(rating_matrix, mu)
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[i, ], na.rm = TRUE): argument is not
## numeric or logical: returning NA
## Warning in mean.default(rating_matrix[, j], na.rm = TRUE): argument is not
## numeric or logical: returning NA

Recommend movies based on highest baseline estimate for each user

recommendation_for_mpvies <- function(baseline_matrix) {
  recommendation_list <- list()
  for (i in 1:nrow(baseline_matrix)) {
    max_index <- which.max(baseline_matrix[i, ])
    recommendation_list[[i]] <- names(movie_rating_data)[-1][max_index]
  }
  return(recommendation_list)
}
movie_recommendation<- recommendation_for_mpvies(baseline_estimation)
for (i in 1:length(movie_recommendation)) {
  cat("Critic", i, ":", movie_recommendation[[i]], "\n")
}
## Critic 1 : CaptainAmerica 
## Critic 2 :  
## Critic 3 : CaptainAmerica 
## Critic 4 : Frozen 
## Critic 5 : Deadpool 
## Critic 6 : Deadpool 
## Critic 7 :  
## Critic 8 : CaptainAmerica 
## Critic 9 : JungleBook 
## Critic 10 :  
## Critic 11 :  
## Critic 12 : CaptainAmerica 
## Critic 13 :  
## Critic 14 : Deadpool 
## Critic 15 : StarWarsForce 
## Critic 16 : CaptainAmerica