Эконометрика, 2022-2023

ОП “Экономика”, НИУ ВШЭ, г. Санкт-Петербург

Команда 4

Дискриминация на рынке аренды жилья: как наличие животных влияет на цену съемной квартиры?

Подготовка к работе ==========================================================

Загрузка пакетов

Общая тема графиков

theme_set(theme_light())

Загрузка исходного датафрейма и подготовка данных

arenda <- read_excel("arenda_chernovie.xlsx", sheet = "Аренда")

Формирование выборки пропорционально численности населения по районам

set.seed(23)

arenda <- arenda %>% rename(price = Цена, price_ln = "Цена ln", rooms = "Количество комнат", district = Район, to_metro = "Удаленность от метро", adress = Адрес, square = "Общая площадь", floor = "Этаж", tot_floors = "Высота дома", house_type = "Тип дома", parking = "Парковка", repair_type = "Ремонт", animals = "Можно с животными", metro = Метро, kids = "Можно с детьми", dop = "Дополнительно", lavatory = "Количество санузлов")

arenda_pop <- read_excel("arenda_chernovie.xlsx", 
     sheet = "Численость населения", 
     range = "A1:B13")
spb_pop <- sum(arenda_pop$population)
arenda_pop$prop <- round(arenda_pop$population/spb_pop, 2)

arenda_pop$area <- str_split_fixed(arenda_pop$area, " ", 2)[1:length(arenda_pop$area),1]
ar_samp <- tibble()

for (i in arenda_pop$area) {
  ar_i <- filter(arenda, district == i)
  samp <- sample_frac(ar_i, size = 5*filter(arenda_pop, area == i)[,3][[1]])
  ar_samp <- rbind(ar_samp, samp)
}

Итоговый датафрейм

write.csv(ar_samp, "arenda_sample.csv")

#ar_samp <- read_excel("arenda_sample.xlsx")

#cols = c('rooms', colnames(ar_samp[8:15]))
#ar_samp = ar_samp %>% mutate_at(cols, as.factor)

ar_samp$square <- as.numeric(ar_samp$square)
ar_samp$price_ln <- as.numeric(ar_samp$price_ln)

Разведанализ данных

cols = c('rooms', colnames(ar_samp[8:15])) 
ar_samp = ar_samp %>% mutate_at(cols, as.factor)

animals1 <- filter(ar_samp, ar_samp$animals == 1)
animals0 <- filter(ar_samp, ar_samp$animals == 0)
summary(ar_samp)
##      price           price_ln      rooms     district        
##  Min.   : 15000   Min.   : 9.616   1:484   Length:979        
##  1st Qu.: 27000   1st Qu.:10.204   2:333   Class :character  
##  Median : 35000   Median :10.463   3:121   Mode  :character  
##  Mean   : 48198   Mean   :10.591   4: 32                     
##  3rd Qu.: 52000   3rd Qu.:10.859   5:  5                     
##  Max.   :400000   Max.   :12.899   6:  4                     
##                                                              
##     metro              to_metro        adress              square   
##  Length:979         Min.   : 1.00   Length:979         40     : 50  
##  Class :character   1st Qu.: 6.00   Class :character   35     : 40  
##  Mode  :character   Median : 9.00   Mode  :character   45     : 33  
##                     Mean   :10.81                      38     : 31  
##                     3rd Qu.:14.00                      60     : 31  
##                     Max.   :81.00                      42     : 28  
##                                                        (Other):766  
##      floor       tot_floors                house_type  parking
##  2      :107   9      :124   Блочный            :  6   0:579  
##  4      :102   5      :120   Кирпичный          :323   1:400  
##  3      : 95   25     : 75   Монолитно-кирпичный:169          
##  5      : 94   10     : 64   Монолитный         :284          
##  6      : 66   16     : 64   Панельный          :192          
##  8      : 61   12     : 60   Сталинский         :  5          
##  (Other):454   (Other):472                                    
##         repair_type  Без ремонта Дизайнерский   Евроремонт     Косметический   
##  Без ремонта  :  7   0:972       0:788        Min.   :0.0000   Min.   :0.0000  
##  Дизайнерский :191   1:  7       1:191        1st Qu.:0.0000   1st Qu.:0.0000  
##  Евроремонт   :492                            Median :1.0000   Median :0.0000  
##  Косметический:289                            Mean   :0.5026   Mean   :0.2952  
##                                               3rd Qu.:1.0000   3rd Qu.:1.0000  
##                                               Max.   :1.0000   Max.   :1.0000  
##                                                                                
##     lavatory          kids           animals           dop           
##  Min.   :1.000   Min.   :0.0000   Min.   :0.0000   Length:979        
##  1st Qu.:1.000   1st Qu.:0.0000   1st Qu.:0.0000   Class :character  
##  Median :1.000   Median :1.0000   Median :0.0000   Mode  :character  
##  Mean   :1.107   Mean   :0.5781   Mean   :0.2114                     
##  3rd Qu.:1.000   3rd Qu.:1.0000   3rd Qu.:0.0000                     
##  Max.   :5.000   Max.   :1.0000   Max.   :1.0000                     
## 

