Задание 1: Сформируйте собственный датасет с NA значениями

Создаем датасет с NA значениями

dataset <- c(1, 2, NA, 4, 5, NA, 7, 8, 9, NA)
print("Исходный датасет:")
## [1] "Исходный датасет:"
print(dataset)
##  [1]  1  2 NA  4  5 NA  7  8  9 NA

Задание 2: Очистка данных с использованием is.na()

Очистка данных

clean_dataset <- dataset[!is.na(dataset)]
print("Чистый датасет:")
## [1] "Чистый датасет:"
print(clean_dataset)
## [1] 1 2 4 5 7 8 9

Задание 3: Сгенерируйте таблицу данных и очистите с complete.cases()

Создаем таблицу данных с числовыми и текстовыми столбцами

data_table <- data.frame(
  numbers = c(1, 2, NA, 4, 5, NA, 7, 8, 9, NA),
  text = c("a", "b", "c", "d", NA, "f", "g", "h", NA, "j")
)
print("Исходная таблица данных:")
## [1] "Исходная таблица данных:"
print(data_table)
##    numbers text
## 1        1    a
## 2        2    b
## 3       NA    c
## 4        4    d
## 5        5 <NA>
## 6       NA    f
## 7        7    g
## 8        8    h
## 9        9 <NA>
## 10      NA    j

Очистка данных с complete.cases()

clean_data_table <- data_table[complete.cases(data_table), ]
print("Чистая таблица данных:")
## [1] "Чистая таблица данных:"
print(clean_data_table)
##   numbers text
## 1       1    a
## 2       2    b
## 4       4    d
## 7       7    g
## 8       8    h

Задание 4: Анализ датасета airquality с использованием preProcess

library(caret)
## Загрузка требуемого пакета: ggplot2
## Загрузка требуемого пакета: lattice

Анализ датасета airquality

data(airquality)
print("Исходный датасет airquality:")
## [1] "Исходный датасет airquality:"
print(head(airquality))
##   Ozone Solar.R Wind Temp Month Day
## 1    41     190  7.4   67     5   1
## 2    36     118  8.0   72     5   2
## 3    12     149 12.6   74     5   3
## 4    18     313 11.5   62     5   4
## 5    NA      NA 14.3   56     5   5
## 6    28      NA 14.9   66     5   6

Заполнение пропусков с использованием preProcess

preprocessParams <- preProcess(airquality, method = c("medianImpute"))
airquality_clean <- predict(preprocessParams, airquality)
print("Датасет airquality после заполнения пропусков:")
## [1] "Датасет airquality после заполнения пропусков:"
print(head(airquality_clean))
##   Ozone Solar.R Wind Temp Month Day
## 1  41.0     190  7.4   67     5   1
## 2  36.0     118  8.0   72     5   2
## 3  12.0     149 12.6   74     5   3
## 4  18.0     313 11.5   62     5   4
## 5  31.5     205 14.3   56     5   5
## 6  28.0     205 14.9   66     5   6

Задание 5: Генерация данных с выбросами и их удаление

Генерация данных с выбросами

set1 <- c(rnorm(10), 100)
set2 <- c(rnorm(10), -100)
data_with_outliers <- data.frame(set1, set2)
print("Данные с выбросами:")
## [1] "Данные с выбросами:"
print(data_with_outliers)
##            set1         set2
## 1    0.26141048    1.5233055
## 2   -3.18051581    0.9968698
## 3    1.67892019   -0.5915400
## 4   -1.02673404   -1.4323390
## 5    0.90259113    0.3284261
## 6    1.82421413   -1.0608394
## 7    2.34389677    1.9251855
## 8   -0.40834818    0.0560927
## 9    0.04454402    0.3379536
## 10  -1.16621182   -1.1713904
## 11 100.00000000 -100.0000000

Обнаружение и удаление выбросов

boxplot(set1, main = "Boxplot set1")

boxplot(set2, main = "Boxplot set2")

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

clean_set1 <- set1[!(set1 %in% boxplot.stats(set1)$out)]
clean_set2 <- set2[!(set2 %in% boxplot.stats(set2)$out)]

Приведение к одинаковой длине путем удаления лишних строк

