具有块设计和重复测量的ANOVA

时间:2017-01-23 14:48:17

标签: r statistics anova

我试图对在同一生长季节内在2个地点建造的田间试验进行一些统计分析。

在两个站点(Site,级别:HF | NW),实验设计是一个RCBD,其中有4个(n = 4)块(Block,级别:1 | 2 | 3 | 4每个Site)。 有4种处理--3种不同形式的氮肥和对照(无氮肥)(Treatment,水平:AN,U,IU,C)。 在田间试验期间,有3个不同的时期开始添加肥料,最后收获草。在因子N_app下,这些期间的级别为1 | 2 | 3。

有一系列测量我想测试以下零假设H0:

Treatment(H0)对测量没有影响

我特别感兴趣的两项测量是:草产量和氨排放量。

从草产量(Dry_tonnes_ha)开始 显示here, a nice balanced data set

可以使用以下代码在R中下载数据:

library(tidyverse)

download.file('https://www.dropbox.com/s/w5ramntwdgpn0e3/HF_NW_grass_yield_data.csv?raw=1', destfile = "HF_NW_grass_yield_data.csv", method = "auto")
raw_data <- read.csv("HF_NW_grass_yield_data.csv", stringsAsFactors = FALSE)

HF_NW_grass <- raw_data %>% mutate_at(vars(Site, N_app, Block, Plot, Treatment), as.factor) %>% 
  mutate(Date = as.Date(Date, format = "%d/%m/%Y"),
         Treatment = factor(Treatment, levels = c("AN", "U", "IU", "C")))

我已经开始使用以下方法运行ANOVA:

model_1 <- aov(formula = Dry_tonnes_ha ~ Treatment * N_app + Site/Block, data = HF_NW_grass, projections = TRUE)

我对此有些担心。

首先,测试假设的最佳方法是什么?对于简单的单向ANOVA,我会在因变量(shapiro.test())上使用bartlett.test()Dry_tonnes_ha来评估方差的正态性和异质性。我可以在这里使用相同的方法吗?

其次,我担心N_app是一个重复测量,因为在3个不同时期从同一个图中获取相同的测量值 - 将这些重复测量值构建到模型中的最佳方法是什么?

第三,我不确定在Block中嵌套Site的最佳方法。在两个站点,Block的级别为1:4。我是否需要为每个网站设置唯一的Block级别?

我有another data set for NH3 emissions here。 R代码下载:

download.file('https://www.dropbox.com/s/0ax16x95m2z3fb5/HF_NW_NH3_emissions.csv?raw=1', destfile = "HF_NW_NH3_emissions.csv", method = "auto")
raw_data_1 <- read.csv("HF_NW_NH3_emissions.csv", stringsAsFactors = FALSE)

HF_NW_NH3 <- raw_data_1 %>% mutate_at(vars(Site, N_app, Block, Plot, Treatment), as.factor) %>% 
  mutate(Treatment = factor(Treatment, levels = c("AN", "U", "IU", "C")))

为此,我有上述所有问题,并补充说数据集是不平衡的。 在HF N_app 1 n = 3,但N_app 2&amp; 3 n = 4 所有NW级别的N_app n = 4。 NF仅在Treatment级别UIU进行了NW次测量 在TreatmentANUIUN_app

进行了#Inserts次测量

我不确定如何处理这种增加的复杂程度。我很想分析为两个独立的网站(每个网站INSERT期间不一样的事实可能会鼓励这种方法)。 我可以在这里使用iii型平方和ANOVA吗?

有人向我建议,线性混合建模方法可能是前进的方法,但我不熟悉使用它们。

我欢迎你对以上任何一点的想法。谢谢你的时间。

2 个答案:

答案 0 :(得分:4)

回答关于测试假设的最佳方法的第一个问题。虽然您尝试使用R中实现的另一个统计测试是合理的,但实际上我只是想象分布并查看数据是否符合ANOVA假设。这种方法似乎有些主观,但在大多数情况下确实有效。

  • 独立地,相同分布式(i.i.d)数据:根据您对数据的了解程度,您可能已经有了一个问题。可以使用卡方检验来确定独立性(或不是)。
  • 正态分布数据:使用直方图/ QQ图检查。根据分布情况,我认为使用aov是合理的,尽管分布略有双峰。

(日志转换似乎有助于进一步满足常态假设。您可以考虑这一点,特别是对于下游分析。)

par(mfrow=c(2,2))
plot(density(HF_NW_grass$Dry_tonnes_ha), col="red", main="Density")
qqnorm(HF_NW_grass$Dry_tonnes_ha, col="red", main="qqplot")
qqline(HF_NW_grass$Dry_tonnes_ha)

DTH_trans <- log10(HF_NW_grass$Dry_tonnes_ha)
plot(density(DTH_trans), col="blue", main="transformed density")
qqnorm(DTH_trans, col="blue", main="transformed density")
qqline(DTH_trans)

关于你在模型中建立重复测量的最佳方法的第二个问题是:不幸的是,很难确定这样一个&#34;最好的&#34;模型,但根据我的知识(主要通过基因组学大数据),您可能想要使用线性混合效应模型。例如,这可以通过lme4 R包实现。由于您似乎已经知道如何在R中构建线性模型,因此应用lme4函数应该没有问题。

关于是否嵌套两个变量的第三个问题很棘手。如果我是你,我会从SiteBlock开始,就好像它们是独立因素一样。但是,如果你知道它们不是独立的,你应该把它们嵌套。

我认为您的问题和疑虑非常开放。我的建议是,只要你有合理的理由,就继续进行。

答案 1 :(得分:1)

我同意@David C关于视觉诊断的使用。简单的QQ图应该可以工作

# dependent variable.
par(mfrow=c(1,2))
qqnorm(dt[,dry_tonnes_ha]); qqline(dt[,dry_tonnes_ha], probs= c(0.15, 0.85))
qqnorm(log(dt[,dry_tonnes_ha])); qqline(log(dt[,dry_tonnes_ha]), probs= c(0.15, 0.85))

enter image description here

日志转换对我来说很合理。您还可以从密度图中看到这一点,该图是长尾的,有点双模

par(mfrow=c(1,1))
plot(density(dt[,dry_tonnes_ha]))

如果您愿意,您也可以使用阵容图(Buja et al,2009)。我不确定在这种情况下是否需要它们。 Vignette provided

library(nullabor)
# this may not be the best X variable. I'm not familiar with your data
dt_l <- lineup(null_permute("dry_tonnes_ha"), dt)
qplot(dry_tonnes_ha, treatment, data = dt_l) + facet_wrap(~ .sample)

enter image description here

对于其他假设,您可以使用lm

中的标准诊断图
lm2 <- lm(log(dry_tonnes_ha) ~ treatment * n_app + site/block, data = dt)
plot(lm2)

我认为这些情节没有太麻烦。