【问题标题】:How to estimate the source of variation in R? (For two-way ANOVA)如何估计 R 的变化来源? (对于双向方差分析)
【发布时间】:2021-02-23 01:05:01
【问题描述】:

在我的实验室中,我们使用了统计软件包,但现在我们使用 R 进行统计。

使用统计软件,在进行双向 ANOVA 后,结果表格包括“变异来源”和“总变异百分比”。如何从 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

在统计软件中:

【问题讨论】:

  • 您可以通过将单个 Sum Sq 值除以 Sum Sq 值的总和来手动计算。前任。 Light的情况下,8723/(354+8723+6+34)

标签: r anova summary


【解决方案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 或统计专家,所以我需要你的一个简单提示:如何创建 .doc 或 .txt 或。 pdf 文件与此表?我尝试使用 sink("path") ,然后使用 (two_wayANOVA),然后使用 sink() 但没有用
  • 导出此数据的非常简单的方法是将其保存为 .csv 文件,然后使用电子表格或文本处理程序打开它。保存:write.csv(output, "myfile.csv" )
  • 嗨,我又来了。有一种方法可以看出你教我把“*”的意义放在表里吗?
猜你喜欢
  • 1970-01-01
  • 2019-01-17
  • 2011-02-25
  • 2021-09-19
  • 1970-01-01
  • 2016-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多