ррррр
18.07
С уже известными функциями можно творить форменную дичь. Лектор предлагает замахнуться на моделирование случайного процесса. *в консольке лектора многоуровневое if страшнаа* Приложение данного метода - физика элементарных частиц. есть у нас одномерное пространство от -10 до 10, частица свободно прыгает и с некоторой вероятностью п может поглотиться. общее количество переходов ограничим 200 шагами. внутренности функции. Берём стартовую позицию частицы в центре обозначенного нами интервала. рассчитывае вероятность поглощения. Если оно произошло, то симуляция заканчивается. Если нет, делаем один случайный переход. Выход вправо или влево - это преодоление установленного нами барьера и на этом симуляция также заканчивается. Если это переход привёл к выходу в одну сторону, то пишется одно уведомление, если в другую, то другим. Так как нас интересуют несколько показателей, то результатом будет список, в котором будет строка статус (поглощение, выход влево или вправо), позиция частицы и шаг, на котором произошло событие. Если за максимальное количество шагов поглощения не произошло, то выводим отдельное сообщение. то есть выходов из симуляции 4 штуки.
22.07
р это живой и динамичный язык, который стараниями табунов разрабов постоянно обновляется. Лектор хочет рассмотреть связку, которую он назвал самой современной tidyr dplyr.
Концепция "tidy data" (вольный перевод - опрятные данные). В статистике форма записи данных в табличном виде отражает две идеи: столбец - переменная (фактор), строка - наблюдение (значение фактора). форма удобная для стат данных потому что р разрабатывался на статистику, р может датафреймы векторизировать (использовать свои мощности на дф с учётом векторизации). не во всех областях анализа данных это удобно и применимо. tidyr отвечает за "опрятность" данных. ggvis ggplot2 dplyr пера того же человека, что создал tidyr.
Возможности tidyr.
рассматривать будем на простейшем наборе данных (можно создать самому, если скучно), под этим подразумевается простой воображаемый эксперимент. группе людей предлагается два типа лекарств в разные временные точки. так вот, такие данные не являются tidy, здесь в одной и той же переменной неявным образом спрятаны тип лекарства и время их приёма, что противоречит концепции tidy data. юзаем пакет tidyr для вычёсывания полученного датафрейма. первая связка - скомкать и разбросать (gather-spread). или из широкого формата в длинный (оба названия должны быть в кавычках) (wide to long). вторая команда используется реже, поэтому про неё лектор говорить ничего не будет. результат выполнения gather похож на таблицу с описательной статистикой в STATISTICA. Вторая связка - разделить и объединить (separate-unite). сепаратор встречается чаще. разделяет переменную, в которой содержатся два фактора, на две. в аргументах: датафрейм для надругательства, название переменной, вектор значений, которыми обзывать, разделитель (пробел, нижнее подчёркивание, или что там у тебя). Полученный датафрейм и есть tidy data и с ними будет работать следующий пакет.
dplyr. куча всего, которые могут преобразовывать данные как угодно (наверное). функция select - выбор данных из дф по столбцам. первый аргумент - дф, следующие - могут воспроизводиться без кавычек. вместо названия переменных можно вносить номера столбцов, можно использовать регулярные выражения (starts_with, contains), можно делать отрицательную индексацию. filter устроена похоже, разница в действии: селект действует по столбцам, фильтр по строками. в базовом р есть функция subset, которая принимает условия либо на строки либо на столбцы. функция arrange. сортирует дф по нескольким переменным. сортировку можно делать как по возрастанию, так и по убыванию (литера -), а ещё по нескольким переменным. функция mutate. создание или изменение переменных. связка функций group by и summarise. создаёт новую переменную на основе аргументов. Всё что выше можно сделать и на основе базы, прелесть данных пакетов в единообразии вывода. аналог dplyr это data.table.
25.07
Конвейерная форма записи (связано с dplyr) с использованием %>% вот такой срани. вопрос стиля, нежели чего-то ещё. поясним на примерах. есть у нас датафрейм с двумя переменными тип и значение. нам надо просуммировать значения в зависимости от типа и отсортировать по убыванию. если хотим использовать dplyr, юзаем три вложенных вызова (arrange -> summarise -> group_by). последний вызов в этой связке выполняется первым, что немного странно для восприятия. аргумент последней функции находится далеко от неё самой, что тоже странно. Второй вариант в этом случае - в котором мы будет создавать новый дф на каждом шаге (или его перезапись). но в этом случае мы плодим море сущностей или портим дф (особенно стрёмно когда бекапов не делаешь). а теперь возникает конвейер. у каждой функции свои родные аргументы, функции расположены в том порядке, в котором применяются, дф не переписывается, сущности не плодятся, дф упоминается один раз и всё. красота.
Эквивалентная запись. x %>% f = f(x). x %>% f(y) = f(x, y). x %>% f(y, param = .) = f(y, param = x) (в последнем случае точка обозначает место, куда х надо подсунуть, в остальных х стоит первым)
и снова птички! всё, что мы делали средствами базового р переделаем под dplyr. (использовать или нет все эти пакеты - дело вкуса) это можно делать многими разными путями, не плодя ненужных сущностей.
Ключевые объекты и понятия. Переменные, окружения, операторы, справка. Управляющие конструкции и пакеты. Векторы, типы векторов, правила переписывания, векторизация. Матрицы, списки, дата фреймы. Семейсвто apply. Типичные этапы предобработки данных. Факторы, строки, регулярные выражения. Функции, разбор аргументов, эллипс (...), generic функции. Концепция tidy data (причёсанные?).
А что дальше? оттачивать навыки. Можно визуализировать (базовый р, гыгыплот2, латекс), методы и алгоритмы в разных областях, разработка и поддержка пакетов, параллельные алгоритмы и визуализация кода (не для твоего скудного умишки). Ну и плюс книга Advanced r.
ВСЁ
ррррр_стат
19.07
Корреляция.
будем работать с тачками. cor.test корреляция, аргументы: достаточно два вектора с количественными аргументами. корреляция пирсонова, есть значения критерия, степени свободы, значение п, доверительный интервал, и собственно коэф корр. если считаешь, что нужно непараметрику использовать, в аргументе method можно отдельно прописать либо кендалла, либо спирмена (аналог пирсона). в справке много интересного. если надо записать формулу, то пиши тильда аргумент1 плюс аргумент2, и откуда брать аргументы.
статистика статистикой, но безликие цифры не скажут ничего про тип зависимости, потому что в реале всё может быть не так, как ожидаешь. поэтому бахаем плоты. корреляционные плеяды, метод, к которому лектор относится скептически, но для общего развития расскажет. Это корреляция между тремя и более переменными.
для начала посравниваем попарно все количественные переменные. команда pairs, в аргументах датафрейм и на выходе диаграммы рассеяния для всех возможных комбинаций. для корреляции функция cor, которая только коэф кор считает, но ей можно скормить набор данных. лектор назвал это "варварский анализ". если считать значимость, то нужно поправку на множественное сравнение учитывать. в пакете psych есть corr.test (не забудь этот пакет включить; написание похоже на функцию из базовых статистик в р). аргументы: датафрейм с данными и всё. на выходе будут ккор для всех комбинаций и отдельно п уровни значимости уже с поправкой (все параметры настраиваемы, если это необходимо).
25.07
Работаем с тачками. строим простенькую регрессионную модель lm (linear model а не цыгарки такие). аргументы: формула, в которую запишем линейную модель, данные и всё. если эту модель вывести, то выйдет минимум информации: формула, интерсепт и коэф при переменной. не густо. для детального описания юзаем саммари и получаем боле привычную картину. Если есть регрессия, то должна быть линия тренда. её делаем гыгыплотом. (важное замечание по поводу ggplot и aes. в скобочках последнего первый аргумент это ось х (независимая переменная), по оси у - то, что мы исследуем (зависимая)). геом smooth делает линию тренда, без аргументов делает что-то нелинейное, но подходящее графику. аргументом можно любые методы использовать, но надо их в кавычки засунуть. дов интервал тоже можно убирать. как и всё в ггплот очень настраиваемое.
Так как это регрессионная модель, то мы можем предсказывать значения. в той модели, которую уже сделали, есть графа под это, можно сбацать датафрейм в котором будут реальные значения и предсказанные, а потом сравнить.
предсказывать можно что угодно, поэтому бацнем новый дф, в который засунем значения, не вошедшие в основную модель. функция predict, аргументы построенная модель и данные, по которым делать предсказания. если захотим запихнуть в старый датафрейм новые значения, то создаёшь новую переменную и засовываешь в неё результат выполнения предсказания.
В примерах выше предиктор (независимая переменная) был независимой переменной. в линейной регрессии можно предиктором и номинативную переменную сделать. На примере машинок. Сначала мы засунули в модель изменение потребления топлива в зависимости от количества цилиндров. получили, что зависимость достоверная есть, на графике получили, что значения распределены в пределах трёх числовых уровней, что довольно странно. меняем цифры в количестве цилиндров на буквы, получаем чуть более осмысленный результат, смотрим на саммари. там есть интерсепт, там есть коэф для группы с 6 и 8 цилиндрами. А гьде 4 цилиндра? (а гьде гималайский?). Если мы посчитаем средние значения для трёх групп, то увидим, что интерсепт равен среднему для группы 4 цилиндра. Это значение принимается по умолчанию как базовое. А два последующих коэф показывают, насколько среднее изменилось в других группах (в данном конкретном случае коэф отрицательные ровно настолько, насколько они разнятся со средним для группы 4 цил.). как видно, линейная регрессия прекрасно работает и с номинативной переменной.
26.07
Множественная регрессия. похожа на многофакторную анову. как её считать, как интерпретировать результаты, как визуализировать. регрессия позволяет предсказывать значения в отличие от ановы.
переменные по которым предсказывать рождаемость в разных областях страны. swiss встроенный датасет. разумеется, его надо проверить. посмотреть на структуру (датафрейм с 2 целочисленными переменными и 4 типа num), построить график распределения зависимой переменной, вот это вот всё.
Теперь время предсказаний. предсказываем рождаемость в зависимости от подготовки к службе и религиозных убеждений. lm в аргументах формула как для дисперсионного анализа с двумя предикторами (допускается написание df$col1 вместо названия столбцов и дф отдельно, р поймёт). итого используя саммари можно посмотреть, что там у тебя. удивительное дело: чем выше подготовка к службе, тем ниже рождаемость (с поля боя не возвращаются и не оставляют потомков?), а от религии мало что зависит.
Взаимодействие переменных. Как и в дисперсионном анализе, переменные в лр могут взаимодействовать. формульная запись аналогична. вывод также аналогичен. что значит взаимодействие факторов в лр: в зависимости от одного фактора другой фактор начинает сильнее влиять на зависимую переменную.
Доверительные интервалы. тоже важная штука. функция confint и в аргументах созданная тобой модель.
время линейной регрессии с категориальными предикторами. Если таких нет, то надо создать. в данных, с которым работаем, есть такая переменная, как католики, там есть много и мало, то есть провинции в которых католиков много и провинции в которых католиков мало. Это дело можно заменить на собственно много или мало, если процент католиков больше 60%. делаем модель с новой переменной и в результатах видим странное: интерсепт, коэф для подготовки и коэф для "много" (а гьде остальные?). теперь в интерсепте хранится среднее предсказанное значение для первого уровня категориальной переменной при остальных переменных равных 0. в нашем случае первый уровень это "мало", для него в интерсепте и хранится средняя рождаемость. следующий показатель показывает, насколько меняется рождаемость в зависимости от физической подготовки в провинциях, где католиков мало. изменение предсказанного значения зависимой переменной при переходе от провинций с малым количеством католиков к провинциям, где католиков много. изменение в большую сторону, стандартная ошибка относительно небольшая, предиктор значимый.
самое мясо начинается при взаимодействии непрерывных и категориальных переменных. что означают результаты. теперь в интерсепте также хранится средняя предсказанная рождаемость для провинций где католиков мало, физ подготовка не учитывается. следующий показатель для этих же провинций но с учётом физ подготовки. третий показатель для провинций где католиков много, коэф отрицательный и не значимый. однако есть взаимодействие факторов, которое значимо на уровне тенденции. этот коэф показывает, насколько меняется рождаемость в провинциях где много католиков при условии физической подготовки. итого что мы видим. в провинциях в зависимости от количества католиков рождаемость меняется по разному. в этом и прикол взаимодействия факторов.
интерпретировать результаты с категориальными переменными может быть трудно. стоит отметить, что коэф выводятся в зависимости от того, как ты переменные в линейной модели расположил. если переменные поменять местами, то это может облегчить интерпретацию результатов. если категориальную переменную поставить вперёд, то по порядку идут провинции где католиков мало и много, можно сразу сравнивать. потом физ подготовка там где католиков мало, и где их много.
теперь можно и линию тренда оценивать. чёткая отрицательная линия тренда, небольшой доверительный интервал. А теперь добавим религиозность и видим, что график развалился на две половины: высокая рождаемость, низкая физ подготовка и много католиков, и обратная ситуация, разделение очень чёткое. делаем линию тренда и получаем странный тренд для "много" (для "мало" всё прилично). зависимость как будто не линейная, но это мы бахнули сглаживание по умолчанию. добавим линейную модель и странный тренд стал немножко положительный тренд, но широкий доверительный интервал показывает, что достоверности ждать не нужно, не найдёшь.
Если ещё не понятно, то строить графики при построении модели - идея годная. В данном конкретном случае видно, как физ подготовка разделила данные на два кластера, в области с "много" линейный тренд как будто не наблюдается, но там просто закономерностей выраженных нет. хотя наименьшие квадраты щедры и показывают некоторую зависимость. хотя палиться с такими данными не стоит.
а теперь рассмотрим графики с одной кат и несколькими непр переменными чтобы понять во что мы такое ввязались. добавим детскую смертность. вывод результатов выглядит страшно, но попытаемся разобраться. интерсепт как всегда средня рождаемость для "мало", потом для "много" (изменение большое, но станд ош тоже), потом коэф насколько детская смертность влияет на рождаемость и потом физ подготовка, оба два относятся к "мало". потом они же два для "много", потом взаимодействие их двоих (непрерывных факторов) для "мало" потом для "много". И ни один из факторов не достоверен.
27.07
теперь строим оптимальную регрессионную модель.
когда мы получаем какие-то данные, мы можем использовать всю доступную информацию для предсказания интересующих нас значений. подобная практика чревата бесполезной тратой нашего времени и ресурсов компуктеров. также есть разница между предсказанием значений и разбором закономерностей в данных. Не все данные одинаково полезны. для более полного понимания что происходит надо строить разные модели и сравнивать их.
как это происходит в р. сначала приведём данные по швейцарам в исходный вид (лектор удалил набор данных и присвоил заново, а можно было просто занулить созданную переменную). потом. если в формуле с моделью на месте предикторов поставить точку, то зависимая переменная (в нашем случае рождаемость) будет предсказываться от всех предикторов в наборе данных (но не от их взаимодействий). получаем, что значимыми оказываются все предикторы кроме подготовки (хотя в предыдущем примере он был значимым). Теперь бахнем модель без одного предиктора (без доли людей, занятых на сельхоз работах; названия из вывода р копипастить можно). подготовка всё также не значима, другие предикторы немного поменяли значимость, но не растеряли ея. теперь сравним рквадрат. в первом случае он 0,7 и 0,67 во втором 0,66 и 0,63. у нас есть две модели. чтобы понять, насколько значимо различается доля дисперсии, которая объясняется обеими моделями, можно бахнуть дисперсионный анализ. anova в аргументах обе наши модели, в выводе описание обеих моделей. ф значение достаточно велико, п меньше 0,05. результат показывает, что доля дисперсии в полной модели значимо больше чем в урезанной модели.
теперь сделаем ещё одну урезанную модель, только теперь уберём подготовку. по итогу все предикторы значимы. теперь сравним полную модель с новой урезанной. ф значение 1, п сильно больше 0,05. сие значит, что обе модели одинаково объясняют долю дисперсии.
сравнение полной и урезанной модели - стандартный способ отбора предикторах в линейной регрессии. мы могли бы перебрать все предикторы, сравнить оптимальная модель - это которая объясняет максимальное количество дисперсии минимальным набором предикторов. можно вручную перебирать предикторы, но это долго. в р есть функция, которая увеличивает количество предикторов, убавляет или сразу оценивает обе стороны. и сравнивает полученную долю дисперсии, конечно. step функция, в аргументах модель со всеми предикторами, второй аргумент направление. в нашем случае направление обратное, потому что на входе модель со всеми предикторами. итак, что делает функция: показывает, какую модель использовали, оценивает сумму квадратов и сумму остатков, потом убирает предиктор, который объясняет самую малую долю дисперсии, сравнивает оставшиеся предикторы и у нас останавливается, потому что дальше будет скорее всего хуже. работа функции step неизбежно будет показана в консоли. summary для такой модели будет похож на стандартный вывод линейной регрессии только со всеми значимыми предикторами.
Теперь время диагностировать модель (что бы это ни значило). оценка можно ли на имеющихся у нас данных строить нужные нам модели. проверка данных на основе списка требований к ним. какие-то правила нарушать можно, какие-то лучше не надо. поглядим на список допущений, покажут как оценивать данные графиками, функциями р и функциями нашего пера.
знакомиться с диагностикой будем опять на швейцарцах, делаем быстрый взгляд на попарные сравнения (pairs), и нас допустим интересует связь между образованием и подготовкой. делаем гыгыплот, видим не сильно линейную связь. Сначала посмотрим на выбросы, которые сильно отклоняются от общего тренда взаимосвязи. а нормально ли переменные распределены? подготовка относительно нормально распределена, а образование скошено влево. Что делать? Не использовать переменную для анализа. А если сильно надо, то преобразовать. варианты: логарифм, квадратный корень или что-то ещё.
28.07
допущение о линейности взаимосвязи. если в аргументах сглаживания не указывать метод, то связь между подготовкой и образованием будет нелинейная, будет плавная кривая. теперь делаем модель, по подготовке предскажем образование. подготовка оказывается хорошим предиктором, модель описывает около половины изменчивости. смотрим на график внимательно, кажется что связь больше квадратическая чем линейная, пробуем биномиальную модель бахнуть. создаём в датасете новую переменную, в которой будет квадрат переменной "физ подготовка". делаем модель по двум предикторам: подготовка и квадарт ея. по итогу подготовка перестала быть значимым предиктором, квадрат её - значим, модель описывает около 60% изменчивости (вспоминаем, что было в прошлый раз и делаем выводы). сравним это дело ановой, разница между моделями значима.
Для дальнейшей диагностики добавим новых переменных. добавим предсказанных значений и остатков из двух моделей. бахнем графики и посмотрим что у нас там происходит. в диаграмму рассеяния можно добавить линии предсказанных значений. помним, что первая модель была линейно вторая нет, линии также по разному отражают предсказания. следующий шаг по оси х предсказанные значения по у остатки. сначала увидели, что остатки распределены как бы по синусоиде, во второй модели остатки относительно равномерно распределены.
допущение о независимости остаков. это значит, что остатки не сгруппированы по категориям. наблюдения взяты из двух разных исследований, использование не усреднённых данных по испытуемым. Как выяснять. строим график по х номера по у остатки. в идеале должна быть прямая линия вокруг которой примерно равномерно распределен остатки. для обеих случаев картина похожая, но во втором немного сглаженнее.
гомоскедастиность (вспомнить бы ещё что это). изменчивость остатков должна быть одинаковой на разных уровнях независимой переменной. расшифровываю. разброс остатков должен быть одинаковый на всём протяжении моделируемого вектора. строим графики, в первом случае разброс небольшой в начале и большой в конце, во втором распределение остатков смещено к началу, но оно равномерное.
допущение о нормальности распределения остатков. строим гистограмки. в первой модели распределении немного скошено влево. можно поюзать кукуплот и увидеть что распределение остатков не очень нормальное. тест шапиро уилка тоже показывает что распределение не нормально. для второй модели на первый взгляд распределение выглядит нормально, но шапиро уилк говорят, что оно не нормальное. верим им.
29.07
Логистическая регрессия.
Основное свойство линейных регрессионных моделей - зависимая переменная должна быть количественной. логистическая регрессия позволяет оценить влияние предикторов на номинативную переменную (у которой есть две градации). сначала будет идея метода (который сложен по своей мат природе) а потом будем выяснять как оно работает в р.
в чём суть метода. как разные предикторы влияют на номинативную переменную с двумя градациями (самый простой вариант: событие либо случится, либо нет). пройду ли я этот курс с отличием или нет и какие факторы повлияют на исход. факторы: сон на учёбе, тусы, ботать. чего мы хотим от логистической регрессии: хотим рассчитать вероятность благоприятного исхода. в правой части уравнения стандартный джентельменский набор переменных. коэффициенты показывают, с какой "силой" переменные влияют на исход. в чём проблема. Например, х1 (тяга человека к математике) может принимать значения от отрицательной до положительной бесконечностей, а вероятность принимает значения от 0 до 1. в правой части разные количественные показатели с огромным зачастую размахом, а в левой диапазон значений ограничен.
из таких ситуаций помогает выйти возведение экспоненты в степень, которая равна показателю правой части уравнения. итого вероятность примет вид: числитель - экспонента в степени, знаменатель - 1 минус эта экспонента. преобразование значения вероятности таким образом, чтобы она также принимала значения от отрицательной до положительной бесконечностей, как и потенциальная правая часть уравнения.
рассчитываем odds, это отношения вероятности успеха (1) к вероятности неудачи (0). если нам известна вероятность успеха (0,2) то вероятность неудачи будет 1-0,2 (0,8), делим 0,2 на 0,8, получаем odds. чем выше вероятность успеха, тем выше odds. а теперь возьмём и возьмём натуральный логарифм от odds. что произойдёт. если значение меньше 1, то значение натлог будет меньше 0. чем выше вероятность удачного исхода, чем выше odds, тем больше значение натлог от odds. вероятность удачи 0.5 - это odds 1, и натлог 0 (надеюсь понятно). Теперь мы готовы смотреть на итоговую картину, которая есть отношение между вероятностью и натлог от odds. чем больше последнее, тем ближе первое к 1. в левой части будет уже не вероятность, а натлог от odds. называется всё это логит преобразование.
теперь можно правильно интерпретировать кофэ логрегр. как это работает в р. у нас есть набор данных, в котором есть информация о поле ученика, успеваемости по различным предметам, и окончание школы с отличием или нет. Задача: предсказать на основе пола и успеваемости исход "с отличием" или "не с отличием". Сначала ограничимся этим количеством переменных, потом будем думать, как включать неограниченное количество предикторов.
оценим на графике, как на медальность влияют баллы по чтению и математике и пол учащегося. на графике видно, что среди не получивших медаль больше мальчиков это таки раз, корреляцию мжду чтением и матаном это таки два, среди медалистов почти нет тех, кто получил меньше 50 баллов это таки три. и ещё среди медалистов больше девок (они старательнее). А теперь модель, которая всё это опишет. делаем формулу. функция glm (обобщённая линейная модель), сначала зависимая переменная, потом независимые, потом откуда берём все, потом в аргументе family пишем binomial. разберём простой вариант без взаимодействий. интерсепт это показатель рассчитываемый для девок при условии нулевых показателей по чтению и математике. этот интерсепт это значение логарифма odds, и он очень небольшой. как интерпретировать. вероятность получить медаль при нулевых баллах по чтению и математике КРАЙНЕ МАЛА. теперь. интерпретировать коэф для следующей переменной. если испытуемый девка, и если у неё баллы по математике фиксированы и не изменяются, то с единичным увеличением балла по чтению значение логарифма odds (вероятность получить медаль) будут увеличиваться на 0,066. интерпретация коэф переменной матан. если испытуемый девка и при неизменных баллах по чтению, то с единичным увеличением баллов по математике шансы получить медаль возрастают на 0,14 единиц. Из всего этого видно, что баллы по матану больше влияют на получение медали. Третий коэф. Если баллы по чтению и матану не меняются, то сам факт изменения положения в номинативной переменной ("смена пола") будет снижать вероятность получения медали. (лектор упомянул odds ratio и сказал, что про это можно почитать отдельно. хм.)
Что теперь делать с предсказанными значениями? в линейной регрессии точки можно спроецировать на регрессионную прямую и оценить предсказанное значение. Можно ли сделать что-то такое в логистической регрессии? усли бахнуть predict, то он даст логарифм от odds. результаты в таком случае удобнее получать в виде вероятности, для этого в predict нужно указать аргумент type = response. получится в итоге вероятность получить медаль, которая высчитывается на основании регрессионной модели. в датафрейм можно внести новую переменную с предсказанными значениям.
Вот мы получили вероятности а что с ними делать? можно придумать порог, который будет "отсекать" вероятности и мы сможем решать, состоится или нет событие.
так называемые рок-кривые? пакет rocr. есть две функции prediction и performance. первая функция сравнивает предсказанные и экспериментальные значения. второй показывает ошибки первого рода? там очень сложная для меня система пока. в зависимости от показателя у нас есть разная вероятность неправильного предсказания. теперь время выставлять пороги отсечения. с какого значения мы скажем, что событие произойдёт, с какого - что не произойдёт.
специфичность и чувствительность классификатора. создадим переменную, в которую вгоним отношение между порогом и специфичностью, потом переменную с порогом и чувствительностью. Специфичность - показатель, который говорит, насколько хорошо мы предсказываем отрицательный исход событий. Чувствительность - насколько хорошо мы предсказываем положительный исход событий. чем жёстче порог, тем ниже чувствительность. добавляем отношение между значением порога и общей эффективностью классификатора, строим график и видим точку пересечения трёх показателей. это значение и будет порог.
теперь создаём новую переменную, где будет храниться не просто вероятность исхода а реальное значение: да или нет. и можно создать новую переменную, где запишем правильно или нет предсказали.
как красиво вывести результаты. пакеты xtable и stargazer. делаем линейную регрессию с двумя количественными предикторами. потом анову с взаимодействием двух факторов. теперь можем посмотреть саммари данных, там есть таблица с коэффициентами. если надо конкретно эту таблицу скопировать. xtable на вход принимает модель, сохраняет это дело. потом функция print. аргументы что сохраняем, в каком формате, название файла куда сохранять. на примере наших данных сохранили в хтмл, и в браузере открывается таблица, пригодная к копипасту. А если хочешь сохранить свои данные красиво. для этого stargazer. работает с данными, которые мы получаем при использовании регрессионных моделей. аргументы модель, тип документа, что будет зависимой, а что независимой переменной, и какой аутпут. И таблица уже сильно красивше, её можно даже впихнуть куда-нибудь.
ВСЁ!
Так, с проганием в р закончили, анализ данных первая часть тоже, пора продолжать. На очереди вторая часть основ статистики и анализа данных в р. оба курса друг на друга ссылаются, можно запаралелить.
18.07
С уже известными функциями можно творить форменную дичь. Лектор предлагает замахнуться на моделирование случайного процесса. *в консольке лектора многоуровневое if страшнаа* Приложение данного метода - физика элементарных частиц. есть у нас одномерное пространство от -10 до 10, частица свободно прыгает и с некоторой вероятностью п может поглотиться. общее количество переходов ограничим 200 шагами. внутренности функции. Берём стартовую позицию частицы в центре обозначенного нами интервала. рассчитывае вероятность поглощения. Если оно произошло, то симуляция заканчивается. Если нет, делаем один случайный переход. Выход вправо или влево - это преодоление установленного нами барьера и на этом симуляция также заканчивается. Если это переход привёл к выходу в одну сторону, то пишется одно уведомление, если в другую, то другим. Так как нас интересуют несколько показателей, то результатом будет список, в котором будет строка статус (поглощение, выход влево или вправо), позиция частицы и шаг, на котором произошло событие. Если за максимальное количество шагов поглощения не произошло, то выводим отдельное сообщение. то есть выходов из симуляции 4 штуки.
22.07
р это живой и динамичный язык, который стараниями табунов разрабов постоянно обновляется. Лектор хочет рассмотреть связку, которую он назвал самой современной tidyr dplyr.
Концепция "tidy data" (вольный перевод - опрятные данные). В статистике форма записи данных в табличном виде отражает две идеи: столбец - переменная (фактор), строка - наблюдение (значение фактора). форма удобная для стат данных потому что р разрабатывался на статистику, р может датафреймы векторизировать (использовать свои мощности на дф с учётом векторизации). не во всех областях анализа данных это удобно и применимо. tidyr отвечает за "опрятность" данных. ggvis ggplot2 dplyr пера того же человека, что создал tidyr.
Возможности tidyr.
рассматривать будем на простейшем наборе данных (можно создать самому, если скучно), под этим подразумевается простой воображаемый эксперимент. группе людей предлагается два типа лекарств в разные временные точки. так вот, такие данные не являются tidy, здесь в одной и той же переменной неявным образом спрятаны тип лекарства и время их приёма, что противоречит концепции tidy data. юзаем пакет tidyr для вычёсывания полученного датафрейма. первая связка - скомкать и разбросать (gather-spread). или из широкого формата в длинный (оба названия должны быть в кавычках) (wide to long). вторая команда используется реже, поэтому про неё лектор говорить ничего не будет. результат выполнения gather похож на таблицу с описательной статистикой в STATISTICA. Вторая связка - разделить и объединить (separate-unite). сепаратор встречается чаще. разделяет переменную, в которой содержатся два фактора, на две. в аргументах: датафрейм для надругательства, название переменной, вектор значений, которыми обзывать, разделитель (пробел, нижнее подчёркивание, или что там у тебя). Полученный датафрейм и есть tidy data и с ними будет работать следующий пакет.
dplyr. куча всего, которые могут преобразовывать данные как угодно (наверное). функция select - выбор данных из дф по столбцам. первый аргумент - дф, следующие - могут воспроизводиться без кавычек. вместо названия переменных можно вносить номера столбцов, можно использовать регулярные выражения (starts_with, contains), можно делать отрицательную индексацию. filter устроена похоже, разница в действии: селект действует по столбцам, фильтр по строками. в базовом р есть функция subset, которая принимает условия либо на строки либо на столбцы. функция arrange. сортирует дф по нескольким переменным. сортировку можно делать как по возрастанию, так и по убыванию (литера -), а ещё по нескольким переменным. функция mutate. создание или изменение переменных. связка функций group by и summarise. создаёт новую переменную на основе аргументов. Всё что выше можно сделать и на основе базы, прелесть данных пакетов в единообразии вывода. аналог dplyr это data.table.
25.07
Конвейерная форма записи (связано с dplyr) с использованием %>% вот такой срани. вопрос стиля, нежели чего-то ещё. поясним на примерах. есть у нас датафрейм с двумя переменными тип и значение. нам надо просуммировать значения в зависимости от типа и отсортировать по убыванию. если хотим использовать dplyr, юзаем три вложенных вызова (arrange -> summarise -> group_by). последний вызов в этой связке выполняется первым, что немного странно для восприятия. аргумент последней функции находится далеко от неё самой, что тоже странно. Второй вариант в этом случае - в котором мы будет создавать новый дф на каждом шаге (или его перезапись). но в этом случае мы плодим море сущностей или портим дф (особенно стрёмно когда бекапов не делаешь). а теперь возникает конвейер. у каждой функции свои родные аргументы, функции расположены в том порядке, в котором применяются, дф не переписывается, сущности не плодятся, дф упоминается один раз и всё. красота.
Эквивалентная запись. x %>% f = f(x). x %>% f(y) = f(x, y). x %>% f(y, param = .) = f(y, param = x) (в последнем случае точка обозначает место, куда х надо подсунуть, в остальных х стоит первым)
и снова птички! всё, что мы делали средствами базового р переделаем под dplyr. (использовать или нет все эти пакеты - дело вкуса) это можно делать многими разными путями, не плодя ненужных сущностей.
Ключевые объекты и понятия. Переменные, окружения, операторы, справка. Управляющие конструкции и пакеты. Векторы, типы векторов, правила переписывания, векторизация. Матрицы, списки, дата фреймы. Семейсвто apply. Типичные этапы предобработки данных. Факторы, строки, регулярные выражения. Функции, разбор аргументов, эллипс (...), generic функции. Концепция tidy data (причёсанные?).
А что дальше? оттачивать навыки. Можно визуализировать (базовый р, гыгыплот2, латекс), методы и алгоритмы в разных областях, разработка и поддержка пакетов, параллельные алгоритмы и визуализация кода (не для твоего скудного умишки). Ну и плюс книга Advanced r.
ВСЁ
ррррр_стат
19.07
Корреляция.
будем работать с тачками. cor.test корреляция, аргументы: достаточно два вектора с количественными аргументами. корреляция пирсонова, есть значения критерия, степени свободы, значение п, доверительный интервал, и собственно коэф корр. если считаешь, что нужно непараметрику использовать, в аргументе method можно отдельно прописать либо кендалла, либо спирмена (аналог пирсона). в справке много интересного. если надо записать формулу, то пиши тильда аргумент1 плюс аргумент2, и откуда брать аргументы.
статистика статистикой, но безликие цифры не скажут ничего про тип зависимости, потому что в реале всё может быть не так, как ожидаешь. поэтому бахаем плоты. корреляционные плеяды, метод, к которому лектор относится скептически, но для общего развития расскажет. Это корреляция между тремя и более переменными.
для начала посравниваем попарно все количественные переменные. команда pairs, в аргументах датафрейм и на выходе диаграммы рассеяния для всех возможных комбинаций. для корреляции функция cor, которая только коэф кор считает, но ей можно скормить набор данных. лектор назвал это "варварский анализ". если считать значимость, то нужно поправку на множественное сравнение учитывать. в пакете psych есть corr.test (не забудь этот пакет включить; написание похоже на функцию из базовых статистик в р). аргументы: датафрейм с данными и всё. на выходе будут ккор для всех комбинаций и отдельно п уровни значимости уже с поправкой (все параметры настраиваемы, если это необходимо).
25.07
Работаем с тачками. строим простенькую регрессионную модель lm (linear model а не цыгарки такие). аргументы: формула, в которую запишем линейную модель, данные и всё. если эту модель вывести, то выйдет минимум информации: формула, интерсепт и коэф при переменной. не густо. для детального описания юзаем саммари и получаем боле привычную картину. Если есть регрессия, то должна быть линия тренда. её делаем гыгыплотом. (важное замечание по поводу ggplot и aes. в скобочках последнего первый аргумент это ось х (независимая переменная), по оси у - то, что мы исследуем (зависимая)). геом smooth делает линию тренда, без аргументов делает что-то нелинейное, но подходящее графику. аргументом можно любые методы использовать, но надо их в кавычки засунуть. дов интервал тоже можно убирать. как и всё в ггплот очень настраиваемое.
Так как это регрессионная модель, то мы можем предсказывать значения. в той модели, которую уже сделали, есть графа под это, можно сбацать датафрейм в котором будут реальные значения и предсказанные, а потом сравнить.
предсказывать можно что угодно, поэтому бацнем новый дф, в который засунем значения, не вошедшие в основную модель. функция predict, аргументы построенная модель и данные, по которым делать предсказания. если захотим запихнуть в старый датафрейм новые значения, то создаёшь новую переменную и засовываешь в неё результат выполнения предсказания.
В примерах выше предиктор (независимая переменная) был независимой переменной. в линейной регрессии можно предиктором и номинативную переменную сделать. На примере машинок. Сначала мы засунули в модель изменение потребления топлива в зависимости от количества цилиндров. получили, что зависимость достоверная есть, на графике получили, что значения распределены в пределах трёх числовых уровней, что довольно странно. меняем цифры в количестве цилиндров на буквы, получаем чуть более осмысленный результат, смотрим на саммари. там есть интерсепт, там есть коэф для группы с 6 и 8 цилиндрами. А гьде 4 цилиндра? (а гьде гималайский?). Если мы посчитаем средние значения для трёх групп, то увидим, что интерсепт равен среднему для группы 4 цилиндра. Это значение принимается по умолчанию как базовое. А два последующих коэф показывают, насколько среднее изменилось в других группах (в данном конкретном случае коэф отрицательные ровно настолько, насколько они разнятся со средним для группы 4 цил.). как видно, линейная регрессия прекрасно работает и с номинативной переменной.
26.07
Множественная регрессия. похожа на многофакторную анову. как её считать, как интерпретировать результаты, как визуализировать. регрессия позволяет предсказывать значения в отличие от ановы.
переменные по которым предсказывать рождаемость в разных областях страны. swiss встроенный датасет. разумеется, его надо проверить. посмотреть на структуру (датафрейм с 2 целочисленными переменными и 4 типа num), построить график распределения зависимой переменной, вот это вот всё.
Теперь время предсказаний. предсказываем рождаемость в зависимости от подготовки к службе и религиозных убеждений. lm в аргументах формула как для дисперсионного анализа с двумя предикторами (допускается написание df$col1 вместо названия столбцов и дф отдельно, р поймёт). итого используя саммари можно посмотреть, что там у тебя. удивительное дело: чем выше подготовка к службе, тем ниже рождаемость (с поля боя не возвращаются и не оставляют потомков?), а от религии мало что зависит.
Взаимодействие переменных. Как и в дисперсионном анализе, переменные в лр могут взаимодействовать. формульная запись аналогична. вывод также аналогичен. что значит взаимодействие факторов в лр: в зависимости от одного фактора другой фактор начинает сильнее влиять на зависимую переменную.
Доверительные интервалы. тоже важная штука. функция confint и в аргументах созданная тобой модель.
время линейной регрессии с категориальными предикторами. Если таких нет, то надо создать. в данных, с которым работаем, есть такая переменная, как католики, там есть много и мало, то есть провинции в которых католиков много и провинции в которых католиков мало. Это дело можно заменить на собственно много или мало, если процент католиков больше 60%. делаем модель с новой переменной и в результатах видим странное: интерсепт, коэф для подготовки и коэф для "много" (а гьде остальные?). теперь в интерсепте хранится среднее предсказанное значение для первого уровня категориальной переменной при остальных переменных равных 0. в нашем случае первый уровень это "мало", для него в интерсепте и хранится средняя рождаемость. следующий показатель показывает, насколько меняется рождаемость в зависимости от физической подготовки в провинциях, где католиков мало. изменение предсказанного значения зависимой переменной при переходе от провинций с малым количеством католиков к провинциям, где католиков много. изменение в большую сторону, стандартная ошибка относительно небольшая, предиктор значимый.
самое мясо начинается при взаимодействии непрерывных и категориальных переменных. что означают результаты. теперь в интерсепте также хранится средняя предсказанная рождаемость для провинций где католиков мало, физ подготовка не учитывается. следующий показатель для этих же провинций но с учётом физ подготовки. третий показатель для провинций где католиков много, коэф отрицательный и не значимый. однако есть взаимодействие факторов, которое значимо на уровне тенденции. этот коэф показывает, насколько меняется рождаемость в провинциях где много католиков при условии физической подготовки. итого что мы видим. в провинциях в зависимости от количества католиков рождаемость меняется по разному. в этом и прикол взаимодействия факторов.
интерпретировать результаты с категориальными переменными может быть трудно. стоит отметить, что коэф выводятся в зависимости от того, как ты переменные в линейной модели расположил. если переменные поменять местами, то это может облегчить интерпретацию результатов. если категориальную переменную поставить вперёд, то по порядку идут провинции где католиков мало и много, можно сразу сравнивать. потом физ подготовка там где католиков мало, и где их много.
теперь можно и линию тренда оценивать. чёткая отрицательная линия тренда, небольшой доверительный интервал. А теперь добавим религиозность и видим, что график развалился на две половины: высокая рождаемость, низкая физ подготовка и много католиков, и обратная ситуация, разделение очень чёткое. делаем линию тренда и получаем странный тренд для "много" (для "мало" всё прилично). зависимость как будто не линейная, но это мы бахнули сглаживание по умолчанию. добавим линейную модель и странный тренд стал немножко положительный тренд, но широкий доверительный интервал показывает, что достоверности ждать не нужно, не найдёшь.
Если ещё не понятно, то строить графики при построении модели - идея годная. В данном конкретном случае видно, как физ подготовка разделила данные на два кластера, в области с "много" линейный тренд как будто не наблюдается, но там просто закономерностей выраженных нет. хотя наименьшие квадраты щедры и показывают некоторую зависимость. хотя палиться с такими данными не стоит.
а теперь рассмотрим графики с одной кат и несколькими непр переменными чтобы понять во что мы такое ввязались. добавим детскую смертность. вывод результатов выглядит страшно, но попытаемся разобраться. интерсепт как всегда средня рождаемость для "мало", потом для "много" (изменение большое, но станд ош тоже), потом коэф насколько детская смертность влияет на рождаемость и потом физ подготовка, оба два относятся к "мало". потом они же два для "много", потом взаимодействие их двоих (непрерывных факторов) для "мало" потом для "много". И ни один из факторов не достоверен.
27.07
теперь строим оптимальную регрессионную модель.
когда мы получаем какие-то данные, мы можем использовать всю доступную информацию для предсказания интересующих нас значений. подобная практика чревата бесполезной тратой нашего времени и ресурсов компуктеров. также есть разница между предсказанием значений и разбором закономерностей в данных. Не все данные одинаково полезны. для более полного понимания что происходит надо строить разные модели и сравнивать их.
как это происходит в р. сначала приведём данные по швейцарам в исходный вид (лектор удалил набор данных и присвоил заново, а можно было просто занулить созданную переменную). потом. если в формуле с моделью на месте предикторов поставить точку, то зависимая переменная (в нашем случае рождаемость) будет предсказываться от всех предикторов в наборе данных (но не от их взаимодействий). получаем, что значимыми оказываются все предикторы кроме подготовки (хотя в предыдущем примере он был значимым). Теперь бахнем модель без одного предиктора (без доли людей, занятых на сельхоз работах; названия из вывода р копипастить можно). подготовка всё также не значима, другие предикторы немного поменяли значимость, но не растеряли ея. теперь сравним рквадрат. в первом случае он 0,7 и 0,67 во втором 0,66 и 0,63. у нас есть две модели. чтобы понять, насколько значимо различается доля дисперсии, которая объясняется обеими моделями, можно бахнуть дисперсионный анализ. anova в аргументах обе наши модели, в выводе описание обеих моделей. ф значение достаточно велико, п меньше 0,05. результат показывает, что доля дисперсии в полной модели значимо больше чем в урезанной модели.
теперь сделаем ещё одну урезанную модель, только теперь уберём подготовку. по итогу все предикторы значимы. теперь сравним полную модель с новой урезанной. ф значение 1, п сильно больше 0,05. сие значит, что обе модели одинаково объясняют долю дисперсии.
сравнение полной и урезанной модели - стандартный способ отбора предикторах в линейной регрессии. мы могли бы перебрать все предикторы, сравнить оптимальная модель - это которая объясняет максимальное количество дисперсии минимальным набором предикторов. можно вручную перебирать предикторы, но это долго. в р есть функция, которая увеличивает количество предикторов, убавляет или сразу оценивает обе стороны. и сравнивает полученную долю дисперсии, конечно. step функция, в аргументах модель со всеми предикторами, второй аргумент направление. в нашем случае направление обратное, потому что на входе модель со всеми предикторами. итак, что делает функция: показывает, какую модель использовали, оценивает сумму квадратов и сумму остатков, потом убирает предиктор, который объясняет самую малую долю дисперсии, сравнивает оставшиеся предикторы и у нас останавливается, потому что дальше будет скорее всего хуже. работа функции step неизбежно будет показана в консоли. summary для такой модели будет похож на стандартный вывод линейной регрессии только со всеми значимыми предикторами.
Теперь время диагностировать модель (что бы это ни значило). оценка можно ли на имеющихся у нас данных строить нужные нам модели. проверка данных на основе списка требований к ним. какие-то правила нарушать можно, какие-то лучше не надо. поглядим на список допущений, покажут как оценивать данные графиками, функциями р и функциями нашего пера.
знакомиться с диагностикой будем опять на швейцарцах, делаем быстрый взгляд на попарные сравнения (pairs), и нас допустим интересует связь между образованием и подготовкой. делаем гыгыплот, видим не сильно линейную связь. Сначала посмотрим на выбросы, которые сильно отклоняются от общего тренда взаимосвязи. а нормально ли переменные распределены? подготовка относительно нормально распределена, а образование скошено влево. Что делать? Не использовать переменную для анализа. А если сильно надо, то преобразовать. варианты: логарифм, квадратный корень или что-то ещё.
28.07
допущение о линейности взаимосвязи. если в аргументах сглаживания не указывать метод, то связь между подготовкой и образованием будет нелинейная, будет плавная кривая. теперь делаем модель, по подготовке предскажем образование. подготовка оказывается хорошим предиктором, модель описывает около половины изменчивости. смотрим на график внимательно, кажется что связь больше квадратическая чем линейная, пробуем биномиальную модель бахнуть. создаём в датасете новую переменную, в которой будет квадрат переменной "физ подготовка". делаем модель по двум предикторам: подготовка и квадарт ея. по итогу подготовка перестала быть значимым предиктором, квадрат её - значим, модель описывает около 60% изменчивости (вспоминаем, что было в прошлый раз и делаем выводы). сравним это дело ановой, разница между моделями значима.
Для дальнейшей диагностики добавим новых переменных. добавим предсказанных значений и остатков из двух моделей. бахнем графики и посмотрим что у нас там происходит. в диаграмму рассеяния можно добавить линии предсказанных значений. помним, что первая модель была линейно вторая нет, линии также по разному отражают предсказания. следующий шаг по оси х предсказанные значения по у остатки. сначала увидели, что остатки распределены как бы по синусоиде, во второй модели остатки относительно равномерно распределены.
допущение о независимости остаков. это значит, что остатки не сгруппированы по категориям. наблюдения взяты из двух разных исследований, использование не усреднённых данных по испытуемым. Как выяснять. строим график по х номера по у остатки. в идеале должна быть прямая линия вокруг которой примерно равномерно распределен остатки. для обеих случаев картина похожая, но во втором немного сглаженнее.
гомоскедастиность (вспомнить бы ещё что это). изменчивость остатков должна быть одинаковой на разных уровнях независимой переменной. расшифровываю. разброс остатков должен быть одинаковый на всём протяжении моделируемого вектора. строим графики, в первом случае разброс небольшой в начале и большой в конце, во втором распределение остатков смещено к началу, но оно равномерное.
допущение о нормальности распределения остатков. строим гистограмки. в первой модели распределении немного скошено влево. можно поюзать кукуплот и увидеть что распределение остатков не очень нормальное. тест шапиро уилка тоже показывает что распределение не нормально. для второй модели на первый взгляд распределение выглядит нормально, но шапиро уилк говорят, что оно не нормальное. верим им.
29.07
Логистическая регрессия.
Основное свойство линейных регрессионных моделей - зависимая переменная должна быть количественной. логистическая регрессия позволяет оценить влияние предикторов на номинативную переменную (у которой есть две градации). сначала будет идея метода (который сложен по своей мат природе) а потом будем выяснять как оно работает в р.
в чём суть метода. как разные предикторы влияют на номинативную переменную с двумя градациями (самый простой вариант: событие либо случится, либо нет). пройду ли я этот курс с отличием или нет и какие факторы повлияют на исход. факторы: сон на учёбе, тусы, ботать. чего мы хотим от логистической регрессии: хотим рассчитать вероятность благоприятного исхода. в правой части уравнения стандартный джентельменский набор переменных. коэффициенты показывают, с какой "силой" переменные влияют на исход. в чём проблема. Например, х1 (тяга человека к математике) может принимать значения от отрицательной до положительной бесконечностей, а вероятность принимает значения от 0 до 1. в правой части разные количественные показатели с огромным зачастую размахом, а в левой диапазон значений ограничен.
из таких ситуаций помогает выйти возведение экспоненты в степень, которая равна показателю правой части уравнения. итого вероятность примет вид: числитель - экспонента в степени, знаменатель - 1 минус эта экспонента. преобразование значения вероятности таким образом, чтобы она также принимала значения от отрицательной до положительной бесконечностей, как и потенциальная правая часть уравнения.
рассчитываем odds, это отношения вероятности успеха (1) к вероятности неудачи (0). если нам известна вероятность успеха (0,2) то вероятность неудачи будет 1-0,2 (0,8), делим 0,2 на 0,8, получаем odds. чем выше вероятность успеха, тем выше odds. а теперь возьмём и возьмём натуральный логарифм от odds. что произойдёт. если значение меньше 1, то значение натлог будет меньше 0. чем выше вероятность удачного исхода, чем выше odds, тем больше значение натлог от odds. вероятность удачи 0.5 - это odds 1, и натлог 0 (надеюсь понятно). Теперь мы готовы смотреть на итоговую картину, которая есть отношение между вероятностью и натлог от odds. чем больше последнее, тем ближе первое к 1. в левой части будет уже не вероятность, а натлог от odds. называется всё это логит преобразование.
теперь можно правильно интерпретировать кофэ логрегр. как это работает в р. у нас есть набор данных, в котором есть информация о поле ученика, успеваемости по различным предметам, и окончание школы с отличием или нет. Задача: предсказать на основе пола и успеваемости исход "с отличием" или "не с отличием". Сначала ограничимся этим количеством переменных, потом будем думать, как включать неограниченное количество предикторов.
оценим на графике, как на медальность влияют баллы по чтению и математике и пол учащегося. на графике видно, что среди не получивших медаль больше мальчиков это таки раз, корреляцию мжду чтением и матаном это таки два, среди медалистов почти нет тех, кто получил меньше 50 баллов это таки три. и ещё среди медалистов больше девок (они старательнее). А теперь модель, которая всё это опишет. делаем формулу. функция glm (обобщённая линейная модель), сначала зависимая переменная, потом независимые, потом откуда берём все, потом в аргументе family пишем binomial. разберём простой вариант без взаимодействий. интерсепт это показатель рассчитываемый для девок при условии нулевых показателей по чтению и математике. этот интерсепт это значение логарифма odds, и он очень небольшой. как интерпретировать. вероятность получить медаль при нулевых баллах по чтению и математике КРАЙНЕ МАЛА. теперь. интерпретировать коэф для следующей переменной. если испытуемый девка, и если у неё баллы по математике фиксированы и не изменяются, то с единичным увеличением балла по чтению значение логарифма odds (вероятность получить медаль) будут увеличиваться на 0,066. интерпретация коэф переменной матан. если испытуемый девка и при неизменных баллах по чтению, то с единичным увеличением баллов по математике шансы получить медаль возрастают на 0,14 единиц. Из всего этого видно, что баллы по матану больше влияют на получение медали. Третий коэф. Если баллы по чтению и матану не меняются, то сам факт изменения положения в номинативной переменной ("смена пола") будет снижать вероятность получения медали. (лектор упомянул odds ratio и сказал, что про это можно почитать отдельно. хм.)
Что теперь делать с предсказанными значениями? в линейной регрессии точки можно спроецировать на регрессионную прямую и оценить предсказанное значение. Можно ли сделать что-то такое в логистической регрессии? усли бахнуть predict, то он даст логарифм от odds. результаты в таком случае удобнее получать в виде вероятности, для этого в predict нужно указать аргумент type = response. получится в итоге вероятность получить медаль, которая высчитывается на основании регрессионной модели. в датафрейм можно внести новую переменную с предсказанными значениям.
Вот мы получили вероятности а что с ними делать? можно придумать порог, который будет "отсекать" вероятности и мы сможем решать, состоится или нет событие.
так называемые рок-кривые? пакет rocr. есть две функции prediction и performance. первая функция сравнивает предсказанные и экспериментальные значения. второй показывает ошибки первого рода? там очень сложная для меня система пока. в зависимости от показателя у нас есть разная вероятность неправильного предсказания. теперь время выставлять пороги отсечения. с какого значения мы скажем, что событие произойдёт, с какого - что не произойдёт.
специфичность и чувствительность классификатора. создадим переменную, в которую вгоним отношение между порогом и специфичностью, потом переменную с порогом и чувствительностью. Специфичность - показатель, который говорит, насколько хорошо мы предсказываем отрицательный исход событий. Чувствительность - насколько хорошо мы предсказываем положительный исход событий. чем жёстче порог, тем ниже чувствительность. добавляем отношение между значением порога и общей эффективностью классификатора, строим график и видим точку пересечения трёх показателей. это значение и будет порог.
теперь создаём новую переменную, где будет храниться не просто вероятность исхода а реальное значение: да или нет. и можно создать новую переменную, где запишем правильно или нет предсказали.
как красиво вывести результаты. пакеты xtable и stargazer. делаем линейную регрессию с двумя количественными предикторами. потом анову с взаимодействием двух факторов. теперь можем посмотреть саммари данных, там есть таблица с коэффициентами. если надо конкретно эту таблицу скопировать. xtable на вход принимает модель, сохраняет это дело. потом функция print. аргументы что сохраняем, в каком формате, название файла куда сохранять. на примере наших данных сохранили в хтмл, и в браузере открывается таблица, пригодная к копипасту. А если хочешь сохранить свои данные красиво. для этого stargazer. работает с данными, которые мы получаем при использовании регрессионных моделей. аргументы модель, тип документа, что будет зависимой, а что независимой переменной, и какой аутпут. И таблица уже сильно красивше, её можно даже впихнуть куда-нибудь.
ВСЁ!
Так, с проганием в р закончили, анализ данных первая часть тоже, пора продолжать. На очереди вторая часть основ статистики и анализа данных в р. оба курса друг на друга ссылаются, можно запаралелить.
@темы: мысли вслух, жизненное, ужасные мерзости