Notebook Instructions


About

  • In a given year, if it rains more, we may see that there might be an increase in crop production. This is because more water may lead to more plants.

  • This is a direct relationship; the number of fruits may be able to be predicted by amount of waterfall in a certain year.

  • This example represents simple linear regression, which is an extremely useful concept that allows us to predict values of a certain variable based off another variable.

  • This lab will explore the concepts of simple linear regression, multiple linear regression, and watson analytics.

Load Packages in R/RStudio

We are going to use tidyverse a collection of R packages designed for data science.

Loading required package: tidyverse
-- Attaching packages --------------------------------------- tidyverse 1.2.1 --
v ggplot2 2.2.1     v purrr   0.2.4
v tibble  1.4.2     v dplyr   0.7.4
v tidyr   0.8.0     v stringr 1.2.0
v readr   1.1.1     v forcats 0.2.0
-- Conflicts ------------------------------------------ tidyverse_conflicts() --
x dplyr::filter() masks stats::filter()
x dplyr::lag()    masks stats::lag()
Loading required package: plotly
there is no package called <U+393C><U+3E31>plotly<U+393C><U+3E32>Installing package into <U+393C><U+3E31>C:/Users/fasha/OneDrive/Documents/R/win-library/3.4<U+393C><U+3E32>
(as <U+393C><U+3E31>lib<U+393C><U+3E32> is unspecified)
also installing the dependencies <U+393C><U+3E31>modeltools<U+393C><U+3E32>, <U+393C><U+3E31>DEoptimR<U+393C><U+3E32>, <U+393C><U+3E31>prettyunits<U+393C><U+3E32>, <U+393C><U+3E31>mclust<U+393C><U+3E32>, <U+393C><U+3E31>flexmix<U+393C><U+3E32>, <U+393C><U+3E31>prabclus<U+393C><U+3E32>, <U+393C><U+3E31>diptest<U+393C><U+3E32>, <U+393C><U+3E31>mvtnorm<U+393C><U+3E32>, <U+393C><U+3E31>robustbase<U+393C><U+3E32>, <U+393C><U+3E31>kernlab<U+393C><U+3E32>, <U+393C><U+3E31>trimcluster<U+393C><U+3E32>, <U+393C><U+3E31>udunits2<U+393C><U+3E32>, <U+393C><U+3E31>e1071<U+393C><U+3E32>, <U+393C><U+3E31>subprocess<U+393C><U+3E32>, <U+393C><U+3E31>semver<U+393C><U+3E32>, <U+393C><U+3E31>rappdirs<U+393C><U+3E32>, <U+393C><U+3E31>progress<U+393C><U+3E32>, <U+393C><U+3E31>reshape<U+393C><U+3E32>, <U+393C><U+3E31>memoise<U+393C><U+3E32>, <U+393C><U+3E31>git2r<U+393C><U+3E32>, <U+393C><U+3E31>httpuv<U+393C><U+3E32>, <U+393C><U+3E31>xtable<U+393C><U+3E32>, <U+393C><U+3E31>sourcetools<U+393C><U+3E32>, <U+393C><U+3E31>processx<U+393C><U+3E32>, <U+393C><U+3E31>fpc<U+393C><U+3E32>, <U+393C><U+3E31>viridis<U+393C><U+3E32>, <U+393C><U+3E31>units<U+393C><U+3E32>, <U+393C><U+3E31>classInt<U+393C><U+3E32>, <U+393C><U+3E31>XML<U+393C><U+3E32>, <U+393C><U+3E31>wdman<U+393C><U+3E32>, <U+393C><U+3E31>binman<U+393C><U+3E32>, <U+393C><U+3E31>repr<U+393C><U+3E32>, <U+393C><U+3E31>htmlwidgets<U+393C><U+3E32>, <U+393C><U+3E31>hexbin<U+393C><U+3E32>, <U+393C><U+3E31>crosstalk<U+393C><U+3E32>, <U+393C><U+3E31>data.table<U+393C><U+3E32>, <U+393C><U+3E31>maps<U+393C><U+3E32>, <U+393C><U+3E31>ggthemes<U+393C><U+3E32>, <U+393C><U+3E31>GGally<U+393C><U+3E32>, <U+393C><U+3E31>devtools<U+393C><U+3E32>, <U+393C><U+3E31>shiny<U+393C><U+3E32>, <U+393C><U+3E31>Rserve<U+393C><U+3E32>, <U+393C><U+3E31>RSclient<U+393C><U+3E32>, <U+393C><U+3E31>Cairo<U+393C><U+3E32>, <U+393C><U+3E31>webshot<U+393C><U+3E32>, <U+393C><U+3E31>listviewer<U+393C><U+3E32>, <U+393C><U+3E31>dendextend<U+393C><U+3E32>, <U+393C><U+3E31>sf<U+393C><U+3E32>, <U+393C><U+3E31>RSelenium<U+393C><U+3E32>, <U+393C><U+3E31>png<U+393C><U+3E32>, <U+393C><U+3E31>IRdisplay<U+393C><U+3E32>

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/modeltools_0.2-21.zip'
Content type 'application/zip' length 138817 bytes (135 KB)
downloaded 135 KB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/DEoptimR_1.0-8.zip'
Content type 'application/zip' length 41956 bytes (40 KB)
downloaded 40 KB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/prettyunits_1.0.2.zip'
Content type 'application/zip' length 27450 bytes (26 KB)
downloaded 26 KB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/mclust_5.4.zip'
Content type 'application/zip' length 4128594 bytes (3.9 MB)
downloaded 3.9 MB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/flexmix_2.3-14.zip'
Content type 'application/zip' length 1418984 bytes (1.4 MB)
downloaded 1.4 MB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/prabclus_2.2-6.zip'
Content type 'application/zip' length 280371 bytes (273 KB)
downloaded 273 KB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/diptest_0.75-7.zip'
Content type 'application/zip' length 355332 bytes (347 KB)
downloaded 347 KB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/mvtnorm_1.0-7.zip'
Content type 'application/zip' length 233555 bytes (228 KB)
downloaded 228 KB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/robustbase_0.92-8.zip'
Content type 'application/zip' length 3373315 bytes (3.2 MB)
downloaded 3.2 MB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/kernlab_0.9-25.zip'
Content type 'application/zip' length 2218659 bytes (2.1 MB)
downloaded 2.1 MB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/trimcluster_0.1-2.zip'
Content type 'application/zip' length 16170 bytes (15 KB)
downloaded 15 KB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/udunits2_0.13.zip'
Content type 'application/zip' length 277648 bytes (271 KB)
downloaded 271 KB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/e1071_1.6-8.zip'
Content type 'application/zip' length 895338 bytes (874 KB)
downloaded 874 KB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/subprocess_0.8.2.zip'
Content type 'application/zip' length 513586 bytes (501 KB)
downloaded 501 KB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/semver_0.2.0.zip'
Content type 'application/zip' length 618390 bytes (603 KB)
downloaded 603 KB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/rappdirs_0.3.1.zip'
Content type 'application/zip' length 82922 bytes (80 KB)
downloaded 80 KB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/progress_1.1.2.zip'
Content type 'application/zip' length 42555 bytes (41 KB)
downloaded 41 KB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/reshape_0.8.7.zip'
Content type 'application/zip' length 128195 bytes (125 KB)
downloaded 125 KB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/memoise_1.1.0.zip'
Content type 'application/zip' length 29930 bytes (29 KB)
downloaded 29 KB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/git2r_0.21.0.zip'
Content type 'application/zip' length 3028572 bytes (2.9 MB)
downloaded 2.9 MB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/httpuv_1.3.6.2.zip'
Content type 'application/zip' length 930542 bytes (908 KB)
downloaded 908 KB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/xtable_1.8-2.zip'
Content type 'application/zip' length 710221 bytes (693 KB)
downloaded 693 KB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/sourcetools_0.1.6.zip'
Content type 'application/zip' length 528078 bytes (515 KB)
downloaded 515 KB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/processx_2.0.0.1.zip'
Content type 'application/zip' length 91610 bytes (89 KB)
downloaded 89 KB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/fpc_2.1-11.zip'
Content type 'application/zip' length 458239 bytes (447 KB)
downloaded 447 KB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/viridis_0.5.0.zip'
Content type 'application/zip' length 1714253 bytes (1.6 MB)
downloaded 1.6 MB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/units_0.5-1.zip'
Content type 'application/zip' length 872436 bytes (851 KB)
downloaded 851 KB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/classInt_0.1-24.zip'
Content type 'application/zip' length 60081 bytes (58 KB)
downloaded 58 KB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/XML_3.98-1.10.zip'
Content type 'application/zip' length 4325149 bytes (4.1 MB)
downloaded 4.1 MB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/wdman_0.2.2.zip'
Content type 'application/zip' length 54591 bytes (53 KB)
downloaded 53 KB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/binman_0.1.0.zip'
Content type 'application/zip' length 83672 bytes (81 KB)
downloaded 81 KB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/repr_0.12.0.zip'
Content type 'application/zip' length 61241 bytes (59 KB)
downloaded 59 KB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/htmlwidgets_1.0.zip'
Content type 'application/zip' length 852738 bytes (832 KB)
downloaded 832 KB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/hexbin_1.27.2.zip'
Content type 'application/zip' length 684884 bytes (668 KB)
downloaded 668 KB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/crosstalk_1.0.0.zip'
Content type 'application/zip' length 599121 bytes (585 KB)
downloaded 585 KB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/data.table_1.10.4-3.zip'
Content type 'application/zip' length 1577087 bytes (1.5 MB)
downloaded 1.5 MB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/maps_3.2.0.zip'
Content type 'application/zip' length 3631730 bytes (3.5 MB)
downloaded 3.5 MB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/ggthemes_3.4.0.zip'
Content type 'application/zip' length 910204 bytes (888 KB)
downloaded 888 KB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/GGally_1.3.2.zip'
Content type 'application/zip' length 1243907 bytes (1.2 MB)
downloaded 1.2 MB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/devtools_1.13.5.zip'
Content type 'application/zip' length 443954 bytes (433 KB)
downloaded 433 KB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/shiny_1.0.5.zip'
Content type 'application/zip' length 2835352 bytes (2.7 MB)
downloaded 2.7 MB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/Rserve_1.7-3.zip'
Content type 'application/zip' length 632080 bytes (617 KB)
downloaded 617 KB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/RSclient_0.7-3.zip'
Content type 'application/zip' length 1292026 bytes (1.2 MB)
downloaded 1.2 MB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/Cairo_1.5-9.zip'
Content type 'application/zip' length 1031084 bytes (1006 KB)
downloaded 1006 KB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/webshot_0.5.0.zip'
Content type 'application/zip' length 1353612 bytes (1.3 MB)
downloaded 1.3 MB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/listviewer_1.4.0.zip'
Content type 'application/zip' length 243425 bytes (237 KB)
downloaded 237 KB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/dendextend_1.7.0.zip'
Content type 'application/zip' length 1853859 bytes (1.8 MB)
downloaded 1.8 MB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/sf_0.6-0.zip'
Content type 'application/zip' length 36277805 bytes (34.6 MB)
downloaded 34.6 MB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/RSelenium_1.7.1.zip'
Content type 'application/zip' length 1887767 bytes (1.8 MB)
downloaded 1.8 MB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/png_0.1-7.zip'
Content type 'application/zip' length 291037 bytes (284 KB)
downloaded 284 KB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/IRdisplay_0.4.4.zip'
Content type 'application/zip' length 24378 bytes (23 KB)
downloaded 23 KB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/plotly_4.7.1.zip'
Content type 'application/zip' length 1160742 bytes (1.1 MB)
downloaded 1.1 MB
package ‘modeltools’ successfully unpacked and MD5 sums checked
package ‘DEoptimR’ successfully unpacked and MD5 sums checked
package ‘prettyunits’ successfully unpacked and MD5 sums checked
package ‘mclust’ successfully unpacked and MD5 sums checked
package ‘flexmix’ successfully unpacked and MD5 sums checked
package ‘prabclus’ successfully unpacked and MD5 sums checked
package ‘diptest’ successfully unpacked and MD5 sums checked
package ‘mvtnorm’ successfully unpacked and MD5 sums checked
package ‘robustbase’ successfully unpacked and MD5 sums checked
package ‘kernlab’ successfully unpacked and MD5 sums checked
package ‘trimcluster’ successfully unpacked and MD5 sums checked
package ‘udunits2’ successfully unpacked and MD5 sums checked
package ‘e1071’ successfully unpacked and MD5 sums checked
package ‘subprocess’ successfully unpacked and MD5 sums checked
package ‘semver’ successfully unpacked and MD5 sums checked
package ‘rappdirs’ successfully unpacked and MD5 sums checked
package ‘progress’ successfully unpacked and MD5 sums checked
package ‘reshape’ successfully unpacked and MD5 sums checked
package ‘memoise’ successfully unpacked and MD5 sums checked
package ‘git2r’ successfully unpacked and MD5 sums checked
package ‘httpuv’ successfully unpacked and MD5 sums checked
package ‘xtable’ successfully unpacked and MD5 sums checked
package ‘sourcetools’ successfully unpacked and MD5 sums checked
package ‘processx’ successfully unpacked and MD5 sums checked
package ‘fpc’ successfully unpacked and MD5 sums checked
package ‘viridis’ successfully unpacked and MD5 sums checked
package ‘units’ successfully unpacked and MD5 sums checked
package ‘classInt’ successfully unpacked and MD5 sums checked
package ‘XML’ successfully unpacked and MD5 sums checked
package ‘wdman’ successfully unpacked and MD5 sums checked
package ‘binman’ successfully unpacked and MD5 sums checked
package ‘repr’ successfully unpacked and MD5 sums checked
package ‘htmlwidgets’ successfully unpacked and MD5 sums checked
package ‘hexbin’ successfully unpacked and MD5 sums checked
package ‘crosstalk’ successfully unpacked and MD5 sums checked
package ‘data.table’ successfully unpacked and MD5 sums checked
package ‘maps’ successfully unpacked and MD5 sums checked
package ‘ggthemes’ successfully unpacked and MD5 sums checked
package ‘GGally’ successfully unpacked and MD5 sums checked
package ‘devtools’ successfully unpacked and MD5 sums checked
package ‘shiny’ successfully unpacked and MD5 sums checked
package ‘Rserve’ successfully unpacked and MD5 sums checked
package ‘RSclient’ successfully unpacked and MD5 sums checked
package ‘Cairo’ successfully unpacked and MD5 sums checked
package ‘webshot’ successfully unpacked and MD5 sums checked
package ‘listviewer’ successfully unpacked and MD5 sums checked
package ‘dendextend’ successfully unpacked and MD5 sums checked
package ‘sf’ successfully unpacked and MD5 sums checked
package ‘RSelenium’ successfully unpacked and MD5 sums checked
package ‘png’ successfully unpacked and MD5 sums checked
package ‘IRdisplay’ successfully unpacked and MD5 sums checked
package ‘plotly’ successfully unpacked and MD5 sums checked

