##Отчет по лабораторной работе №4. Способы подготовки исходных данных
###Установка пакетов
options(repos = "https://cran.r-project.org/")
install.packages(c("Rtools", "RANN", "caret", "mice", "car"))
## Устанавливаю пакеты в 'C:/Users/DBystrova/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\DBystrova\AppData\Local\R\win-library\4.4\00LOCK\RANN\libs\x64\RANN.dll
## в C:\Users\DBystrova\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\DBystrova\AppData\Local\R\win-library\4.4\00LOCK\caret\libs\x64\caret.dll
## в C:\Users\DBystrova\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\DBystrova\AppData\Local\R\win-library\4.4\00LOCK\mice\libs\x64\mice.dll
## в C:\Users\DBystrova\AppData\Local\R\win-library\4.4\mice\libs\x64\mice.dll:
## Permission denied
## Warning: восстановлен 'mice'
## пакет 'car' успешно распакован, MD5-суммы проверены
##
## Скачанные бинарные пакеты находятся в
## C:\Users\DBystrova\AppData\Local\Temp\RtmpekwB9X\downloaded_packages
library(caret)
## Загрузка требуемого пакета: ggplot2
## Загрузка требуемого пакета: lattice
library(mice)
##
## Присоединяю пакет: 'mice'
## Следующий объект скрыт от 'package:stats':
##
## filter
## Следующие объекты скрыты от 'package:base':
##
## cbind, rbind
library(car)
## Загрузка требуемого пакета: carData
##Задание №1
###Сформируйте свой собственный датасет с помощью функции c (конкатенация), в котором содержатся числовые данные и NA значения.
my_data <- c(5, 10, NA, 12, 17, NA, 25, NA, NA)
print(my_data)
## [1] 5 10 NA 12 17 NA 25 NA NA
##Задание №2
###Проведите очистку данных с использованием функции is.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] 5 10 12 17 25
##Задание №3
###Сгенерируйте таблицу данных с числовыми и текстовые столбцами (аналогично с помощью функции c). Очистите данные с помощью функции complete.cases().
my_table <- data.frame(
numbers = c(3, 9, NA, 5, 8),
text = c("A", "B", "NA", NA, "C")
)
print(my_table)
## numbers text
## 1 3 A
## 2 9 B
## 3 NA NA
## 4 5 <NA>
## 5 8 C
clean_table <- my_table[complete.cases(my_table), ]
print(clean_table)
## numbers text
## 1 3 A
## 2 9 B
## 5 8 C
##Задание №4
###Проанализируйте датасет airquality с пропусками из пакета caret. С использованием функции preProcess из пакета caret заполните пропуски предсказанными значениями (среднее, медиана).
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 обнаружьте выбросы и удалим их.
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
##Задание №6
###Сгенерируйте таблицу данных, в которой дублируются строки. Удалите строки с использованием функций unique(), duplicated(). Сравните результаты.
dup_table <- data.frame(
col1 = c(5, 10, 15, 15, 5),
col2 = c("A", "B", "C", "C", "D")
)
print(dup_table)
## col1 col2
## 1 5 A
## 2 10 B
## 3 15 C
## 4 15 C
## 5 5 D
unique_table <- unique(dup_table)
print(unique_table)
## col1 col2
## 1 5 A
## 2 10 B
## 3 15 C
## 5 5 D
no_dup_table <- dup_table[!duplicated(dup_table), ]
print(no_dup_table)
## col1 col2
## 1 5 A
## 2 10 B
## 3 15 C
## 5 5 D
##Задание №7
###Обработайте пропуски в данных с использованием пакета mice.
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
###Разберите пример с мультиколлинеарностью.
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
##Задание №9
###Всю представленную работу собрать в единый отчет с формулирвкой задания, кодом (листингом) и скриншотами выполнения.
###Если вы это читаете, значит это задание выполнено. Этот файл опубликован на RPubs, в нем содержатся все формулировки и реализации заданий, а также вывод к ним.