## Подключение библиотек, загрузка файлов
#Для выполнения задания, необходимо подключить следующие пакеты:
library(caret)
## Загрузка требуемого пакета: ggplot2
## Загрузка требуемого пакета: lattice
library(ggplot2)
library(lattice)
library(mice)
##
## Присоединяю пакет: 'mice'
## Следующий объект скрыт от 'package:stats':
##
## filter
## Следующие объекты скрыты от 'package:base':
##
## cbind, rbind
#Указываем путь
setwd("C:/Users/79881/Documents")
#Задание 1:Задание 1. Очистить данные с использованием функции is.na()
vec1<-c(1:5,NA,NA,19)
clearvec1<-is.na(vec1)
vec1[!clearvec1]
## [1] 1 2 3 4 5 19
#Задание 2. Сгенерировать таблицу данных с числовыми и текстовые столбцами. Очистить данные с помощью функции complete.cases()
tab1<- c("a", "b", NA, "d", NA, "f","d","e","NA")
tab2<-c(1,6,NA,14,NA,NA,NA,29,31)
perfect <- complete.cases(tab1, tab2)
perfect
## [1] TRUE TRUE FALSE TRUE FALSE FALSE FALSE TRUE TRUE
tab1[perfect]
## [1] "a" "b" "d" "e" "NA"
tab2[perfect]
## [1] 1 6 14 29 31
#Задание 3. Сгенерировать числовую таблицу данных с пропусками. С использованием функции preProcess из пакета caret заполнить пропуски предсказанными значениями (среднее,медиана)
# Для выполнения данного задания, нужен пакет caret и какой-нибудь набор данных, к примеру, встроенный набор данных air quality
library(caret)
str(airquality)
## 'data.frame': 153 obs. of 6 variables:
## $ Ozone : int 41 36 12 18 NA 28 23 19 8 NA ...
## $ Solar.R: int 190 118 149 313 NA NA 299 99 19 194 ...
## $ Wind : num 7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ...
## $ Temp : int 67 72 74 62 56 66 65 59 61 69 ...
## $ Month : int 5 5 5 5 5 5 5 5 5 5 ...
## $ Day : int 1 2 3 4 5 6 7 8 9 10 ...
#'data.frame': 153 obs. of 6 variables:
#$ Ozone : int 41 36 12 18 NA 28 23 19 8 NA ...
#$ Solar.R: int 190 118 149 313 NA NA 299 99 19 194 ...
#$ Wind : num 7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ...
#$ Temp : int 67 72 74 62 56 66 65 59 61 69 ...
#$ Month : int 5 5 5 5 5 5 5 5 5 5 ...
#$ Day : int 1 2 3 4 5 6 7 8 9 10 ...
PrePro <- preProcess(airquality, method = 'medianImpute')
aird <- predict(PrePro, airquality)
aird
## 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
## 7 23.0 299 8.6 65 5 7
## 8 19.0 99 13.8 59 5 8
## 9 8.0 19 20.1 61 5 9
## 10 31.5 194 8.6 69 5 10
## 11 7.0 205 6.9 74 5 11
## 12 16.0 256 9.7 69 5 12
## 13 11.0 290 9.2 66 5 13
## 14 14.0 274 10.9 68 5 14
## 15 18.0 65 13.2 58 5 15
## 16 14.0 334 11.5 64 5 16
## 17 34.0 307 12.0 66 5 17
## 18 6.0 78 18.4 57 5 18
## 19 30.0 322 11.5 68 5 19
## 20 11.0 44 9.7 62 5 20
## 21 1.0 8 9.7 59 5 21
## 22 11.0 320 16.6 73 5 22
## 23 4.0 25 9.7 61 5 23
## 24 32.0 92 12.0 61 5 24
## 25 31.5 66 16.6 57 5 25
## 26 31.5 266 14.9 58 5 26
## 27 31.5 205 8.0 57 5 27
## 28 23.0 13 12.0 67 5 28
## 29 45.0 252 14.9 81 5 29
## 30 115.0 223 5.7 79 5 30
## 31 37.0 279 7.4 76 5 31
## 32 31.5 286 8.6 78 6 1
## 33 31.5 287 9.7 74 6 2
## 34 31.5 242 16.1 67 6 3
## 35 31.5 186 9.2 84 6 4
## 36 31.5 220 8.6 85 6 5
## 37 31.5 264 14.3 79 6 6
## 38 29.0 127 9.7 82 6 7
## 39 31.5 273 6.9 87 6 8
## 40 71.0 291 13.8 90 6 9
## 41 39.0 323 11.5 87 6 10
## 42 31.5 259 10.9 93 6 11
## 43 31.5 250 9.2 92 6 12
## 44 23.0 148 8.0 82 6 13
## 45 31.5 332 13.8 80 6 14
## 46 31.5 322 11.5 79 6 15
## 47 21.0 191 14.9 77 6 16
## 48 37.0 284 20.7 72 6 17
## 49 20.0 37 9.2 65 6 18
## 50 12.0 120 11.5 73 6 19
## 51 13.0 137 10.3 76 6 20
## 52 31.5 150 6.3 77 6 21
## 53 31.5 59 1.7 76 6 22
## 54 31.5 91 4.6 76 6 23
## 55 31.5 250 6.3 76 6 24
## 56 31.5 135 8.0 75 6 25
## 57 31.5 127 8.0 78 6 26
## 58 31.5 47 10.3 73 6 27
## 59 31.5 98 11.5 80 6 28
## 60 31.5 31 14.9 77 6 29
## 61 31.5 138 8.0 83 6 30
## 62 135.0 269 4.1 84 7 1
## 63 49.0 248 9.2 85 7 2
## 64 32.0 236 9.2 81 7 3
## 65 31.5 101 10.9 84 7 4
## 66 64.0 175 4.6 83 7 5
## 67 40.0 314 10.9 83 7 6
## 68 77.0 276 5.1 88 7 7
## 69 97.0 267 6.3 92 7 8
## 70 97.0 272 5.7 92 7 9
## 71 85.0 175 7.4 89 7 10
## 72 31.5 139 8.6 82 7 11
## 73 10.0 264 14.3 73 7 12
## 74 27.0 175 14.9 81 7 13
## 75 31.5 291 14.9 91 7 14
## 76 7.0 48 14.3 80 7 15
## 77 48.0 260 6.9 81 7 16
## 78 35.0 274 10.3 82 7 17
## 79 61.0 285 6.3 84 7 18
## 80 79.0 187 5.1 87 7 19
## 81 63.0 220 11.5 85 7 20
## 82 16.0 7 6.9 74 7 21
## 83 31.5 258 9.7 81 7 22
## 84 31.5 295 11.5 82 7 23
## 85 80.0 294 8.6 86 7 24
## 86 108.0 223 8.0 85 7 25
## 87 20.0 81 8.6 82 7 26
## 88 52.0 82 12.0 86 7 27
## 89 82.0 213 7.4 88 7 28
## 90 50.0 275 7.4 86 7 29
## 91 64.0 253 7.4 83 7 30
## 92 59.0 254 9.2 81 7 31
## 93 39.0 83 6.9 81 8 1
## 94 9.0 24 13.8 81 8 2
## 95 16.0 77 7.4 82 8 3
## 96 78.0 205 6.9 86 8 4
## 97 35.0 205 7.4 85 8 5
## 98 66.0 205 4.6 87 8 6
## 99 122.0 255 4.0 89 8 7
## 100 89.0 229 10.3 90 8 8
## 101 110.0 207 8.0 90 8 9
## 102 31.5 222 8.6 92 8 10
## 103 31.5 137 11.5 86 8 11
## 104 44.0 192 11.5 86 8 12
## 105 28.0 273 11.5 82 8 13
## 106 65.0 157 9.7 80 8 14
## 107 31.5 64 11.5 79 8 15
## 108 22.0 71 10.3 77 8 16
## 109 59.0 51 6.3 79 8 17
## 110 23.0 115 7.4 76 8 18
## 111 31.0 244 10.9 78 8 19
## 112 44.0 190 10.3 78 8 20
## 113 21.0 259 15.5 77 8 21
## 114 9.0 36 14.3 72 8 22
## 115 31.5 255 12.6 75 8 23
## 116 45.0 212 9.7 79 8 24
## 117 168.0 238 3.4 81 8 25
## 118 73.0 215 8.0 86 8 26
## 119 31.5 153 5.7 88 8 27
## 120 76.0 203 9.7 97 8 28
## 121 118.0 225 2.3 94 8 29
## 122 84.0 237 6.3 96 8 30
## 123 85.0 188 6.3 94 8 31
## 124 96.0 167 6.9 91 9 1
## 125 78.0 197 5.1 92 9 2
## 126 73.0 183 2.8 93 9 3
## 127 91.0 189 4.6 93 9 4
## 128 47.0 95 7.4 87 9 5
## 129 32.0 92 15.5 84 9 6
## 130 20.0 252 10.9 80 9 7
## 131 23.0 220 10.3 78 9 8
## 132 21.0 230 10.9 75 9 9
## 133 24.0 259 9.7 73 9 10
## 134 44.0 236 14.9 81 9 11
## 135 21.0 259 15.5 76 9 12
## 136 28.0 238 6.3 77 9 13
## 137 9.0 24 10.9 71 9 14
## 138 13.0 112 11.5 71 9 15
## 139 46.0 237 6.9 78 9 16
## 140 18.0 224 13.8 67 9 17
## 141 13.0 27 10.3 76 9 18
## 142 24.0 238 10.3 68 9 19
## 143 16.0 201 8.0 82 9 20
## 144 13.0 238 12.6 64 9 21
## 145 23.0 14 9.2 71 9 22
## 146 36.0 139 10.3 81 9 23
## 147 7.0 49 10.3 69 9 24
## 148 14.0 20 16.6 63 9 25
## 149 30.0 193 6.9 70 9 26
## 150 31.5 145 13.2 77 9 27
## 151 14.0 191 14.3 75 9 28
## 152 18.0 131 8.0 76 9 29
## 153 20.0 223 11.5 68 9 30
#Задание 4. Сгенерировать два числовых набора данных, добавить в них выбросы. С использованием функции boxplot обнаружить выбросы и удалить их.
# Для выполнения данного задания, будем использовать предлагаемый набор данных mtcars
# Сначало добавим выбросы в датафрейм.
str(mtcars)
## 'data.frame': 32 obs. of 11 variables:
## $ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
## $ cyl : num 6 6 4 6 8 6 8 4 4 6 ...
## $ disp: num 160 160 108 258 360 ...
## $ hp : num 110 110 93 110 175 105 245 62 95 123 ...
## $ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
## $ wt : num 2.62 2.88 2.32 3.21 3.44 ...
## $ qsec: num 16.5 17 18.6 19.4 17 ...
## $ vs : num 0 0 1 1 0 1 0 1 1 1 ...
## $ am : num 1 1 1 0 0 0 0 0 0 0 ...
## $ gear: num 4 4 4 3 3 3 3 4 4 4 ...
## $ carb: num 4 4 1 1 2 1 4 2 2 4 ...
cars1 <- cars[1:20,]
dizinfo <- data.frame(speed=c(15:20), dist=c(160:165))
cars2 <- rbind(cars1,dizinfo)
#Обозначим рисунок 1 - значения, включающие выбросы
par(mfrow=c(1, 2))
plot(cars2$speed, cars2$dist, xlim=c(0, 30), ylim=c(0, 200), main="С выбросами", xlab="Скорость", ylab="Дистанция", pch=".", col="red", cex=3)
abline(lm(dist ~ speed, data=cars2), col="blue", lwd=3, lty=2)
# Теперь обозначим рисунок 2 - значения, НЕ включающие выбросы
plot(cars1$speed, cars1$dist, xlim=c(0, 30), ylim=c(0, 200), main="Без выбросов", xlab="Скорость", ylab="Дистанция", pch=".", col="red", cex=3)
abline(lm(dist ~ speed, data=cars1), col="blue", lwd=3, lty=2)