The downloaded binary packages are in
    C:\Users\fasha\AppData\Local\Temp\Rtmp0oaX4s\downloaded_packages

Attaching package: <U+393C><U+3E31>plotly<U+393C><U+3E32>

The following object is masked from <U+393C><U+3E31>package:ggplot2<U+393C><U+3E32>:

    last_plot

The following object is masked from <U+393C><U+3E31>package:stats<U+393C><U+3E32>:

    filter

The following object is masked from <U+393C><U+3E31>package:graphics<U+393C><U+3E32>:

    layout

Task 1: Correlation Analysis


1A) Read the csv file into R Studio and display the dataset.

  • Name your dataset ‘mydata’ so it easy to work with.

  • Commands: read_csv() rename() head()

Extract the assigned features (columns) to perform some analytics.

mydata <- read.csv(file="data/Advertising.csv")
mydata
sales <- mydata$sales
newspaper <- mydata$newspaper
radio <- mydata$radio
tv <- mydata$TV
mydata <- rename(mydata, "case_number" = "X")
head(mydata)

1B) Create a correlation table for your to compare the correlations between all variables. Remove any variables where correlation between variables is irrelevant or inaccurate

  • Commands: cor() mydata[ -c(“COLUMN_NAME OR COLUMN_NUMBER”) ]
