We would employ a regression technique for a continuous response variable to forecast the closest observations by estimating the average value. For a categorical response variable, we would utilize a classification approach, which is non-parametric, to examine odds ratios and conditional probabilities
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.3.2
library(GGally)
## Warning: package 'GGally' was built under R version 4.3.2
## Registered S3 method overwritten by 'GGally':
## method from
## +.gg ggplot2
library(ISLR2)
attach(Auto)
## The following object is masked from package:ggplot2:
##
## mpg
head(Auto)
str(Auto)
## 'data.frame': 392 obs. of 9 variables:
## $ mpg : num 18 15 18 16 17 15 14 14 14 15 ...
## $ cylinders : int 8 8 8 8 8 8 8 8 8 8 ...
## $ displacement: num 307 350 318 304 302 429 454 440 455 390 ...
## $ horsepower : int 130 165 150 150 140 198 220 215 225 190 ...
## $ weight : int 3504 3693 3436 3433 3449 4341 4354 4312 4425 3850 ...
## $ acceleration: num 12 11.5 11 12 10.5 10 9 8.5 10 8.5 ...
## $ year : int 70 70 70 70 70 70 70 70 70 70 ...
## $ origin : int 1 1 1 1 1 1 1 1 1 1 ...
## $ name : Factor w/ 304 levels "amc ambassador brougham",..: 49 36 231 14 161 141 54 223 241 2 ...
## - attr(*, "na.action")= 'omit' Named int [1:5] 33 127 331 337 355
## ..- attr(*, "names")= chr [1:5] "33" "127" "331" "337" ...
plot(Auto)
cor(Auto[1:8])
## mpg cylinders displacement horsepower weight
## mpg 1.0000000 -0.7776175 -0.8051269 -0.7784268 -0.8322442
## cylinders -0.7776175 1.0000000 0.9508233 0.8429834 0.8975273
## displacement -0.8051269 0.9508233 1.0000000 0.8972570 0.9329944
## horsepower -0.7784268 0.8429834 0.8972570 1.0000000 0.8645377
## weight -0.8322442 0.8975273 0.9329944 0.8645377 1.0000000
## acceleration 0.4233285 -0.5046834 -0.5438005 -0.6891955 -0.4168392
## year 0.5805410 -0.3456474 -0.3698552 -0.4163615 -0.3091199
## origin 0.5652088 -0.5689316 -0.6145351 -0.4551715 -0.5850054
## acceleration year origin
## mpg 0.4233285 0.5805410 0.5652088
## cylinders -0.5046834 -0.3456474 -0.5689316
## displacement -0.5438005 -0.3698552 -0.6145351
## horsepower -0.6891955 -0.4163615 -0.4551715
## weight -0.4168392 -0.3091199 -0.5850054
## acceleration 1.0000000 0.2903161 0.2127458
## year 0.2903161 1.0000000 0.1815277
## origin 0.2127458 0.1815277 1.0000000
auto <- lm(mpg ~ . - name, data = Auto)
summary(auto)
##
## Call:
## lm(formula = mpg ~ . - name, data = Auto)
##
## Residuals:
## Min 1Q Median 3Q Max
## -9.5903 -2.1565 -0.1169 1.8690 13.0604
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -17.218435 4.644294 -3.707 0.00024 ***
## cylinders -0.493376 0.323282 -1.526 0.12780
## displacement 0.019896 0.007515 2.647 0.00844 **
## horsepower -0.016951 0.013787 -1.230 0.21963
## weight -0.006474 0.000652 -9.929 < 2e-16 ***
## acceleration 0.080576 0.098845 0.815 0.41548
## year 0.750773 0.050973 14.729 < 2e-16 ***
## origin 1.426141 0.278136 5.127 4.67e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.328 on 384 degrees of freedom
## Multiple R-squared: 0.8215, Adjusted R-squared: 0.8182
## F-statistic: 252.4 on 7 and 384 DF, p-value: < 2.2e-16
Based on the Residuals versus Fitted Values plot, there is an indication of non-linearity in the data. The Residuals versus Leverage plot suggests the presence of outliers, as evidenced by data points falling outside the standardized residuals range of -2 to 2. Additionally, the plot reveals observations with high leverage exceeding the 0.05 threshold.
par(mfrow = c(2, 2))
plot(auto)
fit2 <- lm(mpg ~ cylinders * displacement + horsepower * weight + acceleration * year, data = Auto[, 1:8])
summary(fit2)
##
## Call:
## lm(formula = mpg ~ cylinders * displacement + horsepower * weight +
## acceleration * year, data = Auto[, 1:8])
##
## Residuals:
## Min 1Q Median 3Q Max
## -9.3265 -1.5779 0.0389 1.3483 11.6961
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.162e+02 1.853e+01 6.274 9.53e-10 ***
## cylinders -1.803e-01 4.776e-01 -0.377 0.7061
## displacement -2.867e-02 1.425e-02 -2.013 0.0449 *
## horsepower -2.261e-01 2.609e-02 -8.664 < 2e-16 ***
## weight -1.019e-02 9.020e-04 -11.296 < 2e-16 ***
## acceleration -7.081e+00 1.158e+00 -6.113 2.41e-09 ***
## year -6.719e-01 2.417e-01 -2.780 0.0057 **
## cylinders:displacement 2.790e-03 2.067e-03 1.350 0.1779
## horsepower:weight 5.154e-05 6.727e-06 7.661 1.53e-13 ***
## acceleration:year 9.113e-02 1.502e-02 6.069 3.10e-09 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.819 on 382 degrees of freedom
## Multiple R-squared: 0.8726, Adjusted R-squared: 0.8696
## F-statistic: 290.6 on 9 and 382 DF, p-value: < 2.2e-16
From the summary, it looks like that the interaction between ‘cylinders’ and ‘displacement’ does not reach statistical significance. However, the interaction between ‘horsepower’ and ‘weight’ is statistically significant, as is the interaction between ‘acceleration’ and ‘year’.
Model2 = lm(mpg~.-name + displacement*log(weight)+year:cylinders+log(acceleration), Auto)
summary(Model2)
##
## Call:
## lm(formula = mpg ~ . - name + displacement * log(weight) + year:cylinders +
## log(acceleration), data = Auto)
##
## Residuals:
## Min 1Q Median 3Q Max
## -9.0920 -1.5290 0.0143 1.2957 12.9721
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 80.859829 76.160285 1.062 0.289043
## cylinders 10.279768 2.259566 4.549 7.25e-06 ***
## displacement -0.504066 0.196698 -2.563 0.010772 *
## horsepower -0.047762 0.012410 -3.849 0.000139 ***
## weight -0.004112 0.004851 -0.848 0.397142
## acceleration 1.421988 0.448480 3.171 0.001644 **
## year 1.453984 0.149493 9.726 < 2e-16 ***
## origin 0.530919 0.253621 2.093 0.036980 *
## log(weight) -14.176185 10.284091 -1.378 0.168873
## log(acceleration) -22.593994 7.455537 -3.030 0.002609 **
## displacement:log(weight) 0.061791 0.024131 2.561 0.010833 *
## cylinders:year -0.132177 0.028685 -4.608 5.56e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.831 on 380 degrees of freedom
## Multiple R-squared: 0.8721, Adjusted R-squared: 0.8684
## F-statistic: 235.6 on 11 and 380 DF, p-value: < 2.2e-16
attach(Carseats)
model <- lm(Sales ~ Price + Urban + US, data = Carseats)
summary(model)
##
## Call:
## lm(formula = Sales ~ Price + Urban + US, data = Carseats)
##
## Residuals:
## Min 1Q Median 3Q Max
## -6.9206 -1.6220 -0.0564 1.5786 7.0581
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 13.043469 0.651012 20.036 < 2e-16 ***
## Price -0.054459 0.005242 -10.389 < 2e-16 ***
## UrbanYes -0.021916 0.271650 -0.081 0.936
## USYes 1.200573 0.259042 4.635 4.86e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.472 on 396 degrees of freedom
## Multiple R-squared: 0.2393, Adjusted R-squared: 0.2335
## F-statistic: 41.52 on 3 and 396 DF, p-value: < 2.2e-16
Sales=13.043469−0.054459×Price−0.021916×UrbanYes+1.200573×USYes+ϵ
smaller_model <- lm(Sales ~ Price + US, data = Carseats)
summary(smaller_model)
##
## Call:
## lm(formula = Sales ~ Price + US, data = Carseats)
##
## Residuals:
## Min 1Q Median 3Q Max
## -6.9269 -1.6286 -0.0574 1.5766 7.0515
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 13.03079 0.63098 20.652 < 2e-16 ***
## Price -0.05448 0.00523 -10.416 < 2e-16 ***
## USYes 1.19964 0.25846 4.641 4.71e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.469 on 397 degrees of freedom
## Multiple R-squared: 0.2393, Adjusted R-squared: 0.2354
## F-statistic: 62.43 on 2 and 397 DF, p-value: < 2.2e-16
confint(smaller_model, level = 0.95)
## 2.5 % 97.5 %
## (Intercept) 11.79032020 14.27126531
## Price -0.06475984 -0.04419543
## USYes 0.69151957 1.70776632
par(mfrow = c(2, 2))
plot(smaller_model, which = 1:4)
Based on these plots, there may be a few outliers, as suggested by the residuals in the Residuals vs. Fitted and Q-Q plots. However, there doesn’t appear to be a problem with influential points according to the Cook’s Distance plot since none of the Cook’s distance values exceed a common threshold
The coefficient estimates will be the same if they have the same denominator
set.seed(42)
n <- 100
X <- rnorm(n, mean = 50, sd = 10)
Y <- 2 * X + rnorm(n, mean = 0, sd = 5)
model_Y_on_X <- lm(Y ~ X + 0)
model_X_on_Y <- lm(X ~ Y + 0)
beta_Y_on_X <- coef(model_Y_on_X)
beta_X_on_Y <- coef(model_X_on_Y)
beta_Y_on_X
## X
## 1.992214
beta_X_on_Y
## Y
## 0.5009852
set.seed(42)
n <- 100
X <- rnorm(n, mean = 0, sd = 1)
Y <- X
model_Y_on_X <- lm(Y ~ X + 0)
model_X_on_Y <- lm(X ~ Y + 0)
beta_Y_on_X <- coef(model_Y_on_X)
beta_X_on_Y <- coef(model_X_on_Y)
beta_Y_on_X
## X
## 1
beta_X_on_Y
## Y
## 1