library(readr)
library(vcd)
library(dplyr)
library(tidyverse)
library(BSDA)
library(car)
home = read.csv("C:/future/Statistica/solo/home_data.csv")
gen = read.csv("C:/future/Statistica/solo/genetherapy.csv")
atherosclerosis = read.csv("C:/future/Statistica/solo/atherosclerosis.csv")
birds = read.csv("C:/future/Statistica/solo/birds.csv")
titanic <- read.csv("https://stepic.org/media/attachments/course/524/train.csv")
titanic <- mutate(titanic,
Survived = factor(Survived, labels = c("No", "Yes")),
Pclass = factor(Pclass, labels = c("First", "Second", "Third")),
Sex = factor(Sex, labels = c("Female", "Male")))
Это значение измеряемого признака, которое встречается максимально часто
Mode <- function(x) {
ux <- unique(x)
ux[which.max(tabulate(match(x, ux)))]
}
Modes <- function(x) {
ux <- unique(x)
tab <- tabulate(match(x, ux))
ux[tab == max(tab)]
}
Mode(home$grade)
## [1] 7
ggplot(data = home) +
geom_bar(aes(x = factor(grade))) +
theme_bw()
Это значение признака, которое делит упорядоченное множество данных пополам
median(home$price)
## [1] 450000
ggplot(data = home) +
geom_histogram(aes(x = price/10000), binwidth = 5) +
scale_x_continuous(breaks = seq(from = 0, to = 1000, by = 45)) +
geom_vline(xintercept=median(home$price)/10000, color="red", linetype = "dashed", size = 1) + theme_bw()+
ggtitle("median")
Сумма всех значений на число элементов
Если ваше распределение симметрично и не имеет выбросов, можно использовать моду и медиану и среднее значение, они дадут +- то же самое значение. Если есть ассиметрия, среднее значение будет подвержено выбросам
Разность максимального и минимального значения. Выбросы могут искажать размах.
range(home$price)
## [1] 75000 7700000
Посмотреть насколько в среднем наши значения(каждое) отклоняется от среднего значения по выборке - рассчитать дисперсию
## Формула для расчета дисперсии генеральной совокупности
var_pop <- function(x) {
mean((x - mean(x))^2)
}
set.seed(1234)
sample = sample_n((home %>% select(price)), 3000)
ggplot(data = sample) +
geom_histogram(aes(x = price/10000), binwidth = 5) + theme_bw() +
ggtitle("Распределение случайной выборки")
ggplot(data = home) +
geom_histogram(aes(x = price/10000), binwidth = 5) +
scale_x_continuous(breaks = seq(from = 0, to = 1000, by = 45)) +
geom_vline(xintercept=sqrt(var_pop(home$price))/10000, color="red", linetype = "dashed", size = 1) +
geom_vline(xintercept=sqrt(var(sample$price))/10000, color="blue", linetype = "dashed", size = 1) +
theme_bw() +
ggtitle("Сигма(red) генеральной совокупности и SD(blue")
sd (standart deviation) - сигма для выборки. Используя степени свободы при расчете на выборке, мы получим значение более близкое к значению, которое получилось бы в генеральной совокупности.
Это три точки, которые делят наши данные на 4 равные части
test = as.data.frame(quantile(home$price/10000, prob=c(.25)))
colnames(test) = "test1"
ggplot(data = home) +
geom_boxplot(aes(y = price/10000)) + theme_bw() + scale_y_continuous(breaks = seq(from = 0, to = 800, by = 40)) +
coord_flip() +
geom_hline(yintercept=quantile(home$price/10000, prob=c(.25)), color="red", linetype = "dashed", size = 1) +
geom_hline(yintercept=quantile(home$price/10000, prob=c(.75)), color="red", linetype = "dashed", size = 1) +
geom_hline(yintercept=median(home$price/10000), color="red", linetype = "dashed", size = 1) +
geom_hline(yintercept=mean(home$price/10000), color="blue", linetype = "dashed", size = 1)+
geom_hline(yintercept=(32.195 - 1.5*32.305), color="green", linetype = "dashed", size = 1) +
geom_hline(yintercept=(64.5 + 1.5*32.305), color="green", linetype = "dashed", size = 1)
### 1.5 Нормальное распределение
Это унимодальное и симметричное распределение.
Z стандартизация - приведение среднего к нулю, а сигму к единице
Оно позволяет нам ответить на вопрос, какой процент наблюдений лежит в абсолютно любом интересующем нас диапазоне.
SE(Standart Error) - стандартное отклонение распределенния средних значений выборки. Показывает, насколько в среднем средние значения выборок отличаются от среднего в генеральной совокупности.
Чем больше размер выборки, тем меньше SE. Чем меньше стандартное отклонение генеральной совокупности, тем меньше SE.
Замечание к ЦПТ: Если число наблюдений выборки >30 и выборка репрезентативна, то в формуле SE вместо стандартного отклонения генеральной совокупности можно использовать стандартное отклонение любой выборки. То есть можно предсказать, какую стандартную ошибку будет иметь распределение выборочного среднего.
Замечание к ЦПТ: Пусть есть признак, распределенный КАК УГОДНО с некоторым средним и некоторым стандартным отклонением. Тогда, если мы будем выбирать из этой совокупности выборки объема n, то их средние тоже будут распределены нормально со средним равным среднему признака в ГС и отклонением стандартным отклонением, se, формулу которого мы уже приводили в прошлых шагах.
Замечание к ЦПТ: Распределение должно обладать конечной дисперсией, да и так бывает, бывают распределения, у которых дисперсия и вовсе не определена!
Замечание к ЦПТ: Распределение должно обладать конечной дисперсией, да и так бывает, бывают распределения, у которых дисперсия и вовсе не определена!
Обычно нам неизвестна генеральная совокупность и необходимое среднее ГС приходится искать через доверительные интервалы на выборочных данных. Если бы многократно повторяли наш эксперимент, то средние выборок распределились бы нормальным образом вокруг среднего и со стандартной ошибкой среднего. Если бы мы для каждого выборочного среднего рассчитали, например, интервал 1,96se, то в 95% случаев выборочные средние включили бы среднее по генеральной совокупности.
test = z.test(gen$expr, sigma.x = sqrt(var_pop(gen$expr)), conf.level = 0.95)
test$conf.int
## [1] 94.90672 97.72661
## attr(,"conf.level")
## [1] 0.95
Сначала допускаем, что верна нулевая гипотеза. Чем меньше p уровень значимости, тем больше оснований отклонить нулевую гипотезу. Односторонний критерий используется, когда отклонение в одну сторону невозможно. p-уровень значимости:
Не позволяет сказать, с какой вероятностью верна нулевая гипотеза.
Ничего не говорит о силе различий
Если p > 0.05 не позволяет отклонить нулевую гипотезу
Он ничего не говорит о правильности получаемых результатов
Ошибка 1 рода - отклонили нулевую, хотя она была верна
Ошибка 2 рода не отклонили нулевую, хотя была верна альтернативная
Чем меньше выборка, тем больше отклонения от среднего генеральной совокупности.
Если число наблюдений невелико и сигма неизвестна, используется распределение Стьюдента. Основное отличие от нормального распределения - у него более высокие хвосты распределения. Т.е. в отрезке +-2 сигмы будет лежать большее количество наблюдений. Чем больше степеней свободы df(n-1), тем больше данное распределение похоже на нормальное В отличие от нормального, форма t распределение изменяется в зависимости от степеней свободы.
Важно, чтобы дисперсии внутри наших групп были примерно одинаковы. Это, так называемое, требование гомогенности дисперсий. Проверить можно, используя критерии Фишера и Ливена. Важно Если n < 30, то очень важным требованием является нормальность распределения выборок. Если n > 30 то все должно быть норм, но лучше проверить.
library(car)
home$price = as.numeric(home$price)
qqPlot(home$sqft_living)
## [1] 12778 7253
Если распределение нормальное, значения должны идти +- по линии. 0 на графике - середина распределения. Спрва от нуля - значения выше ожидаемых. Слева от нуля - значения также выше ожидаемых.
Тесты для проверки нормальности: Колмагорова Shapiro - Wilk
Очень часто в экспериментах и исследованиях возникает необходимость сравнить несколько групп между собой. В таком случае мы можем применять однофакторный дисперсионный анализ. Та переменная, которая будет разделять наших испытуемых или наблюдения на группы (номинативная переменная с нескольким градациями) называется независимой переменной. А та количественная переменная, по степени выраженности которой мы сравниваем группы, называется зависимая переменная.
SST Состоит из SSB(Междугрупповая сумма квадратов) и SSW(Внутригрупповая сумма квадратов)
Если большинство сумм квадратов обеспечивается SSB, то можно говорить о значительных различиях между группами
library("ggpubr")
library(BSDA)
a = aov(expr ~ Therapy, data = gen)
summary(a)
## Df Sum Sq Mean Sq F value Pr(>F)
## Therapy 3 560.7 186.91 8.037 0.000152 ***
## Residuals 56 1302.3 23.25
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
library(ggplot2)
ggplot(data = gen) +
geom_boxplot(aes(x=factor(Therapy), y = expr)) +
theme_bw()
Основная идея Если бы мы многократно повторяли эксперимент, и нулевая гипотеза об отсутствии различий была верна, то числитель формулы стремился бы к нулю вместе с итоговым зачением F. Тогда большинство F значений были бы маленькими и находились бы в левой стороне распрределения фишера. Значение фишера всегда принимает положительные значения, поэтому вероятность всегда смотрим одностороннюю.
Используем, когда нужно много групп. Для тестов - используются всякие поправки. Например, поправка Бенферонни предлагает делить alpha на количество парных сравнений между группами.
Поправка Tukey HSD Похожа на t.test, но тут по другому расчитывается standrad error
summary(aov(expr ~ age + dose + age:dose, data = atherosclerosis))
## Df Sum Sq Mean Sq F value Pr(>F)
## age 1 197.5 197.45 7.450 0.00831 **
## dose 1 16.9 16.91 0.638 0.42755
## age:dose 1 0.9 0.93 0.035 0.85227
## Residuals 60 1590.3 26.50
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(aov(var4 ~ hormone + sex + hormone:sex, data = birds))
## Df Sum Sq Mean Sq F value Pr(>F)
## hormone 1 0.8 0.85 0.087 0.76965
## sex 1 0.1 0.12 0.012 0.91232
## hormone:sex 1 89.5 89.48 9.136 0.00368 **
## Residuals 60 587.7 9.79
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
При сравнении по двум независимым переменным: SS_TOTAL = SSW + SSB_A + SSB_B + SSB_A * SSB_B
Требования к данным:
Нормальность распределения зависмой в каждой из групп
Гомогенность дисперсий (примерно одинакова в каждой из групп). Проверять, например, боксплотом. Проверять можно тестом Levene’s test for Homogeneity
При больше 50 наблюдений, ANOVA устойчива к нарушению данных требований
На степе есть ссылки
cov > 0 положительная взаимосвязь
Формула - коэфф. корр. Пирсона.
Shared variance - коэффициент детерминации. Очень важное понятие, которое будет в теме регрессиии. Это часть изменчивости одной переменной, которая обусловлена тем, что она взаимосвязана с другой переменной. Показывает, в какой степени дисперсия одной переменной обусловлена “влиянием” другой переменной
Для рассчета p-value для корреляции используем t критерий при df = N-2
Необходимо, чтобы характер взаимосвязи был линейный и монотонный.
Желательно, чтобы переменные имели нормальное распределение, поскольку сама формула критерия связана со средними значениями.
Если условия не удовлетворяются, можно использовать непараметрические параметры: Spearman correlation
Ошибка коррелляции: она не говорит о причинно-следственной зависимости.
Коэффициент показывает силу и направление взаимосвязи двух количественных переменных.
Линия регрессии. На Y - зависимая. X - независимая(предиктор).
Смотрим, как одна переменная помогает предсказать зависимую переменную. Желательно, чтобы наша линия прохоидла через самый центр облака этих точек.
Метод наименьших квадратов - метод нахождения оптимальных параметров линейной регрессии, таких, что сумма квадратов ошибок (остатков) была минимальна.
Можно построить математическую модель, отображающую зависимость переменных
Если cor = 0, то линия регрессии проходит горизонтально по Y_bar.
При нулевых гипотезах угол наклона линии равняется нулю.
Здесь и появляется t критерий, готорый говорит о том, что при многократном повторении эксперимента коэффиценты угла наклона распределились бы нормальным образом.
Где SS_total - расстояние от точки до красного пунктира.
Если SS_res = SS_total, то R^2 стремится к нулю и наша модель никак не объясняется изменчивостью зависимой переменной.
Требования:
Линейная взаимосвязь X и Y
Нормальное распределение остатков
Гомоскедастичность - постоянная изменчивость остатков на всех уровнях независимой переменной
Линейную регрессию есть смысл использовать, когда она проходит через центр облака.
Сначала смотрим распределение остатков, scatter plot и потом решаем о приминении регрессии.
Когда среднее образование в штате увеличивается на 1%, уровень бедности уменьшается на 0.62%
Иногда регрес. прямую называют линией тренда. Мы можем предсказывать значения, которых у нас на самом деле нет.
Можно включать сразу несколько независимых переменных в модель.
Расчитывается исправленый R-squared из за множественности сравнений.
Когда у нас сильная коррелляция между предикторами, то становится сложно рассчитать необходимые показатели. Когда строим регр. модель, то не факт, что чем больше переменных - тем лучше модель.
Проверка гипотез между наблюдаемым и теоретическим распределением частот.
Observed - наблюдаемые значения. Expected значения согласно вероятности в нулевой гипотезе.
Чем больше значение ожидаемой частоты, тем большее отклонение от нее можно считать возможными и ожидаемыми. Нужно как то нормировать на общий размер выборки
Распределение данного коэффицента будет подчиняться специальному распределению Chi squared.
library(dplyr)
library(ggplot2)
o <- replicate(10000, sum(sample(x = c(0,1), size = 60, replace = TRUE)))
df <- data.frame(o)
df <-
df %>%
rowwise() %>%
mutate(chis = chisq.test(c(o,60-o))$statistic)
ggplot(df, aes(x=chis)) +
geom_histogram(fill="white", color="black",bins=30) + theme_bw()
Если бы многократно повторяли наш эксперимент, то чаще всего отклонения будут незначительны.
Распределение хи-квадрат с K степенями свободы - это распределение суммы квадратов k независимых стандартных нормальных случайных величин.
Чем больше степеней свободы, тем больше кумулятивный эффект от сложения их хи-квадратов. И, поэтому, при очень большом кол-ве степеней свободы хи-квадрат будет стремиться к нормальному распределению.
Нулевая гипотеза - что распределение частот распределено не равномерно.
При многократном повторении эксперимента хи-квадраты распределяются по закону хи-квадрата.
### 4.4 Анализ
таблиц сопряженности
t <- rbind(c(10, 6), c(5, 15))
chisq.test(t)$expected
## [,1] [,2]
## [1,] 6.666667 9.333333
## [2,] 8.333333 11.666667
Здесь используем df
= 1, поскольку, зная, сколько всего человек в каждой из групп, можно
узнать остальные ячейки, даже если мы знаем только данные одной
ячейки.
В R при расчете таблицы 2x2 автоматически используется Поправка Йетса.
students = rbind(c(15,9), c(11,6))
chisq.test(students)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: students
## X-squared = 1.2684e-31, df = 1, p-value = 1
Свойство про больше 5 - если меньше, то меньше сумма нормально распределенных величин и распределение будет совсем другим.
Интерпетация результатов при хи-квадрате - он не рассчитывает никакого показателя про отдельно связанную ячейку. Это чревато тем, что при большой таблице сопряженности результаты не говорят о том, в какой ячейке было отклонение.
t = rbind(c(20,15), c(11,12), c(7,9))
chisq.test(t)
##
## Pearson's Chi-squared test
##
## data: t
## X-squared = 0.95441, df = 2, p-value = 0.6205
chisq.test(t)$expected
## [,1] [,2]
## [1,] 17.972973 17.027027
## [2,] 11.810811 11.189189
## [3,] 8.216216 7.783784
t = rbind(c(18,7), c(6,13))
chisq.test(t)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: t
## X-squared = 5.5772, df = 1, p-value = 0.0182
library(vcd)
a = as.data.frame(rbind(c(18,7), c(6,13)))
colnames(a) <- c("Yes", "No")
row.names(a)<- c("Placebo","Aspirin")
file_path <- "http://www.sthda.com/sthda/RDoc/data/housetasks.txt"
housetasks <- read.delim(file_path, row.names = 1)
dt <- as.table(as.matrix(a))
assoc(dt, gp=shading_max, main= "hz")
Не нужно забывать о требованиях к Хи-Квадрату.
Когда нужен намного меньший объем выборы, для этого существует такой критерий. Работает на экстремально маленьких размерах выборки.
Он решает тест вручную. Считает вероятность получить такие переменные вручную.
С помощью зеленой формулы появляется возможность получить вероятность получить данный набор данных
Рассчитаем вероятность получить такие данные, при условии что нет никакой разницы выздоровления между двумя лекарствами
На скрине показан
смысл: алгоритм делает перестановки данных и рассчитывает вероятность
получить такие данные случайно. Если p-value меньше необходимого, то
отвергаем гипотезу о том, что вероятность вылечиться Лекарством 1 или
Лекарством 2 одинаковы.
fisher.test(rbind(c(3,1), c(1,3)))
##
## Fisher's Exact Test for Count Data
##
## data: rbind(c(3, 1), c(1, 3))
## p-value = 0.4857
## alternative hypothesis: true odds ratio is not equal to 1
## 95 percent confidence interval:
## 0.2117329 621.9337505
## sample estimates:
## odds ratio
## 6.408309
Логистическая регрессия применяется при номинативных переменах и одной независимой.
При ее помощи можно проверять гипотезы о взаимосвязи нескольких номинативных переменных.
Единственное ограничение - зависимая переменная должна иметь две градации, но и это можно будет обойти.
Непараметрические тесты можно использовать и при параметрических данных, но популярность низка.
Основная идея в том, что зависимая п. - номинативная с двумя градациями. Независимые - как номинативные, так и нет с любым кол-во градаций.
В анализе шансов может помочь натуральный логарифм. Значение шансов меньше единицы будут давать отрицательные значение, больше -> положительные.
Выше решали проблему: была математическая несостыковка. В правой части линейная комбинация предикторов, а слева была только две градации номинативной переменной. После применения логита теперь в левой части логарифм шансов.
В качестве предикторов могут выступать как количественные, так и номинативные переменные.
После преобразования вероятности в логарифм шансов предсказания регрессионной модели могут быть на промежутке от минус до плюс бесконечности.
intecept - число, которое максимально удачно спрогнозирует нам модель. Такое число - натуральный логарифм шансов получить положительный исход зависимой переменной для случайно выбранного (пассажира титаника).
Это также можно интерпетировать как проверку нулевой гипотезы о равномерном распределении градаций номинальной зависимой переменной. (Pr(>|z|))
Когда мы говорим про лог. регрессию, все коэффициенты, которые мы получаем - обычно это значения логарифма.
mosaic(~ Sex + Survived, data=titanic)
simple_fit <- glm(Survived ~ 1, titanic, family = "binomial")
summary(simple_fit)
##
## Call:
## glm(formula = Survived ~ 1, family = "binomial", data = titanic)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -0.9841 -0.9841 -0.9841 1.3839 1.3839
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.47329 0.06889 -6.87 6.4e-12 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 1186.7 on 890 degrees of freedom
## Residual deviance: 1186.7 on 890 degrees of freedom
## AIC: 1188.7
##
## Number of Fisher Scoring iterations: 4
std.Error - если бы многократно повторяли эксперимент и выбирали выборку с такой же номинативной переменной и смотрели бы значимые различия логарифма шансов от нуля. Если верна H0, то мы не должны часто получать отклонения от данных в нулевой гипотезе.
То логарифм шансов распределился бы нормальным образом, поскольку мы бы совершенно случайно получали отклонения в разные стороны.
sd - это и есть стандартная ошибка этого нормального распределения.
ln(1) = 0
Если мы разделим Intercept / sd, то мы ответим на вопрос, сколько стандартных отклонений поместилось в значение от нуля до полученного коэффициента.
И, поэтому, поскольку, это нормальное распределение, можем получить p-value для таких или более выражденных значений intercept.
По сравнению с chi-squared, такой intercept помогает сделать больше интерпретаций вывода.
Если подставить экспоненту - избавимся от логарифма.
При помощи нормального распределения описывается распределение коэффициентов логистической регрессии, если верна нулевая гипотеза
fit1 <- glm(Survived ~ Sex, titanic, family = "binomial")
summary(fit1)
##
## Call:
## glm(formula = Survived ~ Sex, family = "binomial", data = titanic)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -1.6462 -0.6471 -0.6471 0.7725 1.8256
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 1.0566 0.1290 8.191 2.58e-16 ***
## SexMale -2.5137 0.1672 -15.036 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 1186.7 on 890 degrees of freedom
## Residual deviance: 917.8 on 889 degrees of freedom
## AIC: 921.8
##
## Number of Fisher Scoring iterations: 4
coef(fit1)
## (Intercept) SexMale
## 1.056589 -2.513710
Получился только SexMale. Почему? Это так называемое отношение шансов
table(titanic$Survived, titanic$Sex)
##
## Female Male
## No 81 468
## Yes 233 109
У женщин больше выжило, у мужчин больше погибло.
Шансы выжить для мужчин и женщин:
odds_male <- 93 / 360
odds_female <- 197 / 64
odds_male
## [1] 0.2583333
odds_female
## [1] 3.078125
Посмотрим логарифмы шансов:
log(odds_male)
## [1] -1.353505
log(odds_female)
## [1] 1.124321
Сравним шансы выжить для женщин и для мужчин (поделенные шансы мужчин на шансы женщин):
odds_ratio <- odds_male / odds_female
log(odds_ratio)
## [1] -2.477825
Видно, что их поделенные шансы 0.08392555. Это значит, что у женщин шансы выше.
А логарифм отношения их шансов это и есть SexMale.
Еще раз почему нету SexFemale?
Всегда, когда выполняется регрессионная модель, компьютер за нас переписывает данные в немножко другой формат, где из одного столбика номинативных переменных с градациями делает столбики по каждой градацией.
Можно оставить один столбик, потому что зная значение одного столбика, всегда можно узнать значение другого столбика, поскольку градаций две(или может быть несколько)
Для женщин sex_male будет 0, поэтому при математическом вычислении останется только intercept.
Коэффициент -2.74 означает, что log(odds_m/odds_f) < 0
Лог регрессия позволяет сравнивать шансы.
Intercept обычно выбирается по названию фактора(алфавит и т.д.)
Факторы + intercept - цена перехода, например, человека из 1 класса титаника в третий класс.
fit2 <- glm(Survived ~ Sex * Pclass, titanic, family = "binomial")
summary(fit2)
##
## Call:
## glm(formula = Survived ~ Sex * Pclass, family = "binomial", data = titanic)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -2.6248 -0.5853 -0.5395 0.4056 1.9996
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 3.4122 0.5868 5.815 6.06e-09 ***
## SexMale -3.9494 0.6161 -6.411 1.45e-10 ***
## PclassSecond -0.9555 0.7248 -1.318 0.18737
## PclassThird -3.4122 0.6100 -5.594 2.22e-08 ***
## SexMale:PclassSecond -0.1850 0.7939 -0.233 0.81575
## SexMale:PclassThird 2.0958 0.6572 3.189 0.00143 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 1186.7 on 890 degrees of freedom
## Residual deviance: 798.1 on 885 degrees of freedom
## AIC: 810.1
##
## Number of Fisher Scoring iterations: 6
intercept - логарифм шансов выжить для женщин в первом классе
coef(fit2)
## (Intercept) SexMale PclassSecond
## 3.4122472 -3.9493901 -0.9555114
## PclassThird SexMale:PclassSecond SexMale:PclassThird
## -3.4122472 -0.1849918 2.0957553
Взаимодействие между факторами говорит о том, что взаимосвязь между полом и выживаемости проявляется по разному в зависимости от класса билета.
table(titanic$Survived, titanic$Pclass , titanic$Sex)
## , , = Female
##
##
## First Second Third
## No 3 6 72
## Yes 91 70 72
##
## , , = Male
##
##
## First Second Third
## No 77 91 300
## Yes 45 17 47
# (Intercept)
female_p1_odds <- 82 / 3
log(female_p1_odds)
## [1] 3.308107
# Sexmale
male_p1_odds <- 40 / 61
log(male_p1_odds)
## [1] -0.4219944
log(male_p1_odds / female_p1_odds )
## [1] -3.730101
# PclassSecond
female_p2_odds <- 68 / 6
log(female_p2_odds / female_p1_odds )
## [1] -0.8803587
# PclassThird
female_p3_odds <- 47 / 55
log(female_p3_odds / female_p1_odds )
## [1] -3.465293
# SexMale:PclassSecond
male_p2_odds <- 15 / 84
log(male_p2_odds / female_p2_odds ) - log(male_p1_odds / female_p1_odds )
## [1] -0.4204135
#Sexmale:factorThird
male_p3_odds <- 38 / 215
log(male_p3_odds / female_p3_odds ) - log(male_p1_odds / female_p1_odds )
## [1] 2.154235
anova(fit1, fit2, test="Chisq")
## Analysis of Deviance Table
##
## Model 1: Survived ~ Sex
## Model 2: Survived ~ Sex * Pclass
## Resid. Df Resid. Dev Df Deviance Pr(>Chi)
## 1 889 917.8
## 2 885 798.1 4 119.71 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(fit2, test = "Chisq")
## Analysis of Deviance Table
##
## Model: binomial, link: logit
##
## Response: Survived
##
## Terms added sequentially (first to last)
##
##
## Df Deviance Resid. Df Resid. Dev Pr(>Chi)
## NULL 890 1186.66
## Sex 1 268.851 889 917.80 < 2.2e-16 ***
## Pclass 2 90.916 887 826.89 < 2.2e-16 ***
## Sex:Pclass 2 28.791 885 798.10 5.598e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Модель с разными переменными:
fit3 <- glm(Survived ~ Sex + Pclass + Age, titanic, family = "binomial")
anova(fit3, test="Chisq")
## Analysis of Deviance Table
##
## Model: binomial, link: logit
##
## Response: Survived
##
## Terms added sequentially (first to last)
##
##
## Df Deviance Resid. Df Resid. Dev Pr(>Chi)
## NULL 713 964.52
## Sex 1 213.816 712 750.70 < 2.2e-16 ***
## Pclass 2 78.269 710 672.43 < 2.2e-16 ***
## Age 1 25.148 709 647.28 5.311e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Чаще всего связано с выбросами
Такие ошибки не будут сильно сказываться на ошибке t-test’a.
Когда мы используем критерий t Стьюдента:
Число 30 не обладает магическим свойством.
Если распределение отлично от нормального, можно играть со статистикой в испорченный телефон.
Важно смотреть на нормальность распределения!
Если данные отличаются от нормального распределения, дисперсии гомогенны - применяем непараметрический
Критерий Манна-Уитни не сравнивает медианы!
Если одновременно нарушается требование гомогенности дисперсий и нормальности распределения при дисперсионном анализе, следует использовать его непараметрический аналог - Критерий Краскела - Уоллиса
Они сами ищут “правильный ответ” в наших данных.
Кластерный анализ бежит по данным и находит группы.
Метод главных компонент смотрит на переменные и ставит вопрос: можно ли сократить и сгруппировать наши данные?
Также бывает иерархическия кластеризация (и много других)
library(ggplot2)
ggplot(iris, aes(Sepal.Length, Petal.Length, color = Species)) +
geom_point()+
ggtitle("Данные о лепестках и чашечках")
Центроид в кластерах - так сказать геометрический центр точек. Ровна середина облака точек.
Центроид - точка, где x,y - средние значения по длине и ширине облака
Повторять поправки позиций центроидов до того момента, пока лучше сделать уже будет нельзя.я