corr = cor(mydata[ -c(1)] )
corr
                  TV      radio  newspaper     sales
TV        1.00000000 0.05480866 0.05664787 0.7822244
radio     0.05480866 1.00000000 0.35410375 0.5762226
newspaper 0.05664787 0.35410375 1.00000000 0.2282990
sales     0.78222442 0.57622257 0.22829903 1.0000000

1C) Why is the value “1.0” down the diagonal? Which pairs seem to have the strongest correlations, list the pairs.

It’s where the categories are both the same. For example, where Newspaper meets Newspaper. The value is one because since it’s the same category is perfectly correlated. Sales and TV have a correlation of .78, and sales and radio have correlation of about .576. Those are the two next highest correlations.

1D-a) Identifying the dependent variable (y) and one independent variable (x_i) using the correlation table to identify a variable with a coefficient greater than 0.20 and lower than 0.60. Use those two variables to create a scatterplot to visualize the data. Note any patterns or relation between the two variables

  • Commands: qplot( x = VARIABLE, y = VARIABLE, data = mydata)
qplot( x = radio, y = sales, data = mydata)

The points seem to have a positive slope with a few outliers.

1D-b) Create a 3D scatterplot between the two of the strongest correlated variables to the dependent variable. Note any patterns and the coordinates of three points with the heights values (x,y,z)

p = plot_ly(mydata, x = ~radio, y = ~TV, z = ~sales, marker = list(size = 5)) %>% add_markers() 
p

The points seem to bunch at the top and then fan out. The three points are: x=48.9, y=276.9, z=27. Another is x=43, y=287.6, z=26.2. Another is x=49, y=243.2, z=25.4.


Task 2: Regression Analysis


  • To create a regression model we use the function lm(), such as lm( y ~ x )
  • Where the independent variable or variables [ x_1, x_2, … x_i ], predict the values of the dependent variable y.

2A) Create a linear regression model by identifying the dependent variable (y) and for independent variable (x_i) use the correlation table to identify a variable with a coefficient greater than 0.20 and lower than 0.60. (same variables as 1D-a)

  • Commands: lm( y ~ x )
#Simple Linear Regression Model
reg <- lm( sales ~ radio )
reg

Call:
lm(formula = sales ~ radio)

Coefficients:
(Intercept)        radio  
     9.3116       0.2025  

2B) Use the regression model to create a report. Note the R-Squared and Adjusted R-Squared values, determine if this is a good or bad fit for your data?

  • Commands: Use the summary() function to create a report for the linear model
#Summary of Simple Linear Regression Model
summary(reg)

Call:
lm(formula = sales ~ radio)

Residuals:
     Min       1Q   Median       3Q      Max 
-15.7305  -2.1324   0.7707   2.7775   8.1810 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  9.31164    0.56290  16.542   <2e-16 ***
radio        0.20250    0.02041   9.921   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 4.275 on 198 degrees of freedom
Multiple R-squared:  0.332, Adjusted R-squared:  0.3287 
F-statistic: 98.42 on 1 and 198 DF,  p-value: < 2.2e-16

# The r-squared value is .332 and teh adjusted r-sqared value is .3287. Usually when the the value is low, it means it’s a bad fit. It’s true in this situation.

2C) Create a plot for the dependent (y) and independent (x) variables Note any patterns or relation between the two variables describe the trend line.

  • The trend line will show how far the predictions are from the actual value
  • The distance from the actual versus the predicted is the residual
#p <- qplot( x = INDEPENDENT_VARIABLE, y = DEPENDENT_VARIABLE, data = mydata) + geom_point()
p <- qplot( x = radio, y = sales, data = mydata) + geom_point()
#Add a trend line plot using the a linear model
#p + geom_smooth(method = "lm", formula = y ~ x)
p + geom_smooth(method = "lm", formula = y ~ x)

The points are all pretty scattered but they seem to have a positive correlation. The trend line shows which points are most close to the actual value.

2D-a) Create a Multiple linear regression model and summary report using the two strongest correlated variables and the dependent variable. Note the R-Squared and Adjusted R-Squared values, determine if this is a good or bad fit for your data? Compared this model to the previous model, which model is better?

  • Sometimes, one variable is very good at predicting another variable. But most times, there are more than one factors that affect the prediction of another variable.
  • While increased rainfall is a good predictor of increased crop supply, decreased herbivores can also result in an increase of crops.
  • This idea is a loose metaphor for multiple linear regression.

  • Multiple linear regression lm(y ~ x_0 + x_1 + x_2 + … x_i )
  • Where y is the predicted/dependent variable and the x variables are the predictors/independent variable

  • commands: lm( y ~ x_1 + x_2 ) summary( reg_model )

#Multiple Linear Regression Model
#mlr1 <- lm( DEPENDENT_VARIABLE ~ INDEPENDENT_VARIABLE1 + INDEPENDENT_VARIABLE2 )
mlr1 <- lm( sales ~ radio + tv )
#Summary of Multiple Linear Regression Model
summary(mlr1)

Call:
lm(formula = sales ~ radio + tv)

Residuals:
    Min      1Q  Median      3Q     Max 
