我试图对在同一生长季节内在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
级别U
和IU
进行了NW
次测量
在Treatment
级AN
级U
,IU
和N_app
#Inserts
次测量
我不确定如何处理这种增加的复杂程度。我很想分析为两个独立的网站(每个网站INSERT
期间不一样的事实可能会鼓励这种方法)。
我可以在这里使用iii型平方和ANOVA吗?
有人向我建议,线性混合建模方法可能是前进的方法,但我不熟悉使用它们。
我欢迎你对以上任何一点的想法。谢谢你的时间。
罗
答案 0 :(得分:4)
回答关于测试假设的最佳方法的第一个问题。虽然您尝试使用R中实现的另一个统计测试是合理的,但实际上我只是想象分布并查看数据是否符合ANOVA假设。这种方法似乎有些主观,但在大多数情况下确实有效。
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
函数应该没有问题。
关于是否嵌套两个变量的第三个问题很棘手。如果我是你,我会从Site
和Block
开始,就好像它们是独立因素一样。但是,如果你知道它们不是独立的,你应该把它们嵌套。
我认为您的问题和疑虑非常开放。我的建议是,只要你有合理的理由,就继续进行。
答案 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))
日志转换对我来说很合理。您还可以从密度图中看到这一点,该图是长尾的,有点双模
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)
对于其他假设,您可以使用lm
lm2 <- lm(log(dry_tonnes_ha) ~ treatment * n_app + site/block, data = dt)
plot(lm2)
我认为这些情节没有太麻烦。