--- output: html_document editor_options: chunk_output_type: console --- ```{r, message=FALSE} library(tidyverse) set.seed(42) tibble(x = rnorm(100), e = rnorm(100, sd = 2), # вектор ошибок, остатков slope = 5, # угловой коэффициент intercept = -3, # свободный коэффициент y = x*slope+intercept+e) %>% ggplot(aes(x, y))+ geom_point()+ geom_smooth(method = "lm", se = FALSE) ``` $$ y_i = \beta_0 + \beta_1\times x_i + \epsilon_i $$ ```{r} set.seed(42) tibble(x = rnorm(100), e = rnorm(100, sd = 2), # вектор ошибок slope = 5, # угловой коэффициент intercept = -3, # y = x*slope+intercept+e) %>% lm(y ~x, data =.) %>% summary() ``` Смотрите, `lm()` получила наши -3 и 5, хотя видела только переменные `x` и `y`! ```{r} set.seed(42) tibble(x = rnorm(100), slope = 5, # угловой коэффициент intercept = -3) %>% # свободный коэффициент mutate(e = ifelse(x > mean(x), rnorm(50, sd = 10), rnorm(50, sd = 2)), y = x*slope+intercept+e) %>% ggplot(aes(x, y))+ geom_point()+ geom_smooth(method = "lm", se = FALSE)+ labs(title = "гетероскидастичные данные") ``` ```{r} set.seed(42) tibble(x = rnorm(100), slope = 5, # угловой коэффициент intercept = -3) %>% # свободный коэффициент mutate(e = ifelse(x > mean(x), rnorm(50, sd = 10), rnorm(50, sd = 2)), y = x*slope+intercept+e) %>% lm(y ~x, data =.) %>% plot() # первый график -- график остатков ``` ```{r} set.seed(42) tibble(x = rnorm(100), e = rbeta(100, shape1 = 10, shape2 = 30)*10, # вектор ошибок, остатков slope = 5, # угловой коэффициент intercept = -3, # свободный коэффициент y = x*slope+intercept+e) %>% ggplot(aes(x, y))+ geom_point()+ geom_smooth(method = "lm", se = FALSE)+ geom_abline(slope = 5, intercept = -3)+ labs(title = "Остатки имеют бета распределение") tibble(x = rnorm(100), e = rbeta(100, shape1 = 10, shape2 = 30)*10, # вектор ошибок, остатков slope = 5, # угловой коэффициент intercept = -3, # свободный коэффициент y = x*slope+intercept+e) %>% lm(y ~x, data =.) %>% summary() ``` С бетараспределенными остатками мы получим неверную оценку углового и свободного коэффициентов.