-8.7977 -0.8752  0.2422  1.1708  2.8328 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  2.92110    0.29449   9.919   <2e-16 ***
radio        0.18799    0.00804  23.382   <2e-16 ***
tv           0.04575    0.00139  32.909   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.681 on 197 degrees of freedom
Multiple R-squared:  0.8972,    Adjusted R-squared:  0.8962 
F-statistic: 859.6 on 2 and 197 DF,  p-value: < 2.2e-16

The r-squared value is .8972 and the adjusted is .8962. These values are higher than the past values showing that this is a better model.

2D-b) Create a Multiple Linear Regression Model using all relevant independent variables and the dependent variable. Note the R-Squared and Adjusted R-Squared values, determine if this is a good or bad fit for your data?

mlr2 <- lm( sales ~ radio + tv + newspaper)
summary(mlr2)

Call:
lm(formula = sales ~ radio + tv + newspaper)

Residuals:
    Min      1Q  Median      3Q     Max 
-8.8277 -0.8908  0.2418  1.1893  2.8292 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)  2.938889   0.311908   9.422   <2e-16 ***
radio        0.188530   0.008611  21.893   <2e-16 ***
tv           0.045765   0.001395  32.809   <2e-16 ***
newspaper   -0.001037   0.005871  -0.177     0.86    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.686 on 196 degrees of freedom
Multiple R-squared:  0.8972,    Adjusted R-squared:  0.8956 
F-statistic: 570.3 on 3 and 196 DF,  p-value: < 2.2e-16

The r-squared value is .8972 and the adjusted is .8956. The r-squared value is the same as the last model, but the adjusted is less on this model. The values are still close to one though which indicates that they are a good fit.

Based purely on the values for R-Squared and Adjusted R-Squared, which linear regression model is best in predicting the dependent variable? Explain why

The second model is the best because both it’s r-squared and adjusted r-sqquared are cclosest to one indicating that this model is best at estimating both the dependent and independent values.

2E) Use the three different models to predicted the dependent variable for the given values of the independent variables.

  • Variable: Radio = 69
  • Variable: TV = 255
  • Variable: newspaper = 75

MODEL 1

sales_predicted1 = 9.31146 + (0.20250) * (69)
sales_predicted1
[1] 23.28396

MODEL 2

sales_predicted2 = 2.92110 + (0.18799) * (69) + (0.04575) * (255)
sales_predicted2
[1] 27.55866

MODEL 3

sales_predicted3 = 2.938889 + (0.188530) * (69) + (0.045765) * (255) + (-0.001037) * (75)
sales_predicted3
[1] 27.53976

Task 3: Watson Analysis


To complete the last task, follow the directions found below. Make sure to screenshot and attach any pictures of the results obtained or any questions asked.

3A) Use the Predictive module to analyze the given data. Note any interesting patterns add an screenshot of what you found.

knitr::include_graphics("imgs/sales1.png")

knitr::include_graphics("imgs/sales2.png")

This shows that TV and radio both predict sales. The predicted value is is highest when tv>117.2 and radio>27.7. The predictive strength is 72%.

3B) Note the predictive power strength of reported variables. Consider the one field predictive model only, describe your findings and add and screenshot

knitr::include_graphics("imgs/sales3.png")

This shows both radio and tv are drivers of sales with tv at 59% and radio at 32%. However, when combined their strenth is 94%. This is probably because there are 2 factors driving the sales instead of just one.

3C) How do Watson results reconcile with your findings based on the R regression analysis in task 2? Explain how.

It lines up with when there are more variables, the r-squared and adjusted r-squared variables are higher just as the above picture shows when that when there are more drivers, the strength is higher.

