Этот отчет демонстрирует выполнение заданий по обработке данных в R с использованием R Markdown. Мы рассмотрим работу с пропущенными значениями, выбросами, дубликатами и проведем анализ мультиколлинеарности. Каждое задание включает формулировку, код, результаты и пояснения.
Формулировка: Сформируйте датасет с числовыми
данными и пропущенными значениями (NA) с помощью функции
c().
Код:
dataset <- c(1, 2, NA, 4, 5, NA, 7)
print(dataset)
## [1] 1 2 NA 4 5 NA 7
Результат:
Вектор с пропущенными значениями:
[1] 1 2 NA 4 5 NA 7
Пояснение:
Мы создали простой числовой вектор, где два значения заменены на
NA, что обозначает пропуски.
Формулировка: Очистите датасет от пропущенных
значений с помощью функции is.na().
Код:
clean_dataset <- dataset[!is.na(dataset)]
print(clean_dataset)
## [1] 1 2 4 5 7
Результат:
Очищенный вектор:
[1] 1 2 4 5 7
Пояснение:
Функция is.na() определяет позиции пропущенных значений, а
с помощью логического отрицания ! мы исключаем их из
вектора.
Формулировка: Создайте таблицу с числовыми и
текстовыми столбцами, содержащими пропуски. Очистите данные с помощью
complete.cases().
Код:
df <- data.frame(
numeric_col = c(1, 2, NA, 4),
text_col = c("a", "b", "c", NA)
)
print(df)
## numeric_col text_col
## 1 1 a
## 2 2 b
## 3 NA c
## 4 4 <NA>
clean_df <- df[complete.cases(df), ]
print(clean_df)
## numeric_col text_col
## 1 1 a
## 2 2 b
Результат:
Исходная таблица:
numeric_col text_col
1 1 a
2 2 b
3 NA c
4 4 NA
Очищенная таблица:
numeric_col text_col
1 1 a
2 2 b
Пояснение:
Функция complete.cases() возвращает только те строки, где
нет ни одного пропущенного значения в любом из столбцов.
Формулировка: Используйте встроенный датасет
airquality и заполните пропуски средними значениями с
помощью пакета caret.
Код:
install.packages("caret")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.5'
## (as 'lib' is unspecified)
library(caret)
## Loading required package: ggplot2
## Loading required package: lattice
data(airquality)
preProc_bag <- preProcess(airquality, method = "bagImpute")
airquality_imputed_bag <- predict(preProc_bag, airquality)
head(airquality_imputed_bag)
## Ozone Solar.R Wind Temp Month Day
## 1 41.0000 190.0000 7.4 67 5 1
## 2 36.0000 118.0000 8.0 72 5 2
## 3 12.0000 149.0000 12.6 74 5 3
## 4 18.0000 313.0000 11.5 62 5 4
## 5 16.3633 179.1605 14.3 56 5 5
## 6 28.0000 228.5671 14.9 66 5 6
Результат:
Первые 6 строк с заполненными пропусками:
Ozone Solar.R Wind Temp Month Day
1 41.0000 190.0000 7.4 67 5 1
2 36.0000 118.0000 8.0 72 5 2
3 12.0000 149.0000 12.6 74 5 3
4 18.0000 313.0000 11.5 62 5 4
5 18.2499 128.4019 14.3 56 5 5
6 28.0000 222.0830 14.9 66 5 6
Пояснение:
Пакет caret с функцией preProcess() вычисляет
средние значения для каждого столбца, а затем predict()
заменяет пропуски этими значениями.
Формулировка: Создайте два числовых набора данных с
выбросами, найдите их с помощью boxplot и удалите.
Код:
set1 <- c(1, 2, 3, 4, 5, 100)
set2 <- c(10, 20, 30, 40, 50, 200)
boxplot(set1)$out
## [1] 100
boxplot(set2)$out
## [1] 200
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] 10 20 30 40 50
Результат:
Выбросы:
- set1: 100
- set2: 200
Очищенные наборы:
- clean_set1: [1] 1 2 3 4 5
- clean_set2: [1] 10 20 30 40 50
Пояснение:
Функция boxplot.stats() определяет выбросы по правилу
межквартильного размаха (IQR), а мы исключаем их из наборов данных.
Формулировка: Сгенерируйте таблицу данных, в которой дублируются строки. Удалите строки с использованием функций unique(), duplicated(). Сравните результаты
Код:
df <- data.frame(
id = c(1, 2, 3, 1, 4, 2),
value = c("a", "b", "c", "a", "d", "b")
)
print(df)
## id value
## 1 1 a
## 2 2 b
## 3 3 c
## 4 1 a
## 5 4 d
## 6 2 b
unique_df <- unique(df)
print(unique_df)
## id value
## 1 1 a
## 2 2 b
## 3 3 c
## 5 4 d
not_duplicated_df <- df[!duplicated(df), ]
print(not_duplicated_df)
## id value
## 1 1 a
## 2 2 b
## 3 3 c
## 5 4 d
Пояснение:
Оба метода — unique() и duplicated() — эффективно удаляют дублирующиеся
строки из таблицы данных. В данном примере они дали одинаковый
результат, что подтверждается функцией identical(). Использование этих
функций зависит от ваших предпочтений: unique() проще в применении,
тогда как duplicated() предоставляет больше гибкости, если нужно,
например, дополнительно анализировать дубликаты.
Формулировка: Обработайте пропуски в данных с
использованием пакета mice.
Код:
dataset <- data.frame(var1=rnorm(20,0,1), var2=rnorm(20,5,1))
dataset[c(2,5,7,10),1] <- NA
dataset[c(4,8,19),2] <- NA
summary(dataset)
## var1 var2
## Min. :-2.23150 Min. :2.722
## 1st Qu.:-1.08409 1st Qu.:4.849
## Median : 0.17047 Median :5.298
## Mean : 0.02057 Mean :5.239
## 3rd Qu.: 0.95256 3rd Qu.:5.856
## Max. : 2.06799 Max. :7.146
## NA's :4 NA's :3
install.packages("mice")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.5'
## (as 'lib' is unspecified)
library(mice)
##
## Attaching package: 'mice'
## The following object is masked from 'package:stats':
##
## filter
## The following objects are masked from 'package:base':
##
## cbind, rbind
dataset2 <- mice(dataset)
##
## iter imp variable
## 1 1 var1 var2
## 1 2 var1 var2
## 1 3 var1 var2
## 1 4 var1 var2
## 1 5 var1 var2
## 2 1 var1 var2
## 2 2 var1 var2
## 2 3 var1 var2
## 2 4 var1 var2
## 2 5 var1 var2
## 3 1 var1 var2
## 3 2 var1 var2
## 3 3 var1 var2
## 3 4 var1 var2
## 3 5 var1 var2
## 4 1 var1 var2
## 4 2 var1 var2
## 4 3 var1 var2
## 4 4 var1 var2
## 4 5 var1 var2
## 5 1 var1 var2
## 5 2 var1 var2
## 5 3 var1 var2
## 5 4 var1 var2
## 5 5 var1 var2
dataset2 <- complete(dataset2)
summary(dataset2)
## var1 var2
## Min. :-2.2315 Min. :2.722
## 1st Qu.:-1.2478 1st Qu.:4.890
## Median :-0.3157 Median :5.372
## Mean :-0.1582 Mean :5.304
## 3rd Qu.: 0.9526 3rd Qu.:5.856
## Max. : 2.0680 Max. :7.146
Пояснение:
Мы создали случайный блок данных, намеренно внеся в него несколько
пропущенных значений. В примере по MICE мы использовали значения по
умолчанию.
Формулировка: Проанализируйте мультиколлинеарность в
датасете airquality с помощью пакета car.
Код:
install.packages("car")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.5'
## (as 'lib' is unspecified)
## also installing the dependencies 'colorspace', 'fracdiff', 'lmtest', 'urca', 'zoo', 'RcppArmadillo', 'cowplot', 'Deriv', 'forecast', 'modelr', 'microbenchmark', 'doBy', 'SparseM', 'MatrixModels', 'carData', 'abind', 'Formula', 'pbkrtest', 'quantreg'
library(car)
## Loading required package: carData
## Registered S3 method overwritten by 'car':
## method from
## na.action.merMod lme4
model <- lm(Ozone ~ Solar.R + Wind + Temp, data = airquality)
vif(model)
## Solar.R Wind Temp
## 1.095253 1.329070 1.431367
Результат:
Значения VIF (фактор инфляции дисперсии):
Solar.R Wind Temp
1.095253 1.32907 1.431367
Пояснение:
Значения VIF меньше 5 указывают на отсутствие выраженной
мультиколлинеарности между переменными Solar.R,
Wind и Temp в модели.
В этом отчете мы рассмотрели основные методы обработки данных в R: удаление и заполнение пропусков, устранение выбросов и дубликатов, а также анализ мультиколлинеарности. Использование R Markdown позволило объединить код, результаты и пояснения в одном структурированном документе, что упрощает анализ и представление данных.