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

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

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

вторая модель предсказывает хуже. Что собственно можно было увидеть, сравнив их Adjusted R-squared.

anova(fit_full, fit_reduced1)

Теперь построим еще одну регрессионную модель и сравним ее с первой. На этот раз особой разницы между моделями мы не видим.

fit_reduced2 <- lm(Fertility ~ Infant.Mortality + Education + Catholic + Agriculture, data = swiss) summary(fit_reduced2)

anova(fit_full, fit_reduced2)

Чтобы вручную не строить различные регрессионные модели в поисках оптимальной модели. model_full - модель, которая предсказывает значение переменной рейтинг (rating) в зависимости от всех остальных переменных в данном датасете.

model_null - модель, в которой нет ни одного предиктора, а есть только intercept. Значение intercept - это просто среднее значение зависимой переменной. Соответственно, модель предоставляет нам информацию только о том, отличается ли это среднее от нуля.

Функция step позволяет нам подобрать модель с оптимальным количеством предикторов. С помощью аргумента scope мы можем задать пространство моделей с разным числом предикторов, в котором будет происходить поиск оптимального набора предикторов. Самый простой путь - задать границы возможных моделей с помощью нулевой и полной моделей.

scope = list(lower = model_null, upper = model_full)

Аргумент direction позволяет задать направление поиска.

Первый аргумент (object) задаёт начальную модель, с которой начинается поиск. Обратите внимание на то, что при разных значениях аргумента direction нужно использовать разные начальные модели.

Функция step возвращает оптимальную модель.

optimal_fit <- step(fit_full, direction = 'backward') summary(optimal_fit)

Задание 10.1. Напишите функцию fill_na, которая принимает на вход данные с тремя переменными:

x_1 - числовой вектор x_2 - числовой вектор

y - числовой вектор с пропущенными значениями.

Теперь самое интересное, на первом этапе, использую только наблюдения, в которых нет пропущенных значений, вы должны построить регрессионную модель (без взаимодействий), где y - зависимая переменная, x_1 и x_2 - независимые переменные. Затем, используя построенную модель, мы заполним пропущенные значения предсказаниями модели.

Функция должна возвращать dataframe c новой переменной y_full. Сохраните в нее переменную y, в которой пропущенные значения заполнены предсказанными значениями построенной модели.

>test_data <- read.csv(fill_na_test.csv")

>fill_na(test_data)

x_1 x_2 y y_full

1 9221414.00000

2143599.00000

31045NA 13.12727

4635NA 13.30132 511361616.00000 65271111.00000 7934NA 12.83632 8625NA 12.90783 911381313.00000 101223NA 11.97784

Задание 10.2. Сейчас мы поработаем со встроенным датасетом attitude. Рассмотрим две модели

model_full <- lm(rating ~ ., data = attitude)

model_null <- lm(rating ~ 1, data = attitude)

C помощью функции step найдите оптимальную модель для предсказания rating в датасете attitude. Model_full и model_null уже созданы. Сохраните команду с функцией step в переменную ideal_model.

Задание 10.3. В этой задаче будем работать со встроенным датасетом LifeCycleSavings. Попытаемся предсказать значение sr на основе всех остальных переменных в этом датасете. Вспомните способы сокращения формул и напишите команду, которая создаёт линейную регрессию с главными эффектами и всеми возможными взаимодействиями второго уровня. Сохраните модель в переменную model.

11. Диагностика модели

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

library(ggplot2)

data(swiss)

str(swiss)

В первую очередь необходимо проверить взаимосвязь переменных между собой.

pairs(swiss)

ggplot(swiss, aes(x = Examination, y = Education)) + geom_point()

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

ggplot(swiss, aes(x = Examination, y = Education)) + geom_point() +

geom_smooth(method = 'lm')

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

ggplot(swiss, aes(x = Examination)) + geom_histogram()

ggplot(swiss, aes(x = Education)) + geom_histogram()

Функция scale() позволяет совершить стандартизацию вектора, то есть делает его среднее значение равным нулю, а стандартное отклонение - единице (Z-преобразование). Стандартизованный коэффициент регрессии можно получить, если предикторы и зависимая переменная стандартизованы.

Следующим важным фактором является проверка наших данных на линейность взаимосвязи между зависимой и независимой переменной. Например, возьмем переменные Examination и Education. Из графика видно, что у них скорее квадратичная зависимость, чем линейная.

ggplot(swiss, aes(x = Examination, y = Education)) + geom_point() +

geom_smooth()

lm1 <- lm(Education ~ Examination, swiss) summary(lm1)

Соседние файлы в папке R Language (Сковорцов)