Добавил:
По своей натуре перфекционист. Поэтому люблю все аккуратно оформлять и упорядочивать, складывать по полочкам. Вот, не пропадать же добру, нажитому за четыре кропотливых семестра. Тут я выложил все мои ответы, курсовые, отчеты и некоторые ДЗ. Они могут вам помочь для получения зачета или сдачи экзамена. Если чего-то не нашли в папочках, то попытайте удачу в разделе НЕОТСОРТИРОВАННОЕ на моей страничке, там все 4 семестра разложены по папкам. ГРУППА КТ-43-15. Годы обучения 2015-2019. Коллекция будет пополняться. Что ж, удачки :З Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Язык R Отчет (Скворцов) / Анализ данных на языке R

.pdf
Скачиваний:
145
Добавлен:
15.09.2017
Размер:
451.1 Кб
Скачать

my_calc_3

<-

function(x, y, z = 10){

s

<-

x + y

+

z

d

<-

x

- y

-

z

return(c(s,

d))

}

 

 

 

 

 

Перейдем к построению функций, которые ближе к анализу данных. Например, заменим пропущенные значения в какой-то выборке, на среднее значение. В одной из прошлых лабораторных работ эта операция выполнялась примерно так:

distr1 <- rnorm(100) distr1[1:30] <- NA

distr1[is.na(distr1)] <- mean(distr1, na.rm = T)

Но если использовать какую-то другую переменную, то придется опять полностью переписывать команду. Поэтому создадим функцию, которая вне зависимости от введенных данных будет выполнять необходимую нам операцию.

my_na_rm <- function(x){ x[is.na(x)] <- mean(x, na.rm = T)

}

Теперь, если мы на вход подадим числовой вектор с пропущенными значениями, функция выполнит необходимую нам операцию. Однако, если на вход подается вектор строкового типа, то получится ошибка. Перепишем:

my_na_rm <- function(x){

if (is.numeric(x)){

x[is.na(x)] <- mean(x, na.rm = T) return(x)

}else{

print("X is not numeric")

}

}

Что еще можно сделать? Давайте проверим входящий числовой вектор на нормальность распределения. Если распределение не отклоняется от нормального, то пропущенные значения заменим на среднее, иначе на медиану.

my_na_rm <- function(x){ if (is.numeric(x)){

stat_test <- shapiro.test(x) if (stat_test$p.value > 0.05){

x[is.na(x)]

<-

mean(x, na.rm =

T)

} else{

 

 

 

x[is.na(x)]

<-

median(x, na.rm

= T)

}

return(x) } else{

print("X is not numeric")

}

}

Что ж, теперь мы не можем узнать, на что именно были заменены пропущенные значения. Поэтому дополним функцию.

my_na_rm <- function(x){ if (is.numeric(x)){

stat_test <- shapiro.test(x) if (stat_test$p.value > 0.05){

x[is.na(x)] <- mean(x, na.rm = T) print("NA values were replaced with mean")

}else{

x[is.na(x)] <- median(x, na.rm = T) print("NA values were replaced with median")

}

return(x)

}else{

print("X is not numeric")

}

}

d1 <- rnorm(2000)

d2 <- runif(2000)

d1[1:10] <- NA d2[1:10] <- NA

d1 <- my_na_rm(d1) head(d1)

d2 <- my_na_rm(d2) head(d2)

Задание 8.1. Напишите функцию, которая выводит номера позиций пропущенных наблюдений в векторе.

На вход функция получает числовой вектор с пропущенными значениями. Функция возвращает новый вектор с номерами позиций пропущенных значений.

Задание 8.2. Напишите функцию filtered.sum, которая на вход получает вектор с пропущенными, положительными и отрицательными значениями и возвращает сумму положительных элементов вектора.

9. Корреляция и простая линейная регрессия

Корреляция позволяет нам понять как две количественные переменные влияют друг на друга. Например, при увеличении одной переменной другая уменьшается (например, с увеличением возраста физическая активность снижается, хотя при взгляде на бабок в автобусах это не скажешь) мы понимаем, что это отрицательная корреляция. Естественно, если обе переменные увеличиваются (например, при покупке квартиры большей площади мы должны заплатить больше денег) - то корреляция положительна.

df <- mtcars

Для расчета корреляции в R существует различные функции. Самой простой из них является функция cor.test (). В качестве основных аргументов выступают две сравниваемые переменные. Дополнительно можно использовать аргумент method, при помощи которого можно использовать не коэффициент корреляции Пирсона, а коэффициент корреляции Кендалла или коэффициент корреляции Спирмена.

fit <- cor.test(x = df$mpg, y = df$hp)

Естественно то же самое можно записать формулой.

cor.test(~ mpg + hp, df)

str(fit)

Соседние файлы в папке Язык R Отчет (Скворцов)