Исследование на выбросы

for (i in arenda_pop$area) {
  ar_i <- filter(ar_samp, district == i)
  print(i)
  boxplot(ar_i$price,
    ylab = "Цена",
    main = "Боксплот для цены съемного жилья")
  out <- boxplot.stats(ar_i$price)$out
  print(out, collapse = ", ")
  out_ind <- which(ar_i$price %in% c(out))
  print(ar_i[out_ind, ])
}
## [1] "Адмиралтейский"

## [1] 230000 200000 180000 200000 200000
## # A tibble: 5 × 21
##    price price…¹ rooms distr…² metro to_me…³ adress square floor tot_f…⁴ house…⁵
##    <dbl>   <dbl> <fct> <chr>   <chr>   <dbl> <chr>  <fct>  <fct> <fct>   <fct>  
## 1 230000    12.3 4     Адмира… м. А…       5 Санкт… 245    3     5       Моноли…
## 2 200000    12.2 3     Адмира… м. Б…       5 Санкт… 198.6  7     8       Моноли…
## 3 180000    12.1 2     Адмира… м. С…       5 Санкт… 160    1     6       Кирпич…
## 4 200000    12.2 3     Адмира… м. Г…      10 Санкт… 197    7     8       Моноли…
## 5 200000    12.2 2     Адмира… м. А…       8 Санкт… 75     1     7       Моноли…
## # … with 10 more variables: parking <fct>, repair_type <fct>,
## #   `Без ремонта` <fct>, Дизайнерский <fct>, Евроремонт <dbl>,
## #   Косметический <dbl>, lavatory <dbl>, kids <dbl>, animals <dbl>, dop <chr>,
## #   and abbreviated variable names ¹​price_ln, ²​district, ³​to_metro,
## #   ⁴​tot_floors, ⁵​house_type
## [1] "Василеостровский"

## [1] 150000 149000
## # A tibble: 2 × 21
##    price price…¹ rooms distr…² metro to_me…³ adress square floor tot_f…⁴ house…⁵
##    <dbl>   <dbl> <fct> <chr>   <chr>   <dbl> <chr>  <fct>  <fct> <fct>   <fct>  
## 1 150000    11.9 4     Василе… м. П…      20 Санкт… 100    6     11      Моноли…
## 2 149000    11.9 4     Василе… м. В…      21 Санкт… 120    9     9       Моноли…
## # … with 10 more variables: parking <fct>, repair_type <fct>,
## #   `Без ремонта` <fct>, Дизайнерский <fct>, Евроремонт <dbl>,
## #   Косметический <dbl>, lavatory <dbl>, kids <dbl>, animals <dbl>, dop <chr>,
## #   and abbreviated variable names ¹​price_ln, ²​district, ³​to_metro,
## #   ⁴​tot_floors, ⁵​house_type
## [1] "Выборгский"