min_length <- min(length(clean_set1), length(clean_set2))
clean_set1 <- clean_set1[1:min_length]
clean_set2 <- clean_set2[1:min_length]
clean_data_with_outliers <- data.frame(clean_set1, clean_set2)
print("Данные после удаления выбросов:")
## [1] "Данные после удаления выбросов:"
print(clean_data_with_outliers)
##     clean_set1 clean_set2
## 1   0.26141048  1.5233055
## 2  -3.18051581  0.9968698
## 3   1.67892019 -0.5915400
## 4  -1.02673404 -1.4323390
## 5   0.90259113  0.3284261
## 6   1.82421413 -1.0608394
## 7   2.34389677  1.9251855
## 8  -0.40834818  0.0560927
## 9   0.04454402  0.3379536
## 10 -1.16621182 -1.1713904

Задание 6: Удаление дублирующихся строк

Генерация данных с дублирующимися строками

data_with_duplicates <- data.frame(
  x = c(1, 2, 2, 3, 4, 4, 5),
  y = c("a", "b", "b", "c", "d", "d", "e")
)
print("Данные с дублирующимися строками:")
## [1] "Данные с дублирующимися строками:"
print(data_with_duplicates)
##   x y
## 1 1 a
## 2 2 b
## 3 2 b
## 4 3 c
## 5 4 d
## 6 4 d
## 7 5 e

Удаление дубликатов с использованием unique()

unique_data <- unique(data_with_duplicates)
print("Данные после удаления дубликатов с unique():")
## [1] "Данные после удаления дубликатов с unique():"
print(unique_data)
##   x y
## 1 1 a
## 2 2 b
## 4 3 c
## 5 4 d
## 7 5 e

Удаление дубликатов с использованием duplicated()

data_no_duplicates <- data_with_duplicates[!duplicated(data_with_duplicates), ]
print("Данные после удаления дубликатов с duplicated():")
## [1] "Данные после удаления дубликатов с duplicated():"
print(data_no_duplicates)
##   x y
## 1 1 a
## 2 2 b
## 4 3 c
## 5 4 d
## 7 5 e

Задание 7: Обработка пропусков с использованием пакета mice

library(mice)
## 
## Присоединяю пакет: 'mice'
## Следующий объект скрыт от 'package:stats':
## 
##     filter
## Следующие объекты скрыты от 'package:base':
## 
##     cbind, rbind

Использование датасета airquality для обработки пропусков

print("Исходный датасет airquality:")
## [1] "Исходный датасет airquality:"
print(head(airquality))
##   Ozone Solar.R Wind Temp Month Day
## 1    41     190  7.4   67     5   1
## 2    36     118  8.0   72     5   2
## 3    12     149 12.6   74     5   3
## 4    18     313 11.5   62     5   4
## 5    NA      NA 14.3   56     5   5
## 6    28      NA 14.9   66     5   6

Обработка пропусков с использованием mice

mice_imputed <- mice(airquality, m = 1, method = 'pmm', maxit = 50, seed = 500)
## 
##  iter imp variable
##   1   1  Ozone  Solar.R
##   2   1  Ozone  Solar.R
##   3   1  Ozone  Solar.R
##   4   1  Ozone  Solar.R
##   5   1  Ozone  Solar.R
##   6   1  Ozone  Solar.R
##   7   1  Ozone  Solar.R
##   8   1  Ozone  Solar.R
##   9   1  Ozone  Solar.R
##   10   1  Ozone  Solar.R
##   11   1  Ozone  Solar.R
##   12   1  Ozone  Solar.R
##   13   1  Ozone  Solar.R
##   14   1  Ozone  Solar.R
##   15   1  Ozone  Solar.R
##   16   1  Ozone  Solar.R
##   17   1  Ozone  Solar.R
##   18   1  Ozone  Solar.R
##   19   1  Ozone  Solar.R
##   20   1  Ozone  Solar.R
##   21   1  Ozone  Solar.R
##   22   1  Ozone  Solar.R
##   23   1  Ozone  Solar.R
##   24   1  Ozone  Solar.R
##   25   1  Ozone  Solar.R
##   26   1  Ozone  Solar.R
##   27   1  Ozone  Solar.R
##   28   1  Ozone  Solar.R
##   29   1  Ozone  Solar.R
##   30   1  Ozone  Solar.R
##   31   1  Ozone  Solar.R
##   32   1  Ozone  Solar.R
##   33   1  Ozone  Solar.R
##   34   1  Ozone  Solar.R
##   35   1  Ozone  Solar.R
##   36   1  Ozone  Solar.R
##   37   1  Ozone  Solar.R
##   38   1  Ozone  Solar.R
##   39   1  Ozone  Solar.R
##   40   1  Ozone  Solar.R
##   41   1  Ozone  Solar.R
##   42   1  Ozone  Solar.R
##   43   1  Ozone  Solar.R
##   44   1  Ozone  Solar.R
##   45   1  Ozone  Solar.R
##   46   1  Ozone  Solar.R
##   47   1  Ozone  Solar.R
##   48   1  Ozone  Solar.R
##   49   1  Ozone  Solar.R
##   50   1  Ozone  Solar.R
airquality_mice <- complete(mice_imputed)
print("Датасет airquality после обработки пропусков с mice:")
## [1] "Датасет airquality после обработки пропусков с mice:"
print(head(airquality_mice))
##   Ozone Solar.R Wind Temp Month Day
## 1    41     190  7.4   67     5   1
## 2    36     118  8.0   72     5   2
## 3    12     149 12.6   74     5   3
## 4    18     313 11.5   62     5   4
## 5    14     220 14.3   56     5   5
## 6    28     237 14.9   66     5   6

