如何估计 R 中的变异来源? (对于双向方差分析)
How to estimate the source of variation in R? (For two-way ANOVA)
我实验室用的是统计软件包,现在用R做统计。
使用统计软件,经过双向方差分析后,table结果包括“变异来源”和“总变异百分比”。我如何从 R 中获取这些值?
示例:
这个数据集
Temperature <- factor(c(rep("cold", times = 4),
rep("hot", times = 4)),
levels = c("cold", "hot"))
Light <- factor(rep(c(rep("blue", times = 2),
rep("yellow", times = 2)),
times = 2),
levels = c("blue", "yellow"))
Result <- c(90.40, 85.20, 21.70, 25.30,
75.12, 77.36, 6.11, 10.8)
Data <- data.frame(Temperature, Light, Result)
R 中的 2 向方差分析:
two_wayANOVA <- aov(data = Data,
formula = Result ~ Temperature * Light)
summary(two_wayANOVA)
Df Sum Sq Mean Sq F value Pr(>F)
Temperature 1 354 354 42.250 0.00289 **
Light 1 8723 8723 1041.366 5.5e-06 ***
Temperature:Light 1 6 6 0.725 0.44250
Residuals 4 34 8
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
统计软件中:
正如@yh6 评论的那样,可以通过将 SumSq 除以“Sum Sq”的总和来确定变异来源。
broom 包有方便的 tidy
函数,可以从 aov
函数中获取输出,并将其制作成数据框以便于处理。
library(broom)
output <- tidy(two_wayANOVA)
output$variationSource <- output$sumsq/sum(output$sumsq)*100
output
# A tibble: 4 x 7
term df sumsq meansq statistic p.value variationSource
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Temperature 1 354. 354. 42.2 0.00289 3.88
2 Light 1 8723. 8723. 1041. 0.00000550 95.7
3 Temperature:Light 1 6.07 6.07 0.725 0.442 0.0666
4 Residuals 4 33.5 8.38 NA NA 0.368
更新
要重新创建重要性列,请将此行添加到脚本中:
output$sig <- cut(output$p.value, breaks=c(0, 0.001, 0.01, 0.05, 0.1, 1),
labels=c( '***', '**' , '*' , '.', ' ' ))
我实验室用的是统计软件包,现在用R做统计。
使用统计软件,经过双向方差分析后,table结果包括“变异来源”和“总变异百分比”。我如何从 R 中获取这些值?
示例: 这个数据集
Temperature <- factor(c(rep("cold", times = 4),
rep("hot", times = 4)),
levels = c("cold", "hot"))
Light <- factor(rep(c(rep("blue", times = 2),
rep("yellow", times = 2)),
times = 2),
levels = c("blue", "yellow"))
Result <- c(90.40, 85.20, 21.70, 25.30,
75.12, 77.36, 6.11, 10.8)
Data <- data.frame(Temperature, Light, Result)
R 中的 2 向方差分析:
two_wayANOVA <- aov(data = Data,
formula = Result ~ Temperature * Light)
summary(two_wayANOVA)
Df Sum Sq Mean Sq F value Pr(>F)
Temperature 1 354 354 42.250 0.00289 **
Light 1 8723 8723 1041.366 5.5e-06 ***
Temperature:Light 1 6 6 0.725 0.44250
Residuals 4 34 8
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
统计软件中:
正如@yh6 评论的那样,可以通过将 SumSq 除以“Sum Sq”的总和来确定变异来源。
broom 包有方便的 tidy
函数,可以从 aov
函数中获取输出,并将其制作成数据框以便于处理。
library(broom)
output <- tidy(two_wayANOVA)
output$variationSource <- output$sumsq/sum(output$sumsq)*100
output
# A tibble: 4 x 7
term df sumsq meansq statistic p.value variationSource
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Temperature 1 354. 354. 42.2 0.00289 3.88
2 Light 1 8723. 8723. 1041. 0.00000550 95.7
3 Temperature:Light 1 6.07 6.07 0.725 0.442 0.0666
4 Residuals 4 33.5 8.38 NA NA 0.368
更新
要重新创建重要性列,请将此行添加到脚本中:
output$sig <- cut(output$p.value, breaks=c(0, 0.001, 0.01, 0.05, 0.1, 1),
labels=c( '***', '**' , '*' , '.', ' ' ))