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:
##
## 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:
##
## 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:
##
## 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")
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")
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")