1.4 Ochutnávka regresní analýzy
Nejdůležitějším nástrojem analýzy dat je beze sporu regrese. R obsahuje nástroje pro velmi pokročilé regresní techniky, zde se však podíváme na jednoduchou lineární regresi. Pokusíme se vysvětlit, jak závisí cena diamantů na jejich charakteristikách, jako jsou váha, typ řezu, barva a velikost. Začneme tím, že odhadneme jednodušší model, který je popsaný rovnicí:
\[\textrm{price} = \beta_0 + \beta_1 \textrm{ carat} + \beta_2 \textrm{ color} + \beta_3 \textrm{ cut} + \beta_4 \textrm{ table} + \varepsilon.\]
Proměnné cut
a color
jsou kategoriální. R pro ně automaticky připraví potřebné umělé proměnné. Nejdříve však tyto faktory převedeme na ne-ordinální, protože tak bude mít odhad modelu jednodušší interpretaci:
<- mutate(diamonds,
diamonds color = factor(color, ordered = FALSE),
cut = factor(cut, ordered = FALSE))
Vlastní model odhadneme takto:
<- price ~ carat + color + cut + table
model <- lm(model, diamonds)
em summary(em) # vypíše výsledek regrese
##
## Call:
## lm(formula = model, data = diamonds)
##
## Residuals:
## Min 1Q Median 3Q Max
## -17351.4 -751.5 -84.3 544.7 12226.7
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -2471.895 201.814 -12.248 < 2e-16 ***
## carat 8192.894 13.962 586.784 < 2e-16 ***
## colorE -89.573 22.625 -3.959 7.53e-05 ***
## colorF -72.834 22.772 -3.198 0.00138 **
## colorG -106.719 22.070 -4.836 1.33e-06 ***
## colorH -734.724 23.702 -30.999 < 2e-16 ***
## colorI -1077.256 26.574 -40.537 < 2e-16 ***
## colorJ -1909.932 32.863 -58.118 < 2e-16 ***
## cutGood 1120.648 41.223 27.185 < 2e-16 ***
## cutVery Good 1495.866 38.273 39.084 < 2e-16 ***
## cutPremium 1437.307 37.774 38.050 < 2e-16 ***
## cutIdeal 1742.944 38.589 45.167 < 2e-16 ***
## table -21.951 3.366 -6.521 7.05e-11 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1432 on 53927 degrees of freedom
## Multiple R-squared: 0.8713, Adjusted R-squared: 0.8712
## F-statistic: 3.041e+04 on 12 and 53927 DF, p-value: < 2.2e-16
Často potřebujeme porovnat odhady různých specifikací modelu. Například by mohlo být zajímavé nahradit proměnnou table
jiným měřítkem velikosti kamene. Zde odhadneme původní model a čtyři jeho alternativy:
<- list(
model
model,%>% update(. ~ . - table + depth),
model %>% update(. ~ . - table + x),
model %>% update(. ~ . - table + y),
model %>% update(. ~ . - table + z)
model
)<- map(model, ~ lm(., data = diamonds)) em
Výsledky porovnáme v přehledné tabulce s názvem “Výsledky odhadů různých specifikací modelů”:
stargazer(em, type = pandoc.output.format(), df = FALSE,
notes.append = FALSE, notes = "", header = FALSE,
no.space = TRUE,
title = "Výsledky odhadů různých specifikací modelu")
Dependent variable: | |||||
price | |||||
(1) | (2) | (3) | (4) | (5) | |
carat | 8,192.894*** | 8,183.774*** | 11,041.860*** | 9,492.338*** | 9,725.135*** |
(13.962) | (13.889) | (58.130) | (42.709) | (43.207) | |
colorE | -89.573*** | -91.842*** | -97.617*** | -92.161*** | -93.096*** |
(22.625) | (22.621) | (22.115) | (22.416) | (22.342) | |
colorF | -72.834*** | -72.405*** | -52.582** | -61.845*** | -62.069*** |
(22.772) | (22.767) | (22.262) | (22.564) | (22.488) | |
colorG | -106.719*** | -100.884*** | -107.555*** | -104.873*** | -101.694*** |
(22.070) | (22.064) | (21.568) | (21.862) | (21.789) | |
colorH | -734.724*** | -727.123*** | -761.310*** | -744.271*** | -740.949*** |
(23.702) | (23.703) | (23.172) | (23.484) | (23.404) | |
colorI | -1,077.256*** | -1,070.565*** | -1,138.112*** | -1,104.141*** | -1,100.604*** |
(26.574) | (26.577) | (26.004) | (26.344) | (26.250) | |
colorJ | -1,909.932*** | -1,902.818*** | -1,992.011*** | -1,945.948*** | -1,939.625*** |
(32.863) | (32.865) | (32.165) | (32.581) | (32.463) | |
cutGood | 1,120.648*** | 1,067.103*** | 1,184.977*** | 1,195.907*** | 1,058.334*** |
(41.223) | (41.910) | (40.300) | (40.889) | (40.738) | |
cutVery Good | 1,495.866*** | 1,438.418*** | 1,576.936*** | 1,596.985*** | 1,428.780*** |
(38.273) | (39.451) | (37.283) | (37.851) | (37.721) | |
cutPremium | 1,437.307*** | 1,342.996*** | 1,545.595*** | 1,509.262*** | 1,316.495*** |
(37.774) | (39.854) | (36.970) | (37.474) | (37.444) | |
cutIdeal | 1,742.944*** | 1,724.554*** | 1,873.955*** | 1,880.359*** | 1,706.301*** |
(38.589) | (38.768) | (36.460) | (37.001) | (36.909) | |
table | -21.951*** | ||||
(3.366) | |||||
depth | -35.979*** | ||||
(4.602) | |||||
x | -1,232.425*** | ||||
(24.372) | |||||
y | -566.150*** | ||||
(17.492) | |||||
z | -1,082.736*** | ||||
(28.780) | |||||
Constant | -2,471.895*** | -1,458.123*** | 965.254*** | -1,622.037*** | -1,055.518*** |
(201.814) | (297.291) | (101.796) | (77.707) | (82.654) | |
Observations | 53,940 | 53,940 | 53,940 | 53,940 | 53,940 |
R2 | 0.871 | 0.871 | 0.877 | 0.874 | 0.874 |
Adjusted R2 | 0.871 | 0.871 | 0.877 | 0.874 | 0.874 |
Residual Std. Error | 1,431.632 | 1,431.386 | 1,399.404 | 1,418.485 | 1,413.764 |
F Statistic | 30,410.660*** | 30,422.700*** | 32,036.900*** | 31,060.700*** | 31,298.560*** |
Note: |