#Задание 5. Сгенерируйте таблицу данных, в которой дублируются строки. Удалите строки с использованием функций unique(), duplicated(). Сравните результаты
#1) Сформируем таблицу данных
x <- c(rep(4,6),rep(1,9),rep(-2,4))
y <- c(rep(2,9),rep(2,8),rep(-9,2))
also <- data.frame(x,y)
duplicated(also)
## [1] FALSE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE
## [13] TRUE TRUE TRUE FALSE TRUE FALSE TRUE
# теперь попробуем разные вариации задания
also[duplicated(also),]
## x y
## 2 4 2
## 3 4 2
## 4 4 2
## 5 4 2
## 6 4 2
## 8 1 2
## 9 1 2
## 10 1 2
## 11 1 2
## 12 1 2
## 13 1 2
## 14 1 2
## 15 1 2
## 17 -2 2
## 19 -2 -9
unique(also)
## x y
## 1 4 2
## 7 1 2
## 16 -2 2
## 18 -2 -9
unique(!also)
## x y
## [1,] FALSE FALSE
also[!duplicated(also),]
## x y
## 1 4 2
## 7 1 2
## 16 -2 2
## 18 -2 -9
#Задание 6.Обработать пропуски в данных с использованием пакета mice.
library(mice)
# Для выполнения этого задания будем использовать уже имеющийся набор данных - air quality.
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
df <- airquality
df1<- mice(df)
##
## iter imp variable
## 1 1 Ozone Solar.R
## 1 2 Ozone Solar.R
## 1 3 Ozone Solar.R
## 1 4 Ozone Solar.R
## 1 5 Ozone Solar.R
## 2 1 Ozone Solar.R
## 2 2 Ozone Solar.R
## 2 3 Ozone Solar.R
## 2 4 Ozone Solar.R
## 2 5 Ozone Solar.R
## 3 1 Ozone Solar.R
## 3 2 Ozone Solar.R
## 3 3 Ozone Solar.R
## 3 4 Ozone Solar.R
## 3 5 Ozone Solar.R
## 4 1 Ozone Solar.R
## 4 2 Ozone Solar.R
## 4 3 Ozone Solar.R
## 4 4 Ozone Solar.R
## 4 5 Ozone Solar.R
## 5 1 Ozone Solar.R
## 5 2 Ozone Solar.R
## 5 3 Ozone Solar.R
## 5 4 Ozone Solar.R
## 5 5 Ozone Solar.R
#Теперь, когда мы имеем разобранный пресет данных, попробуем его собрать обратно.
df1<- complete(df1)
summary(df1)
## Ozone Solar.R Wind Temp
## Min. : 1.00 Min. : 7.0 Min. : 1.700 Min. :56.00
## 1st Qu.: 18.00 1st Qu.:115.0 1st Qu.: 7.400 1st Qu.:72.00
## Median : 30.00 Median :197.0 Median : 9.700 Median :79.00
## Mean : 41.03 Mean :185.1 Mean : 9.958 Mean :77.88
## 3rd Qu.: 59.00 3rd Qu.:258.0 3rd Qu.:11.500 3rd Qu.:85.00
## Max. :168.00 Max. :334.0 Max. :20.700 Max. :97.00
## Month Day
## Min. :5.000 Min. : 1.0
## 1st Qu.:6.000 1st Qu.: 8.0
## Median :7.000 Median :16.0
## Mean :6.993 Mean :15.8
## 3rd Qu.:8.000 3rd Qu.:23.0
## Max. :9.000 Max. :31.0
#Задание 7. Разобрать пример с мультиколлинеарностью.
#1) Сформируем таблицу данных
z <- c(rep(1,6),rep(1,4),rep(-3,4))
v <- c(rep(2,9),rep(2,2),rep(-9,3))
buba <- data.frame(z,v)
duplicated(buba)
## [1] FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE
## [13] TRUE TRUE
# теперь мультиколлинеарность
buba[duplicated(buba),]
## z v
## 2 1 2
## 3 1 2
## 4 1 2
## 5 1 2
## 6 1 2
## 7 1 2
## 8 1 2
## 9 1 2
## 10 1 2
## 13 -3 -9
## 14 -3 -9
buba[!duplicated(buba),]
## z v
## 1 1 2
## 11 -3 2
## 12 -3 -9