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

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

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

провести попарное сравнение t-критерием, но это займет большое количество времени и сил. Что можно сделать?

Построим диаграмму зависимости категории продукта от ее цены.

ggplot(mydata, aes(x = food, y = price)) + geom_boxplot()

После этого получим результат дисперсионного анализа.

fit5 <- aov(price ~ food, data=mydata) summary(fit5)

Из результатов анализа видно, что различие категории еды от ее цены статистически значимы, но все еще непонятно какие конкретно группы продуктов различаются между собой. Чтобы провести множественное попарное сравнение существуют различные способы. Здесь же воспользуемся одним из таких способов - функцией TukeyHSD().

TukeyHSD(fit5)

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

mydata2 <- read.csv('therapy_data.csv') str(mydata2)

mydata2$subject <- as.factor(mydata2$subject)

Для начала построим обычный однофакторный дисперсионный анализ.

fit1 <- aov(well_being ~ therapy, data = mydata2) summary(fit1)

И построим дисперсионный анализ с повторными измерениями. Рассмотрим структуру параметра Error (группирующий фактор / фактор, влияние которого мы хотим узнать).

fit1b <- aov(well_being ~ therapy + Error(subject/therapy), data = mydata2) summary(fit1b)

Проведем еще один дисперсионный анализ с повторными измерениями. На этот раз он будет не однофакторный, а двухфакторный с взаимодействием факторов между собой

fit2 <- aov(well_being ~ therapy*price, data = mydata2)

summary(fit2)

ggplot(mydata2, aes(x = price, y = well_being)) + geom_boxplot()

fit2b <- aov(well_being ~ therapy*price + Error(subject/(therapy*price)), data = mydata2) summary(fit2b)

ggplot(mydata2, aes(x = price, y = well_being)) + geom_boxplot() +

facet_grid(~subject)

fit3 <- aov(well_being ~ therapy*price*sex, data = mydata2)

summary(fit3)

fit3b <- aov(well_being ~ therapy*price*sex + Error(subject/(therapy*price)), data = mydata2) summary(fit3b)

Задание 7.1. В этой задаче вам дан набор данных, в котором представлена информация о температуре нескольких пациентов, которые лечатся разными таблетками и у разных врачей. Проведите однофакторный дисперсионный анализ с повторными измерениями: влияние типа таблетки (pill) на температуру

(temperature) с учётом испытуемого (patient). Каков p-value для влияния типа таблеток на температуру?

Задание 7.2.​​Дополнить шаблон графика так (не добавляя еще один geom), чтобы объединить линиями точки, принадлежащие разным уровням фактора supp.

library(ggplot2)

obj <- ggplot(ToothGrowth, aes(x = as.factor(dose), y = len, col = supp))+

stat_summary(fun.data = mean_cl_boot, geom = 'errorbar', width = 0.1, position = position_dodge(0.2))+

stat_summary(fun.data = mean_cl_boot, geom = 'point', size = 3, position = position_dodge(0.2))+

stat_summary(fun.data = mean_cl_boot, geom = 'line', position = position_dodge(0.2))

8. Создание собственных функций

Мы уже познакомились с различными вещами в R (описательные статистики, статистические тесты, построением графиков), но использовали уже готовые функции или из скаченных пакетов и библиотек. Но часто возникает необходимость в создании собственных функций, которые упростят работу при анализе данных. Что такое вообще функция? Функция - это какая-то подпрограмма, которой передаются какие-то значения, и она с этими значениями выполняет какие-то действия. Например функция mean(): в нее передается вектор значений, там находится их сумма, подсчитывается количество этих значений, сумма значений делится на их количество.

Итак, как же создаются собственные функции. Например, напишем подпрограмму, которая подсчитывает сумму двух чисел. Создаем переменную, в которую сохраняется подпрограмма. Далее используется команда function () {}. В круглых скобках указывается необходимое количество передаваемых значений, в фигурные скобки заключается непосредственно подпрограмма.

my_calc <- function(x, y){ s <- x + y

return(s)

}

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

my_calc(x = 10, y = 15)

result <- my_calc(10, 15)

Из функции возвращается значение последней выполненной операции. Таким образом в предыдущей функции можно было не указывать команду return (). Рассмотрим другую функцию. Теперь наша подпрограмма подсчитывает сумму и разность двух чисел. Если не указывать какая из операций возвращается, то вернется только разность двух чисел. Возвращаться может только одно значение:

my_calc_2

<-

function(x, y){

s

<-

x + y

 

d

<-

x

- y

 

return(c(s,

d))

}

 

 

 

 

my_calc_2(10, 15)

Допустим, у нас есть функция:

my_calc_3

<-

function(x, y, z){

s

<-

x + y

+

z

d

<-

x

- y

-

z

return(c(s,

d))

}

 

 

 

 

 

Как можно догадаться, она требует на вход три числа и возвращает два числа, сумму и разность трех чисел. Однако, если ее

модифицировать, то на вход будет требоваться так же три числа, но если не указать третье значение функция будет по умолчанию использовать заранее заданное значение:

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