Задание 8: Пример с мультиколлинеарностью

Пример с мультиколлинеарностью

data(mtcars)
cor_matrix <- cor(mtcars)
print("Корреляционная матрица mtcars:")
## [1] "Корреляционная матрица mtcars:"
print(cor_matrix)
##             mpg        cyl       disp         hp        drat         wt
## mpg   1.0000000 -0.8521620 -0.8475514 -0.7761684  0.68117191 -0.8676594
## cyl  -0.8521620  1.0000000  0.9020329  0.8324475 -0.69993811  0.7824958
## disp -0.8475514  0.9020329  1.0000000  0.7909486 -0.71021393  0.8879799
## hp   -0.7761684  0.8324475  0.7909486  1.0000000 -0.44875912  0.6587479
## drat  0.6811719 -0.6999381 -0.7102139 -0.4487591  1.00000000 -0.7124406
## wt   -0.8676594  0.7824958  0.8879799  0.6587479 -0.71244065  1.0000000
## qsec  0.4186840 -0.5912421 -0.4336979 -0.7082234  0.09120476 -0.1747159
## vs    0.6640389 -0.8108118 -0.7104159 -0.7230967  0.44027846 -0.5549157
## am    0.5998324 -0.5226070 -0.5912270 -0.2432043  0.71271113 -0.6924953
## gear  0.4802848 -0.4926866 -0.5555692 -0.1257043  0.69961013 -0.5832870
## carb -0.5509251  0.5269883  0.3949769  0.7498125 -0.09078980  0.4276059
##             qsec         vs          am       gear        carb
## mpg   0.41868403  0.6640389  0.59983243  0.4802848 -0.55092507
## cyl  -0.59124207 -0.8108118 -0.52260705 -0.4926866  0.52698829
## disp -0.43369788 -0.7104159 -0.59122704 -0.5555692  0.39497686
## hp   -0.70822339 -0.7230967 -0.24320426 -0.1257043  0.74981247
## drat  0.09120476  0.4402785  0.71271113  0.6996101 -0.09078980
## wt   -0.17471588 -0.5549157 -0.69249526 -0.5832870  0.42760594
## qsec  1.00000000  0.7445354 -0.22986086 -0.2126822 -0.65624923
## vs    0.74453544  1.0000000  0.16834512  0.2060233 -0.56960714
## am   -0.22986086  0.1683451  1.00000000  0.7940588  0.05753435
## gear -0.21268223  0.2060233  0.79405876  1.0000000  0.27407284
## carb -0.65624923 -0.5696071  0.05753435  0.2740728  1.00000000

Вывод мультиколлинеарности

library(car)
## Загрузка требуемого пакета: carData
vif(lm(mpg ~ ., data = mtcars))
##       cyl      disp        hp      drat        wt      qsec        vs        am 
## 15.373833 21.620241  9.832037  3.374620 15.164887  7.527958  4.965873  4.648487 
##      gear      carb 
##  5.357452  7.908747