Когда использовать aov() вместо anova() в r


Функции aov() и anova() в R кажутся похожими, но на самом деле мы используем их в двух разных сценариях.

Мы используем aov() , когда хотим подогнать модель ANOVA и отобразить результаты в сводной таблице ANOVA.

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

Следующие примеры показывают, как использовать каждую функцию на практике.

Пример 1. Как использовать aov() в R

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

Мы набираем 90 человек для участия в эксперименте, в котором случайным образом назначаем 30 человек следовать программе А, программе Б или программе С в течение месяца.

Следующий код показывает, как использовать функцию aov() в R для выполнения этого одностороннего дисперсионного анализа:

 #make this example reproducible
set. seeds (0)

#create data frame
df <- data. frame (program = rep(c("A", "B", "C"), each= 30 ),
                 weight_loss = c(runif(30, 0, 3),
                                 runif(30, 0, 5),
                                 runif(30, 1, 7)))

#fit one-way anova using aov()
fit <- aov(weight_loss ~ program, data=df)

#view results
summary(fit)

            Df Sum Sq Mean Sq F value Pr(>F)    
program 2 98.93 49.46 30.83 7.55e-11 ***
Residuals 87 139.57 1.60                     
---
Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Из результатов модели мы видим, что значение p программы (0,0000000000755) меньше 0,05, что означает, что существует статистически значимая разница в средней потере веса между тремя программами.

Пример 2. Как использовать anova() в R

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

Полная модель: оценка = β 0 + B 1 (часы) + B 2 (часы) 2

Сокращенная модель: оценка = β 0 + B 1 (часы)

В следующем коде показано, как использовать функцию anova() в R для выполнения проверки отсутствия соответствия, чтобы определить, обеспечивает ли полная модель значительно лучшее соответствие, чем уменьшенная модель:

 #make this example reproducible
set. seeds (1)

#create dataset
df <- data.frame(hours = runif(50, 5, 15), score=50)
df$score = df$score + df$hours^3/150 + df$hours*runif(50, 1, 2)

#view head of data
head(df)

      hours score
1 7.655087 64.30191
2 8.721239 70.65430
3 10.728534 73.66114
4 14.082078 86.14630
5 7.016819 59.81595
6 13.983897 83.60510

#fit full model
full <- lm(score ~ poly(hours,2), data=df)

#fit reduced model
reduced <- lm(score ~ hours, data=df)

#perform lack of fit test using anova()
anova(full, reduced)

Analysis of Variance Table

Model 1: score ~ poly(hours, 2)
Model 2: score ~ hours
  Res.Df RSS Df Sum of Sq F Pr(>F)   
1 47 368.48                                
2 48 451.22 -1 -82.744 10.554 0.002144 **
---
Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Поскольку значение p в выходной таблице (0,002144) меньше 0,05, мы можем отклонить нулевую гипотезу теста и сделать вывод, что полная модель статистически значительно лучше подходит, чем сокращенная модель.

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные задачи в R:

Как выполнить односторонний дисперсионный анализ в R
Как выполнить двусторонний дисперсионный анализ в R
Как выполнить повторные измерения ANOVA в R

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *