双向ANOVA,是R比较正确的数据?

时间:2018-01-12 13:49:58

标签: r anova

pip install spyder

我已经制作了一小部分数据集,它会查看2年内3个地点的平均百分比覆盖率。我相信我需要做一个双因素方差分析作为统计检验,但是,我遇到了一些麻烦。到目前为止,这是我的代码:

pip install jupyter

具体来说,我想看一下比较例如:位置1在2010年和2011年,但当我运行我的pairwise.t.test R只比较例如位置1和位置2等我想确保我的R代码专门查看我想要的比较,但我一般都不确定,所以我希望得到一些帮助。

我的ANOVA输出最后一点说我的d.f. = 1,我不太确定应该是这样的。我哪里错了?

1 个答案:

答案 0 :(得分:0)

您应该使用正确的结构创建数据。年份和地点都明显是离散的,即R因子。你应该使用R公式界面。公式AVGCover ~ Location * Year包括所有主要影响:

txt <- "Year Location AVGCover
 2010     1      0.1  
 2010     1      0.5
 2010     1      1
 2010     2      0.75
 2010     2      0.8  
 2010     2      1.6
 2010     3      1.1
 2010     3      0.5
 2010     3      0.6
 2011     1      0.2
 2011     1      0.2
 2011     1      0.3
 2011     2      0.5
 2011     2      0.7
 2011     2      0.4
 2011     3      0.6
 2011     3      0.1
 2011     3      0"
 dfrm <- read.table(text=txt, header=TRUE, colClasses=c("factor", "factor", "numeric") )

请注意,我没有使用df作为名称,因为这是F分布密度的函数名称。

anova(mod1 <- lm(AVGCover ~ Location * Year, data=dfrm))
Analysis of Variance Table

Response: AVGCover
              Df  Sum Sq Mean Sq F value  Pr(>F)  
Location       2 0.54361 0.27181  2.4555 0.12767  
Year           1 0.86681 0.86681  7.8306 0.01609 *
Location:Year  2 0.04361 0.02181  0.1970 0.82380  
Residuals     12 1.32833 0.11069                  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
> 
> pairwise.t.test(dfrm$AVGCover, dfrm$Year, p.adj = "none")

    Pairwise comparisons using t tests with pooled SD 

data:  dfrm$AVGCover and dfrm$Year 

     2010 
2011 0.016

P value adjustment method: none 
> pairwise.t.test(dfrm$AVGCover, dfrm$Location, p.adj = "none")

要获得估计差异的大小,您需要传递与公式的RHS上的IV相同的名称(和类)的数据帧:

predict(mod1, newdata =data.frame(Location=factor(1), Year=factor(c(2010,2011)) ) )
 # returns
        1         2 
0.5333333 0.2333333