##  [1] 230000 120000 150000 150000 135000 130000 240000 225000 140000 100000
## [11] 130000
## # A tibble: 11 × 21
##     price price_ln rooms district   metro    to_me…¹ adress square floor tot_f…²
##     <dbl>    <dbl> <fct> <chr>      <chr>      <dbl> <chr>  <fct>  <fct> <fct>  
##  1 230000     12.3 4     Выборгский м. Площ…       5 Санкт… 160    14    21     
##  2 120000     11.7 4     Выборгский м. Удел…      16 Санкт… 180    16    16     
##  3 150000     11.9 3     Выборгский м. Площ…      10 Санкт… 120    9     18     
##  4 150000     11.9 2     Выборгский м. Площ…       9 Санкт… 108.5  19    22     
##  5 135000     11.8 3     Выборгский м. Озер…      24 Санкт… 136    1     4      
##  6 130000     11.8 4     Выборгский м. Площ…       9 Санкт… 130    14    16     
##  7 240000     12.4 5     Выборгский м. Парн…       5 Санкт… 280    1     4      
##  8 225000     12.3 4     Выборгский м. Площ…       5 Санкт… 160    15    16     
##  9 140000     11.8 4     Выборгский м. Горь…      17 Санкт… 140    14    18     
## 10 100000     11.5 2     Выборгский м. Площ…       9 Санкт… 75     12    18     
## 11 130000     11.8 4     Выборгский м. Площ…      15 Санкт… 130    14    16     
## # … with 11 more variables: house_type <fct>, parking <fct>, repair_type <fct>,
## #   `Без ремонта` <fct>, Дизайнерский <fct>, Евроремонт <dbl>,
## #   Косметический <dbl>, lavatory <dbl>, kids <dbl>, animals <dbl>, dop <chr>,
## #   and abbreviated variable names ¹​to_metro, ²​tot_floors
## [1] "Калининский"

## [1] 115000  55000  60000  65000  65000  63000  80000  55000
## # A tibble: 8 × 21
##    price price…¹ rooms distr…² metro to_me…³ adress square floor tot_f…⁴ house…⁵
##    <dbl>   <dbl> <fct> <chr>   <chr>   <dbl> <chr>  <fct>  <fct> <fct>   <fct>  
## 1 115000    11.7 3     Калини… м. П…       4 Санкт… 130    2     15      Моноли…
## 2  55000    10.9 2     Калини… м. А…      11 Санкт… 68     7     21      Моноли…
## 3  60000    11.0 2     Калини… м. А…       5 Санкт… 50.9   5     12      Кирпич…
## 4  65000    11.1 3     Калини… м. А…      15 Санкт… 67     1     9       Моноли…
## 5  65000    11.1 3     Калини… м. А…       8 Санкт… 100    18    22      Моноли…
## 6  63000    11.1 3     Калини… м. П…       7 Санкт… 72.4   3     9       Моноли…
## 7  80000    11.3 4     Калини… м. А…       8 Санкт… 136    7     21      Моноли…
## 8  55000    10.9 3     Калини… м. Л…       9 Санкт… 84     10    24      Моноли…
## # … with 10 more variables: parking <fct>, repair_type <fct>,
## #   `Без ремонта` <fct>, Дизайнерский <fct>, Евроремонт <dbl>,
## #   Косметический <dbl>, lavatory <dbl>, kids <dbl>, animals <dbl>, dop <chr>,
## #   and abbreviated variable names ¹​price_ln, ²​district, ³​to_metro,
## #   ⁴​tot_floors, ⁵​house_type
## [1] "Кировский"

## [1]  55000 130000  65000  70000
## # A tibble: 4 × 21
##    price price…¹ rooms distr…² metro to_me…³ adress square floor tot_f…⁴ house…⁵
##    <dbl>   <dbl> <fct> <chr>   <chr>   <dbl> <chr>  <fct>  <fct> <fct>   <fct>  
## 1  55000    10.9 4     Кировс… м. П…       9 Санкт… 129.9  16    26      Моноли…
## 2 130000    11.8 5     Кировс… м. П…       5 Санкт… 140    5     6       Кирпич…
## 3  65000    11.1 3     Кировс… м. К…      12 Санкт… 105    4     5       Кирпич…
## 4  70000    11.2 3     Кировс… м. П…      23 Санкт… 95     4     17      Моноли…
## # … with 10 more variables: parking <fct>, repair_type <fct>,
## #   `Без ремонта` <fct>, Дизайнерский <fct>, Евроремонт <dbl>,
## #   Косметический <dbl>, lavatory <dbl>, kids <dbl>, animals <dbl>, dop <chr>,
## #   and abbreviated variable names ¹​price_ln, ²​district, ³​to_metro,
## #   ⁴​tot_floors, ⁵​house_type
## [1] "Красногвардейский"

