Zadanie 1

Zadanie: odhadnite strednú hodnotu dojazdu automobilov,

Riešenie:

suppressWarnings({ 
  library(modelr)
  library(ggplot2)
  library(dplyr)
  library(broom)
})
         
dat <- datasets::mtcars

model_mean <- lm(mpg ~ 1, data = dat)

data_1 <- dat %>%
  select(mpg) %>%
  add_predictions(model_mean)

ggplot(data_1, aes(x = mpg, y = mpg)) + 
  geom_point() + 
  geom_line(aes(y = pred)) +
  ggtitle("Lineárny model: MPG mean")

Zadanie 2

Zadanie: odhadnite strednú hodnotu dojazdu v závislosti od zdvihového objemu valcov (tzn. nájdite lineárny regresný model),

Riešenie:

model_disp <- lm(mpg ~ disp, data = dat)
summary(model_disp)
## 
## Call:
## lm(formula = mpg ~ disp, data = dat)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -4.8922 -2.2022 -0.9631  1.6272  7.2305 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 29.599855   1.229720  24.070  < 2e-16 ***
## disp        -0.041215   0.004712  -8.747 9.38e-10 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3.251 on 30 degrees of freedom
## Multiple R-squared:  0.7183, Adjusted R-squared:  0.709 
## F-statistic: 76.51 on 1 and 30 DF,  p-value: 9.38e-10
data_2 <- dat %>%
  select(mpg, disp) %>%
  add_predictions(model_disp)

ggplot(data_2, aes(x = disp, y = mpg)) + 
  geom_point() + 
  geom_line(aes(y = pred)) +
  ggtitle("Lineárny model: MPG v závislosti od DISP")

# ALEBO

ggplot(dat, aes(x = disp, y = mpg)) + 
  geom_point() + 
  geom_smooth(method = "lm", formula = y ~ x) +
  ggtitle("Lineárny model: MPG v závislosti od DISP")

Zadanie 3

Zadanie: a potom do modelu pridajte aj počet valcov.

Riešenie:

model_disp_a_cyl <- lm(mpg ~ disp + cyl, data = dat)
summary(model_disp_a_cyl)
## 
## Call:
## lm(formula = mpg ~ disp + cyl, data = dat)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -4.4213 -2.1722 -0.6362  1.1899  7.0516 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 34.66099    2.54700  13.609 4.02e-14 ***
## disp        -0.02058    0.01026  -2.007   0.0542 .  
## cyl         -1.58728    0.71184  -2.230   0.0337 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3.055 on 29 degrees of freedom
## Multiple R-squared:  0.7596, Adjusted R-squared:  0.743 
## F-statistic: 45.81 on 2 and 29 DF,  p-value: 1.058e-09
data_3 <- dat %>%
  select(mpg, disp, cyl) %>%
  add_predictions(model_disp_a_cyl)

ggplot(data_3, aes(x = disp, y = mpg)) + 
  geom_point(aes(color = factor(cyl))) + 
  geom_line(aes(y = pred)) +
  ggtitle("Lineárny model: MPG v závislosti od DISP a CYL") +
  labs(color = "Počet valcov")

# ALEBO

ggplot(dat, aes(x = disp, y = mpg, color = factor(cyl))) + 
  geom_point() + 
  geom_smooth(method = "lm", formula = y ~ x) +
  ggtitle("Lineárny model: MPG v závislosti od DISP a CYL") +
  labs(color = "Počet valcov")

Zadanie 4

Zadanie: Ako sa zmení závislosť dojazdu, ak bude efekt objemu valcov v interakcii s efektom počtu valcov?

Riešenie:

model_disp_a_cyl_interakcia <- lm(mpg ~ disp * cyl, data = dat)
summary(model_disp_a_cyl)
## 
## Call:
## lm(formula = mpg ~ disp + cyl, data = dat)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -4.4213 -2.1722 -0.6362  1.1899  7.0516 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 34.66099    2.54700  13.609 4.02e-14 ***
## disp        -0.02058    0.01026  -2.007   0.0542 .  
## cyl         -1.58728    0.71184  -2.230   0.0337 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3.055 on 29 degrees of freedom
## Multiple R-squared:  0.7596, Adjusted R-squared:  0.743 
## F-statistic: 45.81 on 2 and 29 DF,  p-value: 1.058e-09
data_4 <- dat %>%
  select(mpg, disp, cyl) %>%
  add_predictions(model_disp_a_cyl_interakcia)

ggplot(data_4, aes(x = disp, y = mpg)) + 
  geom_point(aes(color = factor(cyl))) + 
  geom_line(aes(y = pred)) +
  ggtitle("Lineárny model: MPG v závislosti od DISP a CYL") +
  labs(color = "Počet valcov")

# ALEBO

