пользователей: 30398
предметов: 12406
вопросов: 234839
Конспект-online
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

Однофакторный дисперсионный анализ

Очень часто в экспериментах и исследованиях возникает необходимость сравнить несколько групп между собой. В таком случае мы можем применять однофакторный дисперсионный анализ.  Та переменная, которая будет разделять наших испытуемых или наблюдения на группы (номинативная переменная с нескольким градациями) называется независимой переменной. А та количественная переменная, по степени выраженности которой мы сравниваем группы, называется зависимая переменная.

 

Исходными положениями дисперсионного анализа являются

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

SST  - общая сумма квадратов (total sum of squares)
SSW  - внутригрупповая сумма квадратов (sum of squares within groups)


SSB  - межгрупповая сумма квадратов (sum of squares between groups)

- где xijxij обозначает наблюдение jj в группе ii (например, x13x13 будет третьим наблюдением из первой группы), ¯xixi¯ - среднее значение в группе ii, a ¯X - общее среднее значение (рассчитанное по всем имеющимся наблюдениям). 

Пример в R

# Дисперсионный анализ ANOVA (от англ. ANalysis Of VAriance)
# Даны три вектора x1, x2, x3
# Проверить нулевую гипотезу о значимости различий средних этих векторов
x1 <- c(3, 1, 2)
x2 <- c(5, 3, 4)
x3 <- c(7, 6, 5)
m <- 3 # количество групп

N <- length( c(x1, x2, x3) ) # количество переменных
xM <- mean( c(x1, x2, x3) ) # общее среднее
SST <- sum( c((x1-xM)^2, (x2-xM)^2, (x3-xM)^2) ) # общая сумма квадратов (total sum of squares)
dF <- N-1 # число степеней свободы

# SSW  - внутригрупповая сумма квадратов (sum of squares within groups)
SSW <- sum(c((x1 - mean(x1))^2, (x2 - mean(x2))^2, (x3 - mean(x3))^2))
dFw <- N-m # число степеней свободы 

# SSB  - межгрупповая сумма квадратов (sum of squares between groups)
SSB <- sum((mean(x1)-xM)^2, (mean(x2)-xM)^2, (mean(x3)-xM)^2)*length(x1)
dFb <- m-1 # число степеней свободы 

# F-критерий
F <- (SSB/(m-1)) / (SSW/(N-m))

pf(F, dFb, dFw, lower.tail = FALSE)

Калькулятор для расчета F-критерия
https://gallery.shinyapps.io/dist_calc/
(сначала подставляется SSB)

 

#Рассмотренный ниже пример заимствован из книги Maindonald & Braun (2010). 

#Имеются данные о весе томатов (все растение целиком; weight, в кг), которые выращивали в течение 2 месяцев при трех разных экспериментальных условиях (trt, от  treatment)  - на воде (water), в среде с добавлением удобрения (nutrient), а также в среде с добавлением удобрения и гербицида 2,4-D (nutrient+24D):

 

# Создадим таблицу с данными:

tomato <-   data.frame(weight=  
              c(1.5, 1.9, 1.3, 1.5, 2.4, 1.5, # water
                 1.5, 1.2, 1.2, 2.1, 2.9, 1.6, # nutrient
                 1.9, 1.6, 0.8, 1.15, 0.9, 1.6), # nutrient+24D
             trt = rep(c("Water", "Nutrient", "Nutrient+24D"),
                       c(6, 6, 6)))

#Переменная trt представляет собой фактор с тремя уровнями. 

#Для более наглядного сравнения экспериментальных условий в последующем, сделаем уровень "water" базовым (англ. reference), т.е. уровнем, с которым R будет сравнивать все остальные уровни. Это можно сделать при помощи функции relevel():

tomato$trt <- relevel(tomato$trt, ref = "Water")

#Чтобы лучше понять свойства имеющихся данных, визуализируем их при помощи одномерной диаграммы рассеяния:

 attach(tomato)
stripchart(weight ~ trt, xlab = "Вес, кг", ylab = "Условия")

# Вычисление групповых средних
tapply(weight, trt, mean)

#Подлежащую проверке нулевую гипотезу можно сформулировать так:  исследованные условия выращивания растений не оказывают никакого влияния на вес последних. 

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

Дисперсионный анализ в R можно выполнить при помощи базовых функций aov() и lm(). В этом сообщении мы рассмотрим только функцию aov(). Для нашего примера получаем:
 
summary(aov(weight ~ trt, data = tomato))

В приведенных результатах строка, обозначенная как trt, соответствует источнику дисперсии в данных, связанному с действием изучаемого экспериментального фактора - условий выращивания растений. Строка, обозначенная как Residuals, характеризует внутригрупповую дисперсию (ее еще называют шумовой или остаточной дисперсией - в том смысле, что она не может быть объяснена влиянием экспериментального фактора). Столбец Sum Sq содержит 

SSBSSB иSSWSSW, а столбец Mean Sq -  меж- и внутригрупповую дисперсии, MSBMSB и MSWMSW

В столбце F valueпредставлено рассчитанное по имеющимся данным значение F-критерия. Наконец, в столбцеPr(>F) представлена вероятность получить F-значение, равное или превышающее то значение, которое мы в действительности рассчитали по имеющимся выборочным данным (при условии, что нулевая гипотеза верна). Как видим, эта вероятность достаточно высока. Во всяком случае, она превышает 5%-ный уровень значимости, в связи с чем мы заключаем, что нулевая гипотеза верна. Таким образом, с достаточно высокой степенью уверенности мы можем утверждать, что экспериментальные условия не оказали существенного влияния на вес растений.

Построить график
library(ggplot2)
library(dplyr)

gr_df <- group_by(tomato, trt)
se_data <- summarise(gr_df, mean_expr= mean(weight),
                     y_max=mean(weight)+1.96*sd(weight)/sqrt(length(weight)),
                     y_min=mean(weight)-1.96*sd(weight)/sqrt(length(weight)))

Label_X <- c('Water', 'Nutrient', 'Nutrient+24D')

ggplot(se_data, aes(factor(trt), mean_expr))+
  geom_errorbar(aes(ymin=y_min, ymax=y_max), width=0.2, lwd=1)+
  geom_point(shape=21, size=3, fill='white')+
  ggtitle("Виды полива")+
  xlab("")+ 
  scale_y_continuous(name='Вес помидоров', 
                     limits = c(0.5, 2.5), breaks = seq(0.5, 2.5,0.5))+
  scale_x_discrete(labels=Label_X)+
  theme(plot.title = element_text(hjust=0.5))
 


20.09.2019; 10:09
хиты: 324
рейтинг:0
Точные науки
математика
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2024. All Rights Reserved. помощь