Проведение теста ANOVA из таблицы данных с несколькими столбцами - PullRequest
1 голос
/ 29 февраля 2020

Есть ли способ в R выполнить тест ANOVA из таблицы данных, которая выглядит следующим образом:

Trees Avg_number_1m Avg_number_2m Avg_number_3m Avg_number_4m
1   Tree_1          15.2          15.0          15.2          12.0
2   Tree_2          16.2          15.4          14.2          15.4
3   Tree_3          14.4           9.2           3.2           1.6
4   Tree_4          14.6           5.6          10.4           9.2
5   Tree_5          15.2          13.0           7.4           3.0
6   Tree_6          14.0          12.0          13.0          11.2
7   Tree_7          13.8           7.8           7.2           2.0
8   Tree_8          10.8           5.8           4.4           2.4
9   Tree_9          12.4           9.6           6.8           2.6
10 Tree_10          15.6          11.0           7.2           1.8
11 Tree_11           7.6           7.4           9.0           1.8
12 Tree_12          13.8           7.8           7.2           2.0
13 Tree_13          10.8           5.8           4.4           1.6
14 Tree_14          15.2          15.0          15.2          12.0
15 Tree_15          16.2          15.4          14.2          15.0
16 Tree_16          12.4           9.2           3.2           1.6
17 Tree_17          14.6           5.6          10.4           9.2
18 Tree_18          15.2          13.0           7.4           3.0
19 Tree_19          14.0          14.4          13.2          13.8
20 Tree_20          11.0           5.2           4.4           0.8

Я пытался найти учебники о том, как это сделать, но тот факт, что Команде aov требуется одна переменная x и одна y, которая меня отбросила. Любая помощь очень ценится.

1 Ответ

2 голосов
/ 29 февраля 2020

Итак, это ваши данные:

x = structure(list(Trees = structure(c(1L, 12L, 14L, 15L, 16L, 17L, 
18L, 19L, 20L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 13L), .Label = c("Tree_1", 
"Tree_10", "Tree_11", "Tree_12", "Tree_13", "Tree_14", "Tree_15", 
"Tree_16", "Tree_17", "Tree_18", "Tree_19", "Tree_2", "Tree_20", 
"Tree_3", "Tree_4", "Tree_5", "Tree_6", "Tree_7", "Tree_8", "Tree_9"
), class = "factor"), Avg_number_1m = c(15.2, 16.2, 14.4, 14.6, 
15.2, 14, 13.8, 10.8, 12.4, 15.6, 7.6, 13.8, 10.8, 15.2, 16.2, 
12.4, 14.6, 15.2, 14, 11), Avg_number_2m = c(15, 15.4, 9.2, 5.6, 
13, 12, 7.8, 5.8, 9.6, 11, 7.4, 7.8, 5.8, 15, 15.4, 9.2, 5.6, 
13, 14.4, 5.2), Avg_number_3m = c(15.2, 14.2, 3.2, 10.4, 7.4, 
13, 7.2, 4.4, 6.8, 7.2, 9, 7.2, 4.4, 15.2, 14.2, 3.2, 10.4, 7.4, 
13.2, 4.4), Avg_number_4m = c(12, 15.4, 1.6, 9.2, 3, 11.2, 2, 
2.4, 2.6, 1.8, 1.8, 2, 1.6, 12, 15, 1.6, 9.2, 3, 13.8, 0.8)), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", 
"14", "15", "16", "17", "18", "19", "20"))

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

enter image description here

Итак, мы загружаем несколько библиотек, чтобы получить данные в правильной форме:

library(ggplot2)
library(tidyr)

# first we make it a "long" format
df = pivot_longer(x,-Trees,names_to="Height_levels")

Теперь мы визуализируем для каждого отдельного дерева, как оно выглядит:

ggplot(df,aes(x=Height_levels,y=value,col=Trees)) + geom_point() + 
geom_line(aes(group=Trees)) + theme(legend.position="top")

enter image description here

Это говорит нам о двух вещах: нам нужно настроить дерево, а затем проверить, когда существуют различия между высотами, наиболее прямым является используйте anova для проверки:

aovfit = aov(value ~ Trees + Height_levels,data=df)                    
summary(aovfit)
              Df Sum Sq Mean Sq F value   Pr(>F)    
Trees         19  877.9   46.20   7.692 8.98e-10 ***
Height_levels  3  588.9  196.31  32.682 2.02e-12 ***
Residuals     57  342.4    6.01 

и post-ho c с Тьюки:

posthoc = TukeyHSD(aovfit)
posthoc$Height_levels
                             diff      lwr        upr        p adj
Avg_number_2m-Avg_number_1m -3.49 -5.54109 -1.4389103 1.930647e-04
Avg_number_3m-Avg_number_1m -4.77 -6.82109 -2.7189103 4.752523e-07
Avg_number_4m-Avg_number_1m -7.55 -9.60109 -5.4989103 1.182687e-11
Avg_number_3m-Avg_number_2m -1.28 -3.33109  0.7710897 3.586375e-01
Avg_number_4m-Avg_number_2m -4.06 -6.11109 -2.0089103 1.429319e-05
Avg_number_4m-Avg_number_3m -2.78 -4.83109 -0.7289103 3.779450e-03

Если вы хотите, вы также можете установить линейную модель, где высота является непрерывной переменной, и протестируйте ее с помощью anova:

df$Height = as.numeric(gsub("[^0-9]","",as.character(df$Height_levels)))
aov_continuous = aov(value ~ Trees + Height,data=df)
summary(aov_continuous)

Df Sum Sq Mean Sq F value   Pr(>F)    
Trees       19  877.9    46.2   7.601 7.74e-10 ***
Height       1  572.6   572.6  94.199 7.78e-14 ***
Residuals   59  358.7     6.1 

И коэффициенты подскажут, сколько в среднем вы получите меньших шипов, поднявшись на 1 м. В данном случае это около -2,39 ..

aov_continuous$coefficients
[...]
       Height 
-2.393000e+00 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...