## [1]  90000  94000  85000 100000
## # A tibble: 4 × 21
##    price price…¹ rooms distr…² metro to_me…³ adress square floor tot_f…⁴ house…⁵
##    <dbl>   <dbl> <fct> <chr>   <chr>   <dbl> <chr>  <fct>  <fct> <fct>   <fct>  
## 1  90000    11.4 2     Красно… м. П…      28 Санкт… 78     6     17      Моноли…
## 2  94000    11.5 2     Красно… м. Н…       5 Санкт… 75     6     8       Кирпич…
## 3  85000    11.4 4     Красно… м. Н…      11 Санкт… 140    8     16      Моноли…
## 4 100000    11.5 2     Красно… м. Н…      12 Санкт… 75     6     8       Моноли…
## # … with 10 more variables: parking <fct>, repair_type <fct>,
## #   `Без ремонта` <fct>, Дизайнерский <fct>, Евроремонт <dbl>,
## #   Косметический <dbl>, lavatory <dbl>, kids <dbl>, animals <dbl>, dop <chr>,
## #   and abbreviated variable names ¹​price_ln, ²​district, ³​to_metro,
## #   ⁴​tot_floors, ⁵​house_type
## [1] "Московский"

## [1] 200000 135000 140000
## # A tibble: 3 × 21
##    price price…¹ rooms distr…² metro to_me…³ adress square floor tot_f…⁴ house…⁵
##    <dbl>   <dbl> <fct> <chr>   <chr>   <dbl> <chr>  <fct>  <fct> <fct>   <fct>  
## 1 200000    12.2 6     Москов… м. Э…      12 Санкт… 184    1     17      Моноли…
## 2 135000    11.8 3     Москов… м. Э…       2 Санкт… 97     6     13      Моноли…
## 3 140000    11.8 4     Москов… м. П…      10 Санкт… 120    17    22      Моноли…
## # … with 10 more variables: parking <fct>, repair_type <fct>,
## #   `Без ремонта` <fct>, Дизайнерский <fct>, Евроремонт <dbl>,
## #   Косметический <dbl>, lavatory <dbl>, kids <dbl>, animals <dbl>, dop <chr>,
## #   and abbreviated variable names ¹​price_ln, ²​district, ³​to_metro,
## #   ⁴​tot_floors, ⁵​house_type
## [1] "Невский"

##  [1] 65000 55000 70000 58000 55000 45000 70000 80000 50000 50000
## # A tibble: 10 × 21
##    price price…¹ rooms distr…² metro to_me…³ adress square floor tot_f…⁴ house…⁵
##    <dbl>   <dbl> <fct> <chr>   <chr>   <dbl> <chr>  <fct>  <fct> <fct>   <fct>  
##  1 65000    11.1 2     Невский м. Е…      15 Санкт… 65     18    19      Моноли…
##  2 55000    10.9 3     Невский м. Е…       7 Санкт… 81     3     5       Моноли…
##  3 70000    11.2 3     Невский м. У…       3 Санкт… 70     6     24      Моноли…
##  4 58000    11.0 3     Невский м. Е…       6 Санкт… 81     3     5       Моноли…
##  5 55000    10.9 2     Невский м. Л…      15 Санкт… 57     11    23      Моноли…
##  6 45000    10.7 2     Невский м. О…       5 Санкт… 52     31    36      Моноли…
##  7 70000    11.2 2     Невский м. П…      13 Санкт… 82     10    17      Кирпич…
##  8 80000    11.3 2     Невский м. Е…      10 Санкт… 55.8   16    18      Моноли…
##  9 50000    10.8 2     Невский м. Е…       9 Санкт… 71     16    25      Моноли…
## 10 50000    10.8 2     Невский м. У…      20 Санкт… 58.5   17    23      Моноли…
## # … with 10 more variables: parking <fct>, repair_type <fct>,
## #   `Без ремонта` <fct>, Дизайнерский <fct>, Евроремонт <dbl>,
## #   Косметический <dbl>, lavatory <dbl>, kids <dbl>, animals <dbl>, dop <chr>,
## #   and abbreviated variable names ¹​price_ln, ²​district, ³​to_metro,
## #   ⁴​tot_floors, ⁵​house_type
## [1] "Петроградский"

## [1] 300000 220000 350000
## # A tibble: 3 × 21
##    price price…¹ rooms distr…² metro to_me…³ adress square floor tot_f…⁴ house…⁵
##    <dbl>   <dbl> <fct> <chr>   <chr>   <dbl> <chr>  <fct>  <fct> <fct>   <fct>  
## 1 300000    12.6 6     Петрог… м. К…       5 Санкт… 413    5     9       Кирпич…
## 2 220000    12.3 3     Петрог… м. К…       3 Санкт… 180    2     7       Кирпич…
## 3 350000    12.8 5     Петрог… м. К…       5 Санкт… 220    6     8       Кирпич…
## # … with 10 more variables: parking <fct>, repair_type <fct>,
## #   `Без ремонта` <fct>, Дизайнерский <fct>, Евроремонт <dbl>,
## #   Косметический <dbl>, lavatory <dbl>, kids <dbl>, animals <dbl>, dop <chr>,
## #   and abbreviated variable names ¹​price_ln, ²​district, ³​to_metro,
## #   ⁴​tot_floors, ⁵​house_type
## [1] "Приморский"

##  [1]  95000 200000 150000 100000 190000 115000 180000 100000 130000 103000
## # A tibble: 10 × 21
##     price price_ln rooms district   metro    to_me…¹ adress square floor tot_f…²
##     <dbl>    <dbl> <fct> <chr>      <chr>      <dbl> <chr>  <fct>  <fct> <fct>  
##  1  95000     11.5 3     Приморский м. Бего…      24 Санкт… 83     4     12     
##  2 200000     12.2 3     Приморский м. Черн…       5 Санкт… 99.6   3     5      
##  3 150000     11.9 2     Приморский м. Черн…      12 Санкт… 110    15    17     
##  4 100000     11.5 2     Приморский м. Бего…      10 Санкт… 68     2     3      
##  5 190000     12.2 3     Приморский м. Черн…      11 Санкт… 180    1     4      
##  6 115000     11.7 2     Приморский м. Бего…      20 Санкт… 67.7   7     10     
##  7 180000     12.1 2     Приморский м. Бего…      13 Санкт… 72     2     8      
##  8 100000     11.5 2     Приморский м. Бего…      10 Санкт… 49     1     8      
##  9 130000     11.8 2     Приморский м. Бего…      15 Санкт… 75     2     3      
## 10 103000     11.5 2     Приморский м. Черн…       9 Санкт… 70     14    20     
## # … with 11 more variables: house_type <fct>, parking <fct>, repair_type <fct>,
## #   `Без ремонта` <fct>, Дизайнерский <fct>, Евроремонт <dbl>,
## #   Косметический <dbl>, lavatory <dbl>, kids <dbl>, animals <dbl>, dop <chr>,
## #   and abbreviated variable names ¹​to_metro, ²​tot_floors
## [1] "Фрунзенский"

## [1]  60000 120000  95000  60000  60000
## # A tibble: 5 × 21
##    price price…¹ rooms distr…² metro to_me…³ adress square floor tot_f…⁴ house…⁵
##    <dbl>   <dbl> <fct> <chr>   <chr>   <dbl> <chr>  <fct>  <fct> <fct>   <fct>  
## 1  60000    11.0 2     Фрунзе… м. П…       2 Санкт… 57     2     14      Моноли…
## 2 120000    11.7 3     Фрунзе… м. О…       5 Санкт… 120    7     7       Кирпич…
## 3  95000    11.5 4     Фрунзе… м. О…       3 Санкт… 124    5     5       Кирпич…
## 4  60000    11.0 1     Фрунзе… м. О…      11 Санкт… 50.5   5     10      Моноли…
## 5  60000    11.0 3     Фрунзе… м. К…      13 Санкт… 70     10    10      Панель…
## # … with 10 more variables: parking <fct>, repair_type <fct>,
## #   `Без ремонта` <fct>, Дизайнерский <fct>, Евроремонт <dbl>,
## #   Косметический <dbl>, lavatory <dbl>, kids <dbl>, animals <dbl>, dop <chr>,
## #   and abbreviated variable names ¹​price_ln, ²​district, ³​to_metro,
## #   ⁴​tot_floors, ⁵​house_type
## [1] "Центральный"