ggplot(dat, aes(x = disp, y = mpg, color = factor(cyl))) + 
  geom_point() + 
  geom_smooth(method = "lm", formula = y ~ x, aes(group = cyl)) +
  ggtitle("Lineárny model: MPG v závislosti od DISP a CYL interakcia") +
  labs(color = "Počet valcov")

Zadanie 5

Zadanie: S koľkými valcami má automobil v priemere najväčší dojazd (podľa posledného modelu)? Na zodpovedanie použite graf z predošlej úlohy a zoberte do úvahy aj druhú vysvetľovaciu premennú.

Riešenie:

predict <- add_predictions(dat, model_disp_a_cyl_interakcia)

ggplot(predict, aes(x = disp, y = pred, color = factor(cyl))) + 
  geom_line() +
  labs(title = "Predpokladaný MPG v závislosti od DISP podľa počtu valcov(interakcia)", 
       x = "DISP", 
       y = "Predpokladaný MPG")

# Autá s menším počtom valcov(4) maju v priemere väčší dojazd(MPG). 

Zadanie 6

Zadanie: Ako sa zmení odpoveď na predošlú otázku, ak použijete komplexnejší súbor údajov (auto-mpg.data)?

Riešenie:

setwd("D:/ImportantStuff/MPM/Analyza dat/7")
auto_mpg_dat <- read.table("auto-mpg.data")
colnames(auto_mpg_dat) <- c("mpg", "cylinders", "displacement", "horsepower", "weight", "acceleration", "model_year", "origin", "car_name")
model_disp_a_cyl <- lm(mpg ~ (displacement * cylinders), data = auto_mpg_dat)

data_pred <- auto_mpg_dat %>%
  select(mpg, displacement, cylinders) %>%
  add_predictions(model_disp_a_cyl)

ggplot(data_pred, aes(x = displacement, y = mpg)) + 
  geom_point(aes(color = factor(cylinders))) + 
  geom_line(aes(y = pred)) +
  ggtitle("Predpokladaný MPG v závislosti od DISP podľa počtu valcov(interakcia)") +
  labs(x = "DISP", y = "MPG", color = "Počet valcov")

# Autá so 4 valcami a nižším DISP vykazujú najlepšiu MPG(na odmenu od predchádzajúceho grafu) 

Zadanie 7

Zadanie: Zoraďte modely z predošlých úloh (1–4) podľa RMSE a pomocou najlepšieho modelu vypočítajte priemerný dojazd štvorvalcového automobilu so zdvihovým objemom 160 kubických palcov.

Riešenie:

model1 <- lm(mpg ~ 1, data = dat)
model2 <- lm(mpg ~ disp, data = dat)
model3 <- lm(mpg ~ disp + cyl, data = dat)
model4 <- lm(mpg ~ disp * cyl, data = dat)

# RMSE hodnôty
rmse1 <- rmse(model1, dat)
rmse2 <- rmse(model2, dat)
rmse3 <- rmse(model3, dat)
rmse4 <- rmse(model4, dat)

rmse_values <- c(rmse1, rmse2, rmse3, rmse4)
names(rmse_values) <- c("'mpg ~ 1'", "'mpg ~ disp'", "'mpg ~ disp + cyl'", "'mpg ~ disp * cyl'")
rmse_values
##          'mpg ~ 1'       'mpg ~ disp' 'mpg ~ disp + cyl' 'mpg ~ disp * cyl' 
##           5.932030           3.148207           2.908717           2.488103
# Model 4 má najnižšie RMSE
model4_data <- data.frame(disp = 160, cyl = 4)

predicted_mpg <- predict(model4, model4_data)
predicted_mpg
##       1 
## 22.2786

Zadanie 8

Zadanie: Pomocou vhodnej transformácie navrhnite model závislosti dojazdu iba od zdvihového objemu. Podarilo sa vám znížiť RMSE oproti predošlým modelom s dvoma prediktormi?

Riešenie:

model_log_disp <- lm(mpg ~ log(disp), data = dat)

# RMSE hodnôty
rmse_log_disp <- rmse(model_log_disp, dat)

rmse_values <- c(rmse1, rmse2, rmse3, rmse4, rmse_log_disp)
names(rmse_values) <- c("'~1'", "'~disp'", "'~disp + cyl'", "'~disp * cyl'", "'~log(disp)'")
rmse_values
##          '~1'       '~disp' '~disp + cyl' '~disp * cyl'  '~log(disp)' 
##      5.932030      3.148207      2.908717      2.488103      2.496729
# Graf
data_pred <- dat %>%
  select(mpg, disp, cyl) %>%
  add_predictions(model_log_disp)

ggplot(data_pred, aes(x = disp, y = mpg)) + 
  geom_point(aes(color = factor(cyl))) + 
  geom_line(aes(y = pred)) +
  ggtitle("Predpokladaný MPG v závislosti od DISP podľa počtu valcov(log)") +
  labs(x = "DISP", y = "MPG", color = "Počet valcov")