Введение

Этот отчет показывает ход и результаты выполнения лабораторной работы №4 по дисциплине “Анализ данных”.

Установка компонентов

Установка и импорт необходимых компонентов

options(repos = "https://cran.r-project.org/")
install.packages(c("Rtools", "RANN", "caret", "mice", "car"))
## Устанавливаю пакеты в 'C:/Users/User/AppData/Local/R/win-library/4.4'
## (потому что 'lib' не определено)
## Warning: пакет ''Rtools'' недоступен (for this version of R
## 
## Другая версия этого пакета может быть доступна для Вашей версии R из других источников,
## см. возможные варианты на
## https://cran.r-project.org/doc/manuals/r-patched/R-admin.html#Installing-packages)
## пакет 'RANN' успешно распакован, MD5-суммы проверены
## Warning: не могу удалить прежнюю установку пакета 'RANN'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): проблема с копированием
## C:\Users\User\AppData\Local\R\win-library\4.4\00LOCK\RANN\libs\x64\RANN.dll в
## C:\Users\User\AppData\Local\R\win-library\4.4\RANN\libs\x64\RANN.dll:
## Permission denied
## Warning: восстановлен 'RANN'
## пакет 'caret' успешно распакован, MD5-суммы проверены
## Warning: не могу удалить прежнюю установку пакета 'caret'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): проблема с копированием
## C:\Users\User\AppData\Local\R\win-library\4.4\00LOCK\caret\libs\x64\caret.dll в
## C:\Users\User\AppData\Local\R\win-library\4.4\caret\libs\x64\caret.dll:
## Permission denied
## Warning: восстановлен 'caret'
## пакет 'mice' успешно распакован, MD5-суммы проверены
## Warning: не могу удалить прежнюю установку пакета 'mice'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): проблема с копированием
## C:\Users\User\AppData\Local\R\win-library\4.4\00LOCK\mice\libs\x64\mice.dll в
## C:\Users\User\AppData\Local\R\win-library\4.4\mice\libs\x64\mice.dll:
## Permission denied
## Warning: восстановлен 'mice'
## пакет 'car' успешно распакован, MD5-суммы проверены
## 
## Скачанные бинарные пакеты находятся в
##  C:\Users\User\AppData\Local\Temp\RtmpmE1eWp\downloaded_packages
library(caret)
## Warning: пакет 'caret' был собран под R версии 4.4.3
## Загрузка требуемого пакета: ggplot2
## Загрузка требуемого пакета: lattice
library(mice)
## Warning: пакет 'mice' был собран под R версии 4.4.3
## 
## Присоединяю пакет: 'mice'
## Следующий объект скрыт от 'package:stats':
## 
##     filter
## Следующие объекты скрыты от 'package:base':
## 
##     cbind, rbind
library(car)
## Warning: пакет 'car' был собран под R версии 4.4.3
## Загрузка требуемого пакета: carData
## Warning: пакет 'carData' был собран под R версии 4.4.3

Задание №1

Задание:

Сформируйте свой собственный датасет с помощью функции c (конкатенация), в котором содержатся числовые данные и NA значения.

Выполнение задания:

# Создаем вектор с числами и NA и выводим его
my_data <- c(10, 20, NA, 30, 40, NA, 50)
print(my_data)
## [1] 10 20 NA 30 40 NA 50

Задание №2

Задание:

Проведите очистку данных с использованием функции is.na() И выведите “чистый” датасет.

Выполнение задания:

# Проверяем, где находятся NA, создавая вектор с логическими данными и выводим
# его, после удаляем все NA и выводим измененный вектор
na_positions <- is.na(my_data)
print(na_positions)
## [1] FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE
clean_data <- my_data[!na_positions]
print(clean_data)
## [1] 10 20 30 40 50

Задание №3

Задание:

Сгенерируйте таблицу данных с числовыми и текстовые столбцами (аналогично с помощью функции c). Очистите данные с помощью функции complete.cases().

Выполнение задания:

# Создаем таблицу данных с NA среди них, выводим ее, очищаем данные с помощью
# complete.cases()
my_table <- data.frame(
  numbers = c(1, 2, NA, 4, 5),
  text = c("A", "B", "C", NA, "E")
)
print(my_table)
##   numbers text
## 1       1    A
## 2       2    B
## 3      NA    C
## 4       4 <NA>
## 5       5    E
clean_table <- my_table[complete.cases(my_table), ]
print(clean_table)
##   numbers text
## 1       1    A
## 2       2    B
## 5       5    E

Задание №4

Задание:

Проанализируйте датасет airquality с пропусками из пакета caret. С использованием функции preProcess из пакета caret заполните пропуски предсказанными значениями (среднее, медиана).

Выполнение задания:

# Загружаем датасет, выводим его первые 6 строк, проверяем количество NA,
# используем preProcess для заполнения NA средними, а после медианными 
# значениями, проверяем, что NA больше нет, выведя количество NA, сравним методы
data(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
print(colSums(is.na(airquality)))
##   Ozone Solar.R    Wind    Temp   Month     Day 
##      37       7       0       0       0       0
preproc_mean <- preProcess(airquality, method = c("center", "scale", "knnImpute"))
airquality_mean <- predict(preproc_mean, airquality)
print(head(airquality_mean))
##         Ozone      Solar.R       Wind       Temp     Month       Day
## 1 -0.03423409  0.045176154 -0.7259482 -1.1497140 -1.407294 -1.670019
## 2 -0.18580489 -0.754304874 -0.5556388 -0.6214670 -1.407294 -1.557210
## 3 -0.91334473 -0.410083876  0.7500660 -0.4101682 -1.407294 -1.444401
## 4 -0.73145977  1.410956244  0.4378323 -1.6779609 -1.407294 -1.331592
## 5 -0.81027658 -0.221317522  1.2326091 -2.3118573 -1.407294 -1.218782
## 6 -0.42831817  0.007422883  1.4029185 -1.2553634 -1.407294 -1.105973
print(colSums(is.na(airquality_mean)))
##   Ozone Solar.R    Wind    Temp   Month     Day 
##       0       0       0       0       0       0
preproc_median <- preProcess(airquality, method = c("center", "scale", "medianImpute"))
airquality_median <- predict(preproc_median, airquality)
print(head(airquality_median))
##         Ozone     Solar.R       Wind       Temp     Month       Day
## 1 -0.03423409  0.04517615 -0.7259482 -1.1497140 -1.407294 -1.670019
## 2 -0.18580489 -0.75430487 -0.5556388 -0.6214670 -1.407294 -1.557210
## 3 -0.91334473 -0.41008388  0.7500660 -0.4101682 -1.407294 -1.444401
## 4 -0.73145977  1.41095624  0.4378323 -1.6779609 -1.407294 -1.331592
## 5 -0.32221861  0.21173470  1.2326091 -2.3118573 -1.407294 -1.218782
## 6 -0.42831817  0.21173470  1.4029185 -1.2553634 -1.407294 -1.105973
print(colSums(is.na(airquality_median)))
##   Ozone Solar.R    Wind    Temp   Month     Day 
##       0       0       0       0       0       0

Задание №5

Задание:

Сгенерируйте два числовых набора данных и добавьте в них выбросы. С использованием функции boxplot обнаружьте выбросы и удалить их.

Выполнение задания:

# Создаем два набора данных с выбросами (100 и 500 выбросы), визуализируем
# выбросы с помощью boxplot, затем удаляем выбросы и выводим результат
set1 <- c(1, 2, 3, 4, 100)
set2 <- c(10, 20, 30, 40, 500)
boxplot(set1, main = "Set 1")

boxplot(set2, main = "Set 2")

clean_set1 <- set1[!set1 %in% boxplot.stats(set1)$out]
clean_set2 <- set2[!set2 %in% boxplot.stats(set2)$out]
print(clean_set1)
## [1] 1 2 3 4
print(clean_set2)
## [1] 10 20 30 40

Задание №6

Задание:

Сгенерируйте таблицу данных, в которой дублируются строки. Удалите строки с использованием функций unique(), duplicated(). Сравните результаты.

Выполнение задания:

# Создаем таблицу с дубликатами, удаляем дубликаты с unique(), удаляем дубликаты
# с duplicated(), выводим промежуточные и конечные результаты
dup_table <- data.frame(
  col1 = c(1, 2, 1, 3, 2),
  col2 = c("A", "B", "A", "C", "B")
)
print(dup_table)
##   col1 col2
## 1    1    A
## 2    2    B
## 3    1    A
## 4    3    C
## 5    2    B
unique_table <- unique(dup_table)
print(unique_table)
##   col1 col2
## 1    1    A
## 2    2    B
## 4    3    C
no_dup_table <- dup_table[!duplicated(dup_table), ]
print(no_dup_table)
##   col1 col2
## 1    1    A
## 2    2    B
## 4    3    C

Задание №7

Задание:

Обработайте пропуски в данных с использованием пакета mice.

Выполнение задания:

# Применяем mice к airquality
imp <- mice(airquality, m = 1, maxit = 5, method = "pmm", 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
airquality_mice <- complete(imp)
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     137 14.3   56     5   5
## 6    28     191 14.9   66     5   6
print(colSums(is.na(airquality_mice)))
##   Ozone Solar.R    Wind    Temp   Month     Day 
##       0       0       0       0       0       0

Задание №8

Задание:

Разберите пример с мультиколлинеарностью.

Выполнение задания:

# Создаем данные с мультиколлинеарностью (x2 сильно коррелирует с x1), проверим
# корреляцию, линейная регрессия, вычислим VIF (фактор инфляции дисперсии)
set.seed(123)
x1 <- rnorm(100)
x2 <- x1 * 2 + rnorm(100, 0, 0.1)
y <- 3 * x1 + 2 * x2 + rnorm(100)
data_mc <- data.frame(y, x1, x2)
cor_matrix <- cor(data_mc)
print(cor_matrix)
##            y        x1        x2
## y  1.0000000 0.9882897 0.9887106
## x1 0.9882897 1.0000000 0.9985963
## x2 0.9887106 0.9985963 1.0000000
model <- lm(y ~ x1 + x2, data = data_mc)
summary(model)
## 
## Call:
## lm(formula = y ~ x1 + x2, data = data_mc)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -1.8730 -0.6607 -0.1245  0.6214  2.0798 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)  
## (Intercept)  0.13507    0.09614   1.405    0.163  
## x1           2.39060    1.97748   1.209    0.230  
## x2           2.23811    0.98995   2.261    0.026 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.9513 on 97 degrees of freedom
## Multiple R-squared:  0.9779, Adjusted R-squared:  0.9774 
## F-statistic:  2144 on 2 and 97 DF,  p-value: < 2.2e-16
library(car)
vif(model)
##       x1       x2 
## 356.4434 356.4434

Задание №9

Задание:

Всю представленную работу собрать в единый отчет с формулирвкой задания, кодом (листингом) и скриншотами выполнения.

Выполнение задания:

Как можно заметить это как раз таки и есть файл .Rmd и он опубликован на RPubs, в нем содержатся все формулировки и реализации заданий, а также вывод к ним, соответственно задание выполнено.

Вывод по лабораторной работе

В результате выполнения данной лабораторной работы были закреплены навыки в работе с раздличными пакетами на языке R. Также были изучены основы анализа данных при помощи данных из наборов пакетов языка R и основы предварительной подготовки данных при анализе данных.