## [1] 320000 350000 400000 400000
## # A tibble: 4 × 21
##    price price…¹ rooms distr…² metro to_me…³ adress square floor tot_f…⁴ house…⁵
##    <dbl>   <dbl> <fct> <chr>   <chr>   <dbl> <chr>  <fct>  <fct> <fct>   <fct>  
## 1 320000    12.7 4     Центра… м. Ч…       5 Санкт… 130    4     11      Моноли…
## 2 350000    12.8 4     Центра… м. А…       5 Санкт… 200    6     6       Кирпич…
## 3 400000    12.9 6     Центра… м. Ч…       5 Санкт… 329    4     4       Моноли…
## 4 400000    12.9 4     Центра… м. Ч…       5 Санкт… 157    8     11      Кирпич…
## # … with 10 more variables: parking <fct>, repair_type <fct>,
## #   `Без ремонта` <fct>, Дизайнерский <fct>, Евроремонт <dbl>,
## #   Косметический <dbl>, lavatory <dbl>, kids <dbl>, animals <dbl>, dop <chr>,
## #   and abbreviated variable names ¹​price_ln, ²​district, ³​to_metro,
## #   ⁴​tot_floors, ⁵​house_type

Выбросы целиком по выборке

boxplot(ar_samp$price,
    ylab = "Ценя",
    main = "Боксплот для цены съемного жилья")

  out <- boxplot.stats(ar_samp$price)$out
  print(out, collapse = ", ")
##  [1] 130000 230000  95000 200000 180000  90000 200000 200000 120000  90000
## [11] 150000 130000  90000  99999 150000  90000  90000 130000 100000  93000
## [21]  90000 149000 230000 120000 150000 150000  90000 135000 130000 240000
## [31] 225000 140000 100000 130000 115000 130000  90000  94000 100000 200000
## [41] 135000 140000 120000 300000 150000 100000 120000 220000 100000 350000
## [51] 100000 110000  95000 100000 150000  95000 200000 150000 100000 190000
## [61]  90000 115000 180000 100000 130000 103000 120000  95000 125000 225000
## [71] 180000 120000 230000 114900  95000 230000 200000 120000 320000 150000
## [81] 120000 125000 350000 130000 400000 170000 100000 140000 400000 130000
  out_ind <- which(ar_samp$price %in% c(out))
  print(ar_samp[out_ind, ])
## # A tibble: 90 × 21
##    price price…¹ rooms distr…² metro to_me…³ adress square floor tot_f…⁴ house…⁵
##    <dbl>   <dbl> <fct> <chr>   <chr>   <dbl> <chr>  <fct>  <fct> <fct>   <fct>  
##  1 1.3e5    11.8 2     Адмира… м. С…       5 Санкт… 82     6     6       Кирпич…
##  2 2.3e5    12.3 4     Адмира… м. А…       5 Санкт… 245    3     5       Моноли…
##  3 9.5e4    11.5 3     Адмира… м. А…      15 Санкт… 190    2     4       Кирпич…
##  4 2  e5    12.2 3     Адмира… м. Б…       5 Санкт… 198.6  7     8       Моноли…
##  5 1.8e5    12.1 2     Адмира… м. С…       5 Санкт… 160    1     6       Кирпич…
##  6 9  e4    11.4 3     Адмира… м. А…      10 Санкт… 86     2     6       Кирпич…
##  7 2  e5    12.2 3     Адмира… м. Г…      10 Санкт… 197    7     8       Моноли…
##  8 2  e5    12.2 2     Адмира… м. А…       8 Санкт… 75     1     7       Моноли…
##  9 1.2e5    11.7 4     Адмира… м. А…       5 Санкт… 120    1     3       Кирпич…
## 10 9  e4    11.4 2     Адмира… м. З…       3 Санкт… 120    3     7       Моноли…
## # … with 80 more rows, 10 more variables: parking <fct>, repair_type <fct>,
## #   `Без ремонта` <fct>, Дизайнерский <fct>, Евроремонт <dbl>,
## #   Косметический <dbl>, lavatory <dbl>, kids <dbl>, animals <dbl>, dop <chr>,
## #   and abbreviated variable names ¹​price_ln, ²​district, ³​to_metro,
## #   ⁴​tot_floors, ⁵​house_type
До удаления sd была большой, удалили выбросы >200 000, осталось 960 наблюдений
sd(ar_samp$price)
## [1] 41650.47
ar_samp <- ar_samp %>% filter(price < 200000)
sd(ar_samp$price)
## [1] 27263.02

