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é cuta 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:

diamonds <- mutate(diamonds,
                   color = factor(color, ordered = FALSE),
                   cut = factor(cut, ordered = FALSE))

Vlastní model odhadneme takto:

model <- price ~ carat + color + cut + table
em <- lm(model, diamonds)
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:

model <- list(
    model,
    model %>% update(. ~ . - table + depth),
    model %>% update(. ~ . - table + x),
    model %>% update(. ~ . - table + y),
    model %>% update(. ~ . - table + z)
)
em <- map(model, ~ lm(., data = diamonds))

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