Это отчет для лабораторной работы №4 по дисциплине “Анализ данных”.
options(repos = "https://cran.r-project.org/")
install.packages(c("Rtools", "RANN", "caret", "mice", "car"))
## Устанавливаю пакеты в 'C:/Users/79166/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)
## устанавливаю также зависимости 'bit', 'prettyunits', 'bit64', 'progress', 'ucminf', 'clipr', 'crayon', 'vroom', 'rbibutils', 'ordinal', 'forcats', 'hms', 'readr', 'cowplot', 'Deriv', 'modelr', 'microbenchmark', 'Rdpack', 'backports', 'pan', 'jomo', 'haven', 'doBy', 'SparseM', 'MatrixModels', 'minqa', 'nloptr', 'reformulas', 'broom', 'glmnet', 'mitml', 'carData', 'abind', 'Formula', 'pbkrtest', 'quantreg', 'lme4'
##
## В наличии есть бинарные версии, но исходники новее:
## binary source needs_compilation
## MatrixModels 0.5-3 0.5-4 FALSE
## lme4 1.1-36 1.1-37 TRUE
##
## Binaries will be installed
## пакет 'bit' успешно распакован, MD5-суммы проверены
## пакет 'prettyunits' успешно распакован, MD5-суммы проверены
## пакет 'bit64' успешно распакован, MD5-суммы проверены
## пакет 'progress' успешно распакован, MD5-суммы проверены
## пакет 'ucminf' успешно распакован, MD5-суммы проверены
## пакет 'clipr' успешно распакован, MD5-суммы проверены
## пакет 'crayon' успешно распакован, MD5-суммы проверены
## пакет 'vroom' успешно распакован, MD5-суммы проверены
## пакет 'rbibutils' успешно распакован, MD5-суммы проверены
## пакет 'ordinal' успешно распакован, MD5-суммы проверены
## пакет 'forcats' успешно распакован, MD5-суммы проверены
## пакет 'hms' успешно распакован, MD5-суммы проверены
## пакет 'readr' успешно распакован, MD5-суммы проверены
## пакет 'cowplot' успешно распакован, MD5-суммы проверены
## пакет 'Deriv' успешно распакован, MD5-суммы проверены
## пакет 'modelr' успешно распакован, MD5-суммы проверены
## пакет 'microbenchmark' успешно распакован, MD5-суммы проверены
## пакет 'Rdpack' успешно распакован, MD5-суммы проверены
## пакет 'backports' успешно распакован, MD5-суммы проверены
## пакет 'pan' успешно распакован, MD5-суммы проверены
## пакет 'jomo' успешно распакован, MD5-суммы проверены
## пакет 'haven' успешно распакован, MD5-суммы проверены
## пакет 'doBy' успешно распакован, MD5-суммы проверены
## пакет 'SparseM' успешно распакован, MD5-суммы проверены
## пакет 'minqa' успешно распакован, MD5-суммы проверены
## пакет 'nloptr' успешно распакован, MD5-суммы проверены
## пакет 'reformulas' успешно распакован, MD5-суммы проверены
## пакет 'broom' успешно распакован, MD5-суммы проверены
## пакет 'glmnet' успешно распакован, MD5-суммы проверены
## пакет 'mitml' успешно распакован, MD5-суммы проверены
## пакет 'carData' успешно распакован, MD5-суммы проверены
## пакет 'abind' успешно распакован, MD5-суммы проверены
## пакет 'Formula' успешно распакован, MD5-суммы проверены
## пакет 'pbkrtest' успешно распакован, MD5-суммы проверены
## пакет 'quantreg' успешно распакован, MD5-суммы проверены
## пакет 'lme4' успешно распакован, MD5-суммы проверены
## пакет 'RANN' успешно распакован, MD5-суммы проверены
## пакет 'caret' успешно распакован, MD5-суммы проверены
## пакет 'mice' успешно распакован, MD5-суммы проверены
## пакет 'car' успешно распакован, MD5-суммы проверены
##
## Скачанные бинарные пакеты находятся в
## C:\Users\79166\AppData\Local\Temp\RtmpUn6gx8\downloaded_packages
## устанавливаю пакет 'MatrixModels' из исходников
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
Сформируйте свой собственный датасет с помощью функции c (конкатенация), в котором содержатся числовые данные и NA значения.
# Создаем вектор с числам и пропусками
my_data <- c(10, 15, NA, 25, 30, NA, 40, NA, NA)
print(my_data)
## [1] 10 15 NA 25 30 NA 40 NA NA
Проведите очистку данных с использованием функции is.na() И выведите “чистый” датасет.
# Проверяем, где находятся NA, создавая вектор с логическими данными, выведем его, после удаляем все NA и выведем измененный вектор.
na_positions <- is.na(my_data)
print(na_positions)
## [1] FALSE FALSE TRUE FALSE FALSE TRUE FALSE TRUE TRUE
clean_data <- my_data[!na_positions]
print(clean_data)
## [1] 10 15 25 30 40
Сгенерируйте таблицу данных с числовыми и текстовые столбцами (аналогично с помощью функции c). Очистите данные с помощью функции complete.cases().
# Создаем таблицу данных с NA среди них, выведем ее, очистим данные с помощью complete.cases()
my_table <- data.frame(
numbers = c(1, 3, NA, 3, 7),
text = c("X", "Y", "NA", NA, "X")
)
print(my_table)
## numbers text
## 1 1 X
## 2 3 Y
## 3 NA NA
## 4 3 <NA>
## 5 7 X
clean_table <- my_table[complete.cases(my_table), ]
print(clean_table)
## numbers text
## 1 1 X
## 2 3 Y
## 5 7 X
Проанализируйте датасет airquality с пропусками из пакета caret. С использованием функции preProcess из пакета caret заполните пропуски предсказанными значениями (среднее, медиана).
# Загружаем датасет, проверяем количество NA, используем preProcess для заполнения 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
Сгенерируйте два числовых набора данных и добавьте в них выбросы. С использованием функции boxplot обнаружьте выбросы и удалим их.
# Создаем два набора данных с выбросами, визуализируем выбросы с помощью boxplot, затем удаляем выбросы.
set1 <- c(1, 2, 3, 4, 5, 100)
set2 <- c(-1, 2, -3, 4, -660)
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 5
print(clean_set2)
## [1] -1 2 -3 4
Сгенерируйте таблицу данных, в которой дублируются строки. Удалите строки с использованием функций unique(), duplicated(). Сравните результаты.
# Создаем таблицу с дубликатами, удаляем дубликаты с unique() и duplicated().
dup_table <- data.frame(
col1 = c(22, 8, 1, 33, 8),
col2 = c("A", "B", "C", "D", "B")
)
print(dup_table)
## col1 col2
## 1 22 A
## 2 8 B
## 3 1 C
## 4 33 D
## 5 8 B
unique_table <- unique(dup_table)
print(unique_table)
## col1 col2
## 1 22 A
## 2 8 B
## 3 1 C
## 4 33 D
no_dup_table <- dup_table[!duplicated(dup_table), ]
print(no_dup_table)
## col1 col2
## 1 22 A
## 2 8 B
## 3 1 C
## 4 33 D
Обработайте пропуски в данных с использованием пакета 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
Разберите пример с мультиколлинеарностью.
# Создаем данные с мультиколлинеарностью, проверим корреляцию, линейная регрессия, вычислим VIF (фактор инфляции дисперсии)
set.seed(123)
x1 <- rnorm(50)
x2 <- x1 * 2 + rnorm(50, 0, 0.1)
y <- x1 + 2 * x2 + rnorm(50)
data_mc <- data.frame(y, x1, x2)
cor_matrix <- cor(data_mc)
print(cor_matrix)
## y x1 x2
## y 1.0000000 0.9786334 0.9777459
## x1 0.9786334 1.0000000 0.9988040
## x2 0.9777459 0.9988040 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.88137 -0.74056 -0.06374 0.52516 2.27045
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.2299 0.1431 -1.607 0.115
## x1 4.4173 3.1479 1.403 0.167
## x2 0.3039 1.5748 0.193 0.848
##
## Residual standard error: 0.9975 on 47 degrees of freedom
## Multiple R-squared: 0.9578, Adjusted R-squared: 0.956
## F-statistic: 532.8 on 2 and 47 DF, p-value: < 2.2e-16
library(car)
vif(model)
## x1 x2
## 418.3189 418.3189
Всю представленную работу собрать в единый отчет с формулирвкой задания, кодом (листингом) и скриншотами выполнения.
Если вы это читаете, значит это задание выполнено. Этот файл опубликован на RPubs, в нем содержатся все формулировки и реализации заданий, а также вывод к ним.
В результате выполнения данной лабораторной работы были закреплены навыки в работе с раздличными пакетами на языке R. Также были изучены основы анализа данных при помощи данных из наборов пакетов языка R и основы предварительной подготовки данных при анализе данных.