Step 1: Import the data

There data are on restaurant rating in New York City.

nyc <- read.csv("http://andrewpbray.github.io/data/nyc.csv")
head(nyc)
##   Case          Restaurant Price Food Decor Service East
## 1    1 Daniella Ristorante    43   22    18      20    0
## 2    2  Tello's Ristorante    32   20    19      19    0
## 3    3          Biricchino    34   21    13      18    0
## 4    4             Bottino    41   20    20      17    0
## 5    5          Da Umberto    54   24    19      21    0
## 6    6            Le Madri    52   22    22      21    0

Step 2: Look at the data

A pairs plot can be used to look at all two-way variable comparisons.

library(tidyverse)

nyc%>%
  select(Price, Food, Decor)%>%
  pairs()

Step 3: Create the response vector

Y<-nyc$Price

Step 4: Create the design matrix

X<-matrix(c(rep(1, dim(nyc)[1]),
            nyc$Food, 
            nyc$Decor), 
          nrow=dim(nyc)[1])

head(X)
##      [,1] [,2] [,3]
## [1,]    1   22   18
## [2,]    1   20   19
## [3,]    1   21   13
## [4,]    1   20   20
## [5,]    1   24   19
## [6,]    1   22   22

Step 5: Find the transpose

t(X)
##      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14]
## [1,]    1    1    1    1    1    1    1    1    1     1     1     1     1     1
## [2,]   22   20   21   20   24   22   22   20   22    21    19    21    21    19
## [3,]   18   19   13   20   19   22   16   18   19    17    17    19    19    17
##      [,15] [,16] [,17] [,18] [,19] [,20] [,21] [,22] [,23] [,24] [,25] [,26]
## [1,]     1     1     1     1     1     1     1     1     1     1     1     1
## [2,]    20    21    22    24    19    22    23    23    20    22    22    19
## [3,]    18    19    18    21    17    20    20    17    18    21    20    17
##      [,27] [,28] [,29] [,30] [,31] [,32] [,33] [,34] [,35] [,36] [,37] [,38]
## [1,]     1     1     1     1     1     1     1     1     1     1     1     1
## [2,]    22    20    22    21    20    21    20    23    25    23    21    22
## [3,]    19    16    19    20    16    20    19    22    22    21    18    19
##      [,39] [,40] [,41] [,42] [,43] [,44] [,45] [,46] [,47] [,48] [,49] [,50]
## [1,]     1     1     1     1     1     1     1     1     1     1     1     1
## [2,]    24    21    19    19    21    24    22    22    20    21    24    16
## [3,]    20    20    17    17    17    21    17    17    15    17    18    16
##      [,51] [,52] [,53] [,54] [,55] [,56] [,57] [,58] [,59] [,60] [,61] [,62]
## [1,]     1     1     1     1     1     1     1     1     1     1     1     1
## [2,]    20    20    19    17    18    18    23    20    22    18    24    19
## [3,]    18    20    18    14    15    16    17    14    17    13    20    16
##      [,63] [,64] [,65] [,66] [,67] [,68] [,69] [,70] [,71] [,72] [,73] [,74]
## [1,]     1     1     1     1     1     1     1     1     1     1     1     1
## [2,]    18    20    19    21    20    17    17    22    22    23    24    19
## [3,]    16    19    15    16    19    14    18    21    18    20    20    14
##      [,75] [,76] [,77] [,78] [,79] [,80] [,81] [,82] [,83] [,84] [,85] [,86]
## [1,]     1     1     1     1     1     1     1     1     1     1     1     1
## [2,]    23    22    21    18    18    21    21    23    23    20    23    19
## [3,]    20    16    16    17    16    18    18    19    19    16    19    15
##      [,87] [,88] [,89] [,90] [,91] [,92] [,93] [,94] [,95] [,96] [,97] [,98]
## [1,]     1     1     1     1     1     1     1     1     1     1     1     1
## [2,]    23    25    21    21    22    24    23    23    19    20    19    19
## [3,]    18    24    19    15    18    22    16    19    18    16    13    17
##      [,99] [,100] [,101] [,102] [,103] [,104] [,105] [,106] [,107] [,108]
## [1,]     1      1      1      1      1      1      1      1      1      1
## [2,]    19     18     19     20     23     18     24     23     18     20
## [3,]    14     15     18     15     16     15     21     20     16     17
##      [,109] [,110] [,111] [,112] [,113] [,114] [,115] [,116] [,117] [,118]
## [1,]      1      1      1      1      1      1      1      1      1      1
## [2,]     20     23     19     18     23     23     18     17     21     19
## [3,]     19     19     16     16     20     22      9     14      6     17
##      [,119] [,120] [,121] [,122] [,123] [,124] [,125] [,126] [,127] [,128]
## [1,]      1      1      1      1      1      1      1      1      1      1
## [2,]     19     19     19     19     17     20     20     18     22     20
## [3,]     15     15     17     16     16     23     17     18     18     17
##      [,129] [,130] [,131] [,132] [,133] [,134] [,135] [,136] [,137] [,138]
## [1,]      1      1      1      1      1      1      1      1      1      1
## [2,]     20     19     19     23     20     22     20     19     19     19
## [3,]     15     23     21     22     17     22     19     19     18     15
##      [,139] [,140] [,141] [,142] [,143] [,144] [,145] [,146] [,147] [,148]
## [1,]      1      1      1      1      1      1      1      1      1      1
## [2,]     20     18     21     21     22     22     22     23     19     22
## [3,]     14     21     18     18     24     19     25     23     20     21
##      [,149] [,150] [,151] [,152] [,153] [,154] [,155] [,156] [,157] [,158]
## [1,]      1      1      1      1      1      1      1      1      1      1
## [2,]     21     18     21     23     21     20     17     20     22     18
## [3,]     17     17     16     19     19     18     14     16     19     16
##      [,159] [,160] [,161] [,162] [,163] [,164] [,165] [,166] [,167] [,168]
## [1,]      1      1      1      1      1      1      1      1      1      1
## [2,]     16     20     21     21     19     17     20     18     22     24
## [3,]     15     17     19     15     16     15     16     16     17     10

Step 6: Perform matrix multiplication

t(X)%*%X
##      [,1]  [,2]  [,3]
## [1,]  168  3460  2972
## [2,] 3460 71916 61660
## [3,] 2972 61660 53796

Step 7: Find the inverse

solve(t(X)%*%X)
##              [,1]          [,2]          [,3]
## [1,]  0.665867012 -0.0286982924 -0.0038928555
## [2,] -0.028698292  0.0020417487 -0.0007547568
## [3,] -0.003892855 -0.0007547568  0.0010987410

Step 8: Find the \(\hat{\beta}\) vector

\[\hat{\beta}=(X'X)^{-1}X'Y\]

solve(t(X)%*%X)%*%t(X)%*%Y
##            [,1]
## [1,] -24.500156
## [2,]   1.646149
## [3,]   1.882015

Step 9: Confirm with the {lm()} function

mod<-lm(Price~Food+Decor, data=nyc)
mod
## 
## Call:
## lm(formula = Price ~ Food + Decor, data = nyc)
## 
## Coefficients:
## (Intercept)         Food        Decor  
##     -24.500        1.646        1.882