Распределение стоимости аренды

sd(ar_samp$price)
## [1] 27263.02
mean(ar_samp$price)
## [1] 43833.19
plot(ar_samp$price, dnorm(ar_samp$price, mean = mean(ar_samp$price), sd = sd(ar_samp$price)))

Описательные статистики

ar_samp <- read_excel("arenda_sample.xlsx")

ar_samp <- ar_samp %>% filter(price < 200000)

names(ar_samp)[names(ar_samp) == 'to_metro'] <- 'tometro'

ar_samp$animals <- as.factor(ar_samp$animals)

table_1 <- ar_samp %>%
  group_by(animals) %>%
  summarise(across(price, 
                   list(mean = mean, median = median, sd = sd, min = min, max = max), 
                   na.rm = TRUE)) %>% 
  pivot_longer(-animals, names_to = "name", values_to = "value") %>% 
  separate(name, c("variable", "statistic"), sep = "_") %>%
  pivot_wider(names_from = statistic, values_from = value) %>%
  arrange(variable, animals) 

ar_samp$square <- as.numeric(ar_samp$square)
table_2 <- ar_samp %>%
  group_by(animals) %>%
  summarise(across(square, 
                   list(mean = mean, median = median, sd = sd, min = min, max = max), 
                   na.rm = TRUE)) %>% 
  pivot_longer(-animals, names_to = "name", values_to = "value") %>% 
  separate(name, c("variable", "statistic"), sep = "_") %>%
  pivot_wider(names_from = statistic, values_from = value) %>%
  arrange(variable, animals)

table_3 <- ar_samp %>%
  group_by(animals) %>%
  summarise(across(tometro, 
                   list(mean = mean, median = median, sd = sd, min = min, max = max), 
                   na.rm = TRUE)) %>% 
  pivot_longer(-animals, names_to = "name", values_to = "value") %>% 
  separate(name, c("variable", "statistic"), sep = "_") %>%
  pivot_wider(names_from = statistic, values_from = value) %>%
  arrange(variable, animals)

opisatelnaya = rbind(table_1, table_2, table_3)

opisatelnaya = arrange(opisatelnaya, animals)

opisatelnaya
## # A tibble: 6 × 7
##   animals variable    mean  median       sd     min    max
##   <fct>   <chr>      <dbl>   <dbl>    <dbl>   <dbl>  <dbl>
## 1 0       price    43457.  35000   26827.   15000   190000
## 2 0       square      53.4    45      24.1     16      180
## 3 0       tometro     10.8     9       7.36     1       81
## 4 1       price    45277.  35000   28902.   15000   150000
## 5 1       square      59.1    48.9    31.0     20.4    190
## 6 1       tometro     11.3    10       8.12     1       65
names(ar_samp)[names(ar_samp) == 'tometro'] <- 'to_metro'

Корреляционная матрица для числовых переменных

ar_samp$square <- as.numeric(ar_samp$square)
ggpairs(ar_samp, columns = c(1, 6, 8))

Графики

ar_samp$animals <- as.factor(ar_samp$animals)
ggplot(ar_samp) +
  aes(price, fill = animals) +
  geom_histogram(position = 'identity') +
  scale_fill_manual(values = c("black", "grey"))
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