LS0tDQp0aXRsZTogIlByZWRpY3RpdmUgQW5hbHl0aWNzIg0KYXV0aG9yOiAiQXNobGV5IEtyZW56Ig0KZGF0ZTogIk1hcmNoIDUsIDIwMTgiDQpvdXRwdXQ6DQogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQNCiAgaHRtbF9kb2N1bWVudDogZGVmYXVsdA0Kc3VidGl0bGU6IENNRSBHcm91cCBGb3VuZGF0aW9uIEJ1c2luZXNzIEFuYWx5dGljcyBMYWINCi0tLQ0KDQotLS0tLS0tLS0tLS0tDQoNCiMjIE5vdGVib29rIEluc3RydWN0aW9ucw0KDQotLS0tLS0tLS0tLS0tDQoNCiogRm9yIHlvdXIgYXNzaWdubWVudCB5b3UgbWF5IGJlIHVzaW5nIGRpZmZlcmVudCBkYXRhc2V0IHRoYW4gd2hhdCBpcyBpbmNsdWRlZCBoZXJlLiANCg0KKiBBbHdheXMgcmVhZCBjYXJlZnVsbHkgdGhlIGluc3RydWN0aW9ucyBvbiBTYWthaS4gIA0KDQoqIFRhc2tzL3F1ZXN0aW9ucyB0byBiZSBjb21wbGV0ZWQvYW5zd2VyZWQgYXJlIGhpZ2hsaWdodGVkIGluIGxhcmdlciBib2xkZWQgZm9udHMgYW5kIG51bWJlcmVkIGFjY29yZGluZyB0byB0aGVpciBzZWN0aW9uLg0KDQojIyMgQWJvdXQNCg0KKiBJbiBhIGdpdmVuIHllYXIsIGlmIGl0IHJhaW5zIG1vcmUsIHdlIG1heSBzZWUgdGhhdCB0aGVyZSBtaWdodCBiZSBhbiBpbmNyZWFzZSBpbiBjcm9wIHByb2R1Y3Rpb24uIFRoaXMgaXMgYmVjYXVzZSBtb3JlIHdhdGVyIG1heSBsZWFkIHRvIG1vcmUgcGxhbnRzLiANCg0KKiBUaGlzIGlzIGEgZGlyZWN0IHJlbGF0aW9uc2hpcDsgdGhlIG51bWJlciBvZiBmcnVpdHMgbWF5IGJlIGFibGUgdG8gYmUgcHJlZGljdGVkIGJ5IGFtb3VudCBvZiB3YXRlcmZhbGwgaW4gYSBjZXJ0YWluIHllYXIuIA0KDQoqIFRoaXMgZXhhbXBsZSByZXByZXNlbnRzIHNpbXBsZSBsaW5lYXIgcmVncmVzc2lvbiwgd2hpY2ggaXMgYW4gZXh0cmVtZWx5IHVzZWZ1bCBjb25jZXB0IHRoYXQgYWxsb3dzIHVzIHRvIHByZWRpY3QgdmFsdWVzIG9mIGEgY2VydGFpbiB2YXJpYWJsZSBiYXNlZCBvZmYgYW5vdGhlciB2YXJpYWJsZS4gDQoNCiogVGhpcyBsYWIgd2lsbCBleHBsb3JlIHRoZSBjb25jZXB0cyBvZiBzaW1wbGUgbGluZWFyIHJlZ3Jlc3Npb24sIG11bHRpcGxlIGxpbmVhciByZWdyZXNzaW9uLCBhbmQgd2F0c29uIGFuYWx5dGljcy4gDQoNCg0KIyMjIExvYWQgUGFja2FnZXMgaW4gUi9SU3R1ZGlvIA0KDQpXZSBhcmUgZ29pbmcgdG8gdXNlIHRpZHl2ZXJzZSBhIGNvbGxlY3Rpb24gb2YgUiBwYWNrYWdlcyBkZXNpZ25lZCBmb3IgZGF0YSBzY2llbmNlLiANCg0KKiBJbmZvOiBodHRwczovL3d3dy50aWR5dmVyc2Uub3JnLw0KDQpgYGB7ciwgZWNobyA9IEZBTFNFfQ0KDQojIEhlcmUgd2UgYXJlIGNoZWNraW5nIGlmIHRoZSBwYWNrYWdlIGlzIGluc3RhbGxlZA0KaWYoIXJlcXVpcmUoInRpZHl2ZXJzZSIpKXsNCiAgDQogICMgSWYgdGhlIHBhY2thZ2UgaXMgbm90IGluIHRoZSBzeXN0ZW0gdGhlbiBpdCB3aWxsIGJlIGluc3RhbGwNCiAgaW5zdGFsbC5wYWNrYWdlcygidGlkeXZlcnNlIiwgZGVwZW5kZW5jaWVzID0gVFJVRSkNCiAgDQogICMgSGVyZSB3ZSBhcmUgbG9hZGluZyB0aGUgcGFja2FnZQ0KICBsaWJyYXJ5KCJ0aWR5dmVyc2UiKQ0KfQ0KDQojIEhlcmUgd2UgYXJlIGNoZWNraW5nIGlmIHRoZSBwYWNrYWdlIGlzIGluc3RhbGxlZA0KaWYoIXJlcXVpcmUoInBsb3RseSIpKXsNCiAgDQogICMgSWYgdGhlIHBhY2thZ2UgaXMgbm90IGluIHRoZSBzeXN0ZW0gdGhlbiBpdCB3aWxsIGJlIGluc3RhbGwNCiAgaW5zdGFsbC5wYWNrYWdlcygicGxvdGx5IiwgZGVwZW5kZW5jaWVzID0gVFJVRSkNCiAgDQogICMgSGVyZSB3ZSBhcmUgbG9hZGluZyB0aGUgcGFja2FnZQ0KICBsaWJyYXJ5KCJwbG90bHkiKQ0KfQ0KDQpgYGANCg0KLS0tLS0tLS0tLS0tLQ0KDQojIyBUYXNrIDE6IENvcnJlbGF0aW9uIEFuYWx5c2lzDQoNCi0tLS0tLS0tLS0tLS0NCg0KIyMjIDFBKSBSZWFkIHRoZSBjc3YgZmlsZSBpbnRvIFIgU3R1ZGlvIGFuZCBkaXNwbGF5IHRoZSBkYXRhc2V0LiANCg0KKiBOYW1lIHlvdXIgZGF0YXNldCAnbXlkYXRhJyBzbyBpdCBlYXN5IHRvIHdvcmsgd2l0aC4NCg0KKiBDb21tYW5kczogcmVhZF9jc3YoKSByZW5hbWUoKSBoZWFkKCkNCg0KIyMjIyBFeHRyYWN0IHRoZSBhc3NpZ25lZCBmZWF0dXJlcyAoY29sdW1ucykgdG8gcGVyZm9ybSBzb21lIGFuYWx5dGljcy4gDQoNCmBgYHtyfQ0KDQpteWRhdGEgPC0gcmVhZC5jc3YoZmlsZT0iZGF0YS9BZHZlcnRpc2luZy5jc3YiKQ0KbXlkYXRhDQpzYWxlcyA8LSBteWRhdGEkc2FsZXMNCm5ld3NwYXBlciA8LSBteWRhdGEkbmV3c3BhcGVyDQpyYWRpbyA8LSBteWRhdGEkcmFkaW8NCnR2IDwtIG15ZGF0YSRUVg0KDQpgYGANCg0KYGBge3J9DQpteWRhdGEgPC0gcmVuYW1lKG15ZGF0YSwgImNhc2VfbnVtYmVyIiA9ICJYIikNCmBgYA0KYGBge3J9DQpoZWFkKG15ZGF0YSkNCmBgYA0KDQoNCg0KDQojIyMgMUIpIENyZWF0ZSBhIGNvcnJlbGF0aW9uIHRhYmxlIGZvciB5b3VyIHRvIGNvbXBhcmUgdGhlIGNvcnJlbGF0aW9ucyBiZXR3ZWVuIGFsbCB2YXJpYWJsZXMuIFJlbW92ZSBhbnkgdmFyaWFibGVzIHdoZXJlIGNvcnJlbGF0aW9uIGJldHdlZW4gdmFyaWFibGVzIGlzIGlycmVsZXZhbnQgb3IgaW5hY2N1cmF0ZQ0KDQoqIENvbW1hbmRzOiBjb3IoKSBteWRhdGFbIC1jKCJDT0xVTU5fTkFNRSBPUiBDT0xVTU5fTlVNQkVSIikgXQ0KDQpgYGB7cn0NCg0KY29yciA9IGNvcihteWRhdGFbIC1jKDEpXSApDQpjb3JyDQoNCmBgYA0KDQojIyMgMUMpIFdoeSBpcyB0aGUgdmFsdWUgIjEuMCIgZG93biB0aGUgZGlhZ29uYWw/IFdoaWNoIHBhaXJzIHNlZW0gdG8gaGF2ZSB0aGUgc3Ryb25nZXN0IGNvcnJlbGF0aW9ucywgbGlzdCB0aGUgcGFpcnMuIA0KDQojIEl0J3Mgd2hlcmUgdGhlIGNhdGVnb3JpZXMgYXJlIGJvdGggdGhlIHNhbWUuIEZvciBleGFtcGxlLCB3aGVyZSBOZXdzcGFwZXIgbWVldHMgTmV3c3BhcGVyLiBUaGUgdmFsdWUgaXMgb25lIGJlY2F1c2Ugc2luY2UgaXQncyB0aGUgc2FtZSBjYXRlZ29yeSBpcyBwZXJmZWN0bHkgY29ycmVsYXRlZC4gU2FsZXMgYW5kIFRWIGhhdmUgYSBjb3JyZWxhdGlvbiBvZiAuNzgsIGFuZCBzYWxlcyBhbmQgcmFkaW8gaGF2ZSBjb3JyZWxhdGlvbiBvZiBhYm91dCAuNTc2LiBUaG9zZSBhcmUgdGhlIHR3byBuZXh0IGhpZ2hlc3QgY29ycmVsYXRpb25zLiANCg0KDQojIyMgMUQtYSkgSWRlbnRpZnlpbmcgdGhlIGRlcGVuZGVudCB2YXJpYWJsZSAoeSkgYW5kIG9uZSBpbmRlcGVuZGVudCB2YXJpYWJsZSAoeF9pKSB1c2luZyB0aGUgY29ycmVsYXRpb24gdGFibGUgdG8gaWRlbnRpZnkgYSB2YXJpYWJsZSB3aXRoIGEgY29lZmZpY2llbnQgZ3JlYXRlciB0aGFuIDAuMjAgYW5kIGxvd2VyIHRoYW4gMC42MC4gVXNlIHRob3NlIHR3byB2YXJpYWJsZXMgdG8gY3JlYXRlIGEgc2NhdHRlcnBsb3QgdG8gdmlzdWFsaXplIHRoZSBkYXRhLiBOb3RlIGFueSBwYXR0ZXJucyBvciByZWxhdGlvbiBiZXR3ZWVuIHRoZSB0d28gdmFyaWFibGVzDQoNCiogQ29tbWFuZHM6IHFwbG90KCB4ID0gVkFSSUFCTEUsIHkgPSBWQVJJQUJMRSwgZGF0YSA9IG15ZGF0YSkNCg0KYGBge3J9DQpxcGxvdCggeCA9IHJhZGlvLCB5ID0gc2FsZXMsIGRhdGEgPSBteWRhdGEpDQpgYGANCiMgVGhlIHBvaW50cyBzZWVtIHRvIGhhdmUgYSBwb3NpdGl2ZSBzbG9wZSB3aXRoIGEgZmV3IG91dGxpZXJzLiANCg0KIyMjIDFELWIpIENyZWF0ZSBhIDNEIHNjYXR0ZXJwbG90IGJldHdlZW4gdGhlIHR3byBvZiB0aGUgc3Ryb25nZXN0IGNvcnJlbGF0ZWQgdmFyaWFibGVzIHRvIHRoZSBkZXBlbmRlbnQgdmFyaWFibGUuIE5vdGUgYW55IHBhdHRlcm5zIGFuZCB0aGUgY29vcmRpbmF0ZXMgb2YgdGhyZWUgcG9pbnRzIHdpdGggdGhlIGhlaWdodHMgdmFsdWVzICh4LHkseikNCg0KYGBge3J9DQoNCnAgPSBwbG90X2x5KG15ZGF0YSwgeCA9IH5yYWRpbywgeSA9IH5UViwgeiA9IH5zYWxlcywgbWFya2VyID0gbGlzdChzaXplID0gNSkpICU+JSBhZGRfbWFya2VycygpIA0KcA0KDQpgYGANCiMgVGhlIHBvaW50cyBzZWVtIHRvIGJ1bmNoIGF0IHRoZSB0b3AgYW5kIHRoZW4gZmFuIG91dC4gVGhlIHRocmVlIHBvaW50cyBhcmU6IHg9NDguOSwgeT0yNzYuOSwgej0yNy4gQW5vdGhlciBpcyB4PTQzLCB5PTI4Ny42LCB6PTI2LjIuIEFub3RoZXIgaXMgeD00OSwgeT0yNDMuMiwgej0yNS40Lg0KDQotLS0tLS0tLS0tLS0tDQoNCiMjIFRhc2sgMjogUmVncmVzc2lvbiBBbmFseXNpcw0KDQotLS0tLS0tLS0tLS0tDQoNCiogVG8gY3JlYXRlIGEgcmVncmVzc2lvbiBtb2RlbCB3ZSB1c2UgdGhlIGZ1bmN0aW9uIGxtKCksIHN1Y2ggYXMgbG0oIHkgfiB4ICkNCiogV2hlcmUgdGhlIGluZGVwZW5kZW50IHZhcmlhYmxlIG9yIHZhcmlhYmxlcyBbIHhfMSwgeF8yLCAuLi4geF9pIF0sIHByZWRpY3QgdGhlIHZhbHVlcyBvZiB0aGUgZGVwZW5kZW50IHZhcmlhYmxlIHkuDQoNCiMjIyAyQSkgQ3JlYXRlIGEgbGluZWFyIHJlZ3Jlc3Npb24gbW9kZWwgYnkgaWRlbnRpZnlpbmcgdGhlIGRlcGVuZGVudCB2YXJpYWJsZSAoeSkgYW5kIGZvciBpbmRlcGVuZGVudCB2YXJpYWJsZSAoeF9pKSB1c2UgdGhlIGNvcnJlbGF0aW9uIHRhYmxlIHRvIGlkZW50aWZ5IGEgdmFyaWFibGUgd2l0aCBhIGNvZWZmaWNpZW50IGdyZWF0ZXIgdGhhbiAwLjIwIGFuZCBsb3dlciB0aGFuIDAuNjAuIChzYW1lIHZhcmlhYmxlcyBhcyAxRC1hKQ0KDQoqIENvbW1hbmRzOiBsbSggeSB+IHggKSANCg0KYGBge3J9DQojU2ltcGxlIExpbmVhciBSZWdyZXNzaW9uIE1vZGVsDQpyZWcgPC0gbG0oIHNhbGVzIH4gcmFkaW8gKQ0KcmVnDQpgYGANCg0KDQojIyMgMkIpIFVzZSB0aGUgcmVncmVzc2lvbiBtb2RlbCB0byBjcmVhdGUgYSByZXBvcnQuIE5vdGUgdGhlIFItU3F1YXJlZCBhbmQgQWRqdXN0ZWQgUi1TcXVhcmVkIHZhbHVlcywgZGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSBnb29kIG9yIGJhZCBmaXQgZm9yIHlvdXIgZGF0YT8NCg0KKiBDb21tYW5kczogVXNlIHRoZSBzdW1tYXJ5KCkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgcmVwb3J0IGZvciB0aGUgbGluZWFyIG1vZGVsDQoNCmBgYHtyfQ0KI1N1bW1hcnkgb2YgU2ltcGxlIExpbmVhciBSZWdyZXNzaW9uIE1vZGVsDQoNCnN1bW1hcnkocmVnKQ0KDQpgYGANCiAjIFRoZSByLXNxdWFyZWQgdmFsdWUgaXMgLjMzMiBhbmQgdGVoIGFkanVzdGVkIHItc3FhcmVkIHZhbHVlIGlzIC4zMjg3LiBVc3VhbGx5IHdoZW4gdGhlIHRoZSB2YWx1ZSBpcyBsb3csIGl0IG1lYW5zIGl0J3MgYSBiYWQgZml0LiBJdCdzIHRydWUgaW4gdGhpcyBzaXR1YXRpb24uIA0KDQojIyMgMkMpIENyZWF0ZSBhIHBsb3QgZm9yIHRoZSBkZXBlbmRlbnQgKHkpIGFuZCBpbmRlcGVuZGVudCAoeCkgdmFyaWFibGVzIE5vdGUgYW55IHBhdHRlcm5zIG9yIHJlbGF0aW9uIGJldHdlZW4gdGhlIHR3byB2YXJpYWJsZXMgZGVzY3JpYmUgdGhlIHRyZW5kIGxpbmUuDQoNCiogVGhlIHRyZW5kIGxpbmUgd2lsbCBzaG93IGhvdyBmYXIgdGhlIHByZWRpY3Rpb25zIGFyZSBmcm9tIHRoZSBhY3R1YWwgdmFsdWUNCiogVGhlIGRpc3RhbmNlIGZyb20gdGhlIGFjdHVhbCB2ZXJzdXMgdGhlIHByZWRpY3RlZCBpcyB0aGUgcmVzaWR1YWwNCg0KYGBge3J9DQoNCiNwIDwtIHFwbG90KCB4ID0gSU5ERVBFTkRFTlRfVkFSSUFCTEUsIHkgPSBERVBFTkRFTlRfVkFSSUFCTEUsIGRhdGEgPSBteWRhdGEpICsgZ2VvbV9wb2ludCgpDQoNCnAgPC0gcXBsb3QoIHggPSByYWRpbywgeSA9IHNhbGVzLCBkYXRhID0gbXlkYXRhKSArIGdlb21fcG9pbnQoKQ0KDQojQWRkIGEgdHJlbmQgbGluZSBwbG90IHVzaW5nIHRoZSBhIGxpbmVhciBtb2RlbA0KI3AgKyBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBmb3JtdWxhID0geSB+IHgpDQoNCnAgKyBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBmb3JtdWxhID0geSB+IHgpDQoNCmBgYA0KIyBUaGUgcG9pbnRzIGFyZSBhbGwgcHJldHR5IHNjYXR0ZXJlZCBidXQgdGhleSBzZWVtIHRvIGhhdmUgYSBwb3NpdGl2ZSBjb3JyZWxhdGlvbi4gVGhlIHRyZW5kIGxpbmUgc2hvd3Mgd2hpY2ggcG9pbnRzIGFyZSBtb3N0IGNsb3NlIHRvIHRoZSBhY3R1YWwgdmFsdWUuIA0KDQojIyMgMkQtYSkgQ3JlYXRlIGEgTXVsdGlwbGUgbGluZWFyIHJlZ3Jlc3Npb24gbW9kZWwgYW5kIHN1bW1hcnkgcmVwb3J0IHVzaW5nIHRoZSB0d28gc3Ryb25nZXN0IGNvcnJlbGF0ZWQgdmFyaWFibGVzIGFuZCB0aGUgZGVwZW5kZW50IHZhcmlhYmxlLiBOb3RlIHRoZSBSLVNxdWFyZWQgYW5kIEFkanVzdGVkIFItU3F1YXJlZCB2YWx1ZXMsIGRldGVybWluZSBpZiB0aGlzIGlzIGEgZ29vZCBvciBiYWQgZml0IGZvciB5b3VyIGRhdGE/IENvbXBhcmVkIHRoaXMgbW9kZWwgdG8gdGhlIHByZXZpb3VzIG1vZGVsLCB3aGljaCBtb2RlbCBpcyBiZXR0ZXI/IA0KDQoqIFNvbWV0aW1lcywgb25lIHZhcmlhYmxlIGlzIHZlcnkgZ29vZCBhdCBwcmVkaWN0aW5nIGFub3RoZXIgdmFyaWFibGUuIEJ1dCBtb3N0IHRpbWVzLCB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBmYWN0b3JzIHRoYXQgYWZmZWN0IHRoZSBwcmVkaWN0aW9uIG9mIGFub3RoZXIgdmFyaWFibGUuDQoqIFdoaWxlIGluY3JlYXNlZCByYWluZmFsbCBpcyBhIGdvb2QgcHJlZGljdG9yIG9mIGluY3JlYXNlZCBjcm9wIHN1cHBseSwgZGVjcmVhc2VkIGhlcmJpdm9yZXMgY2FuIGFsc28gcmVzdWx0IGluIGFuIGluY3JlYXNlIG9mIGNyb3BzLiANCiogVGhpcyBpZGVhIGlzIGEgbG9vc2UgbWV0YXBob3IgZm9yIG11bHRpcGxlIGxpbmVhciByZWdyZXNzaW9uLiANCg0KKiBNdWx0aXBsZSBsaW5lYXIgcmVncmVzc2lvbiBsbSh5IH4geF8wICsgeF8xICsgeF8yICsgLi4uIHhfaSApDQoqIFdoZXJlIHkgaXMgdGhlIHByZWRpY3RlZC9kZXBlbmRlbnQgdmFyaWFibGUgYW5kIHRoZSB4IHZhcmlhYmxlcyBhcmUgdGhlIHByZWRpY3RvcnMvaW5kZXBlbmRlbnQgdmFyaWFibGUgDQoNCiogY29tbWFuZHM6IGxtKCB5IH4geF8xICsgeF8yICkgc3VtbWFyeSggcmVnX21vZGVsICkNCg0KYGBge3J9DQoNCiNNdWx0aXBsZSBMaW5lYXIgUmVncmVzc2lvbiBNb2RlbA0KI21scjEgPC0gbG0oIERFUEVOREVOVF9WQVJJQUJMRSB+IElOREVQRU5ERU5UX1ZBUklBQkxFMSArIElOREVQRU5ERU5UX1ZBUklBQkxFMiApDQptbHIxIDwtIGxtKCBzYWxlcyB+IHJhZGlvICsgdHYgKQ0KDQojU3VtbWFyeSBvZiBNdWx0aXBsZSBMaW5lYXIgUmVncmVzc2lvbiBNb2RlbA0Kc3VtbWFyeShtbHIxKQ0KYGBgDQojIFRoZSByLXNxdWFyZWQgdmFsdWUgaXMgLjg5NzIgYW5kIHRoZSBhZGp1c3RlZCBpcyAuODk2Mi4gVGhlc2UgdmFsdWVzIGFyZSBoaWdoZXIgdGhhbiB0aGUgcGFzdCB2YWx1ZXMgc2hvd2luZyB0aGF0IHRoaXMgaXMgYSBiZXR0ZXIgbW9kZWwuIA0KDQojIyMgMkQtYikgQ3JlYXRlIGEgTXVsdGlwbGUgTGluZWFyIFJlZ3Jlc3Npb24gTW9kZWwgdXNpbmcgYWxsIHJlbGV2YW50IGluZGVwZW5kZW50IHZhcmlhYmxlcyBhbmQgdGhlIGRlcGVuZGVudCB2YXJpYWJsZS4gTm90ZSB0aGUgUi1TcXVhcmVkIGFuZCBBZGp1c3RlZCBSLVNxdWFyZWQgdmFsdWVzLCBkZXRlcm1pbmUgaWYgdGhpcyBpcyBhIGdvb2Qgb3IgYmFkIGZpdCBmb3IgeW91ciBkYXRhPw0KYGBge3J9DQptbHIyIDwtIGxtKCBzYWxlcyB+IHJhZGlvICsgdHYgKyBuZXdzcGFwZXIpDQpzdW1tYXJ5KG1scjIpDQpgYGANCiMgVGhlIHItc3F1YXJlZCB2YWx1ZSBpcyAuODk3MiBhbmQgdGhlIGFkanVzdGVkIGlzIC44OTU2LiBUaGUgci1zcXVhcmVkIHZhbHVlIGlzIHRoZSBzYW1lIGFzIHRoZSBsYXN0IG1vZGVsLCBidXQgdGhlIGFkanVzdGVkIGlzIGxlc3Mgb24gdGhpcyBtb2RlbC4gVGhlIHZhbHVlcyBhcmUgc3RpbGwgY2xvc2UgdG8gb25lIHRob3VnaCB3aGljaCBpbmRpY2F0ZXMgdGhhdCB0aGV5IGFyZSBhIGdvb2QgZml0LiANCg0KIyMjIyBCYXNlZCBwdXJlbHkgb24gdGhlIHZhbHVlcyBmb3IgUi1TcXVhcmVkIGFuZCBBZGp1c3RlZCBSLVNxdWFyZWQsIHdoaWNoIGxpbmVhciByZWdyZXNzaW9uIG1vZGVsIGlzIGJlc3QgaW4gcHJlZGljdGluZyB0aGUgZGVwZW5kZW50IHZhcmlhYmxlPyBFeHBsYWluIHdoeQ0KDQojIFRoZSBzZWNvbmQgbW9kZWwgaXMgdGhlIGJlc3QgYmVjYXVzZSBib3RoIGl0J3Mgci1zcXVhcmVkIGFuZCBhZGp1c3RlZCByLXNxcXVhcmVkIGFyZSBjY2xvc2VzdCB0byBvbmUgaW5kaWNhdGluZyB0aGF0IHRoaXMgbW9kZWwgaXMgYmVzdCBhdCBlc3RpbWF0aW5nIGJvdGggdGhlIGRlcGVuZGVudCBhbmQgaW5kZXBlbmRlbnQgdmFsdWVzLiANCg0KDQojIyMgMkUpIFVzZSB0aGUgdGhyZWUgZGlmZmVyZW50IG1vZGVscyB0byBwcmVkaWN0ZWQgdGhlIGRlcGVuZGVudCB2YXJpYWJsZSBmb3IgdGhlIGdpdmVuIHZhbHVlcyBvZiB0aGUgaW5kZXBlbmRlbnQgdmFyaWFibGVzLiANCg0KKiBWYXJpYWJsZTogUmFkaW8gPSA2OQ0KKiBWYXJpYWJsZTogVFYgPSAyNTUNCiogVmFyaWFibGU6IG5ld3NwYXBlciA9IDc1DQoNCioqTU9ERUwgMSoqDQpgYGB7cn0NCnNhbGVzX3ByZWRpY3RlZDEgPSA5LjMxMTQ2ICsgKDAuMjAyNTApICogKDY5KQ0Kc2FsZXNfcHJlZGljdGVkMQ0KYGBgDQoNCioqTU9ERUwgMioqDQpgYGB7cn0NCnNhbGVzX3ByZWRpY3RlZDIgPSAyLjkyMTEwICsgKDAuMTg3OTkpICogKDY5KSArICgwLjA0NTc1KSAqICgyNTUpDQpzYWxlc19wcmVkaWN0ZWQyDQpgYGANCg0KKipNT0RFTCAzKioNCmBgYHtyfQ0Kc2FsZXNfcHJlZGljdGVkMyA9IDIuOTM4ODg5ICsgKDAuMTg4NTMwKSAqICg2OSkgKyAoMC4wNDU3NjUpICogKDI1NSkgKyAoLTAuMDAxMDM3KSAqICg3NSkNCnNhbGVzX3ByZWRpY3RlZDMNCmBgYA0KDQoNCi0tLS0tLS0tLS0tLS0NCg0KIyMgVGFzayAzOiBXYXRzb24gQW5hbHlzaXMNCg0KLS0tLS0tLS0tLS0tLQ0KDQpUbyBjb21wbGV0ZSB0aGUgbGFzdCB0YXNrLCBmb2xsb3cgdGhlIGRpcmVjdGlvbnMgZm91bmQgYmVsb3cuIE1ha2Ugc3VyZSB0byBzY3JlZW5zaG90IGFuZCBhdHRhY2ggYW55IHBpY3R1cmVzIG9mIHRoZSByZXN1bHRzIG9idGFpbmVkIG9yIGFueSBxdWVzdGlvbnMgYXNrZWQuIA0KDQojIyMgM0EpIFVzZSB0aGUgUHJlZGljdGl2ZSBtb2R1bGUgdG8gYW5hbHl6ZSB0aGUgZ2l2ZW4gZGF0YS4gTm90ZSBhbnkgaW50ZXJlc3RpbmcgcGF0dGVybnMgYWRkIGFuIHNjcmVlbnNob3Qgb2Ygd2hhdCB5b3UgZm91bmQuDQoNCmBgYHtyfQ0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoImltZ3Mvc2FsZXMxLnBuZyIpDQpgYGANCmBgYHtyfQ0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoImltZ3Mvc2FsZXMyLnBuZyIpDQpgYGANCg0KIyBUaGlzIHNob3dzIHRoYXQgVFYgYW5kIHJhZGlvIGJvdGggcHJlZGljdCBzYWxlcy4gVGhlIHByZWRpY3RlZCB2YWx1ZSBpcyBpcyBoaWdoZXN0IHdoZW4gdHY+MTE3LjIgYW5kIHJhZGlvPjI3LjcuIFRoZSBwcmVkaWN0aXZlIHN0cmVuZ3RoIGlzIDcyJS4gDQoNCiMjIyAzQikgTm90ZSB0aGUgcHJlZGljdGl2ZSBwb3dlciBzdHJlbmd0aCBvZiByZXBvcnRlZCB2YXJpYWJsZXMuIENvbnNpZGVyIHRoZSBvbmUgZmllbGQgcHJlZGljdGl2ZSBtb2RlbCBvbmx5LCBkZXNjcmliZSB5b3VyIGZpbmRpbmdzIGFuZCBhZGQgYW5kIHNjcmVlbnNob3QNCg0KYGBge3J9DQprbml0cjo6aW5jbHVkZV9ncmFwaGljcygiaW1ncy9zYWxlczMucG5nIikNCmBgYA0KIyBUaGlzIHNob3dzIGJvdGggcmFkaW8gYW5kIHR2IGFyZSBkcml2ZXJzIG9mIHNhbGVzIHdpdGggdHYgYXQgNTklIGFuZCByYWRpbyBhdCAzMiUuIEhvd2V2ZXIsIHdoZW4gY29tYmluZWQgdGhlaXIgc3RyZW50aCBpcyA5NCUuIFRoaXMgaXMgcHJvYmFibHkgYmVjYXVzZSB0aGVyZSBhcmUgMiBmYWN0b3JzIGRyaXZpbmcgdGhlIHNhbGVzIGluc3RlYWQgb2YganVzdCBvbmUuIA0KDQojIyMgM0MpIEhvdyBkbyBXYXRzb24gcmVzdWx0cyByZWNvbmNpbGUgd2l0aCB5b3VyIGZpbmRpbmdzIGJhc2VkIG9uIHRoZSBSIHJlZ3Jlc3Npb24gYW5hbHlzaXMgaW4gdGFzayAyPyBFeHBsYWluIGhvdy4NCg0KIyBJdCBsaW5lcyB1cCB3aXRoIHdoZW4gdGhlcmUgYXJlIG1vcmUgdmFyaWFibGVzLCB0aGUgci1zcXVhcmVkIGFuZCBhZGp1c3RlZCByLXNxdWFyZWQgdmFyaWFibGVzIGFyZSBoaWdoZXIganVzdCBhcyB0aGUgYWJvdmUgcGljdHVyZSBzaG93cyB3aGVuIHRoYXQgd2hlbiB0aGVyZSBhcmUgbW9yZSBkcml2ZXJzLCB0aGUgc3RyZW5ndGggaXMgaGlnaGVyLiA=