ggplot(ar_samp, aes (x = price)) + geom_histogram () + labs ( x = "Стоимость аренды", y = "Число квартир") 
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

plot(ar_samp$to_metro, ar_samp$price, xlab = "Расстояние от квартиры до метро", ylab = "Стоимость аренды квартиры")

Регрессионный анализ

model_all = lm(price_ln ~ animals + rooms + district + to_metro + square + floor + house_type + parking + repair_type + lavatory + kids, data = ar_samp)

model_square2 = lm(price_ln ~ animals + rooms + district  + to_metro + I(square^2) + floor + house_type + parking + repair_type + lavatory + kids, data = ar_samp)

model_to_metro2 = lm(price_ln ~ animals + rooms + district + I(to_metro^2) + square + floor + house_type + parking + repair_type + lavatory + kids, data = ar_samp)

model_animXrep_wt_animals = lm(price_ln ~ rooms + district + to_metro + square + floor + house_type + parking + repair_type + lavatory + kids + repair_type:animals, data = ar_samp)

model_square2_repXanim = lm(price_ln ~ animals + rooms + district + to_metro + I(square^2) + floor + house_type + parking + repair_type + lavatory + kids + repair_type:animals, data = ar_samp)
library(sandwich)

cov_model_all <- vcovHC(model_all, type = "HC0") 

cov_model_square2 <- vcovHC(model_square2, type = "HC0")

cov_model_to_metro2 <- vcovHC(model_to_metro2, type = "HC0")

cov_model_animXrep_wt_animals <- vcovHC(model_animXrep_wt_animals, type = "HC0")

cov_model_square2_repXanim <- vcovHC(model_square2_repXanim, type = "HC0") 

modelsummary(models = list(model_all, model_square2, model_to_metro2, model_animXrep_wt_animals, model_square2_repXanim),
             vcov = list(cov_model_all, cov_model_square2, cov_model_to_metro2, cov_model_animXrep_wt_animals, cov_model_square2_repXanim),
             #output = "results.docx",
             coef_omit = "rooms|district|floor|house_type|parking|lavatory",
             statistic = "std.error",  
             stars = TRUE,         
             gof_omit = ".*",                       
             notes = list("В скобках даны робастные стандартные ошибки"),
             title = "Результаты оценки")
Результаты оценки
Model 1 Model 2 Model 3 Model 4 Model 5
(Intercept) 9.757*** 9.945*** 9.740*** 9.707*** 9.929***
(0.200) (0.212) (0.200) (0.389) (0.405)
animals1 0.004 0.001 0.003 0.027
(0.020) (0.021) (0.020) (0.394)
to_metro −0.002* −0.002* −0.002* −0.002*
(0.0009) (0.001) (0.0009) (0.0009)
square 0.009*** 0.009*** 0.009***
(0.0007) (0.0007) (0.0007)
repair_typeДизайнерский 0.503** 0.513** 0.506** 0.553 0.528
(0.178) (0.181) (0.177) (0.379) (0.392)
repair_typeЕвроремонт 0.275 0.268 0.278 0.323 0.281
(0.175) (0.179) (0.174) (0.378) (0.390)
repair_typeКосметический 0.118 0.099 0.120 0.168 0.115
(0.173) (0.177) (0.172) (0.377) (0.390)
kids −0.033* −0.026 −0.032* −0.033* −0.026
(0.016) (0.016) (0.016) (0.016) (0.016)
I(square^2) 0.00003*** 0.00003***
(0.000005) (0.000005)
I(to_metro^2) −0.00003*
(0.00002)
repair_typeБез ремонта × animals1 0.091
(0.382)
repair_typeДизайнерский × animals1 −0.004
(0.059)
repair_typeЕвроремонт × animals1 0.008
(0.028)
repair_typeКосметический × animals1 −0.001
(0.027)
animals1 × repair_typeДизайнерский −0.029
(0.400)
animals1 × repair_typeЕвроремонт −0.019
(0.394)
animals1 × repair_typeКосметический −0.033
(0.394)
+ p < 0.1, * p < 0.05, ** p < 0.01, *** p < 0.001
В скобках даны робастные стандартные ошибки