R 中没有均匀方差的重复测量方差分析?

Repeated measures anova without homogeneous variance in R?

我有一个动物物种多样性数据集,在 2 年(多一点)的时间里每个月在 3 个横断面上观察到。我的问题是找出横断面之间是否具有显着不同的动物多样性。对于这样一个简单的问题,单方差分析几乎就是答案,但是,我认为重复测量方差分析以纳入每月动物多样性的变化可能是必要的,以控制相当大的季节性波动。

下面是我的数据集,还附有随时间变化的动物多样性图。

  transect<-c(rep("transA",26),rep("transB",25),rep("transC",25))
  months<-as.numeric(c(1:26,1:11,13:26,0,2,4:26))
  animal_species<-c(2,2,2,4,5,1,5,6,14,8,7,5,5,3,1,2,5,9,8,9,10,10,9,9,7,3,1,3,2,2,3,3,3,7,5,6,5,4,2,2,4,4,5,7,4,5,2,4,2,4,1,1,1,1,3,2,2,3,2,2,1,3,5,3,2,4,2,4,3,6,3,2,2,1,2,1)
  animal_df<-data.frame(transect,months,animal_species)

library(ggplot2)
  ggplot(animal_df,aes(months,animal_species))+geom_bar(stat='identity')+theme_bw()+facet_grid(transect~.)

但是有两个问题又违反了方差分析的假设!

首先是我的数据在横断面之间的物种数量上存在很大差异,并且根据 Levene 的(中值)检验,差异不相同。

animal_AOV<-aov(animal_species~transect, data=animal_df)
 leveneTest(animal_AOV)

# Levene's Test for Homogeneity of Variance (center = median)
#        Df F value    Pr(>F)    
# group  2  10.783 7.889e-05 ***
#      73  

第二个是数据似乎遵循不同的分布,这可能从每个样带的多样性直方图中最容易看出,其中 TransA 的偏斜似乎小于其他两个。

par(mfrow=c(3,1))
  hist(TransA$animal_species,breaks=14,xlim=c(0,14))  
  hist(TransB$animal_species,breaks=10,xlim=c(0,14))  
  hist(TransC$animal_species,breaks=10,xlim=c(0,14))  

我向社区提出的问题是:

  1. 我认为重复测量方法是最明智的分析途径是否正确?

  2. 偏离方差分析的假设是否足够令人担忧?看到有 20 多个观察值并且观察值的数量相对均衡?

  3. 应该如何对这样的分析进行编码以产生可行的答案(可能考虑到违规行为),网上关于重复测量方差分析的大量信息似乎在如何达成一致意见上有点矛盾这样的分析应该放在一起?

我基本上有一个简单的问题,我的直觉是,由于三个横断面彼此之间存在显着差异(至少 trackA 比其他两个横断面具有更高的多样性),所以它应该会失败。有人对如何解决这个问题有什么建议吗?

偏斜可以解释为您使用的是计数数据。大多数情况下,计数数据服从泊松分布,而不是正态分布。因此,理想情况下,您将使用某种泊松回归结合随机效应来进行重复测量。

要获得更广泛的信息,我建议您咨询统计学家或 google 'Mixed-effects Poisson Regression Model'

两个一般性问题:

  • @Koot6133 是正确的,您应该考虑计数数据的模型,该模型通常在对数尺度上运行(从而减少偏斜和方差差异)
  • 您需要考虑数据的 条件 分布(即日期等影响被排除后的分布),而不是 marginal 分布 - 这意味着在大多数情况下,在 之后 你已经拟合了模型
  • 之前,你不必担心分布是什么样的

个人偏好线图-然后你可以叠加数据并更有效地比较它们:

ggplot(animal_df,aes(months,animal_species,colour=transect))+
    geom_line()+theme_bw()+scale_y_log10()
ggsave("animal1.png")

自从我们在对数尺度上绘制后,零计数数据就消失了,但这确实更清楚地表明横断面在这个尺度上的方差差异不大。

使用 lme4 包拟合重复的 measures/longitudinal Poisson GLMM:

library(lme4)
m1 <- glmer(animal_species~transect+(1|months),
            family=poisson,data=animal_df)

检查过度分散(<1,所以没问题)

deviance(m1)/df.residual(m1) ## 0.65

结果:

# Generalized linear mixed model fit by maximum likelihood (Laplace Approximation) [
#   glmerMod]
# Family: poisson  ( log )
# Formula: animal_species ~ transect + (1 | months)
# Data: animal_df
# AIC       BIC    logLik  deviance  df.resid 
# 319.3219  328.6449 -155.6610  311.3219        72 
# Random effects:
#   Groups Name        Std.Dev.
# months (Intercept) 0.3003  
# Number of obs: 76, groups:  months, 27
# Fixed Effects:
#   (Intercept)  transecttransB  transecttransC  
# 1.7110         -0.4792         -0.8847  

检查位置比例图:

png("animal2.png")
plot(m1,sqrt(abs(resid(.)))~fitted(.),
     type=c("p","smooth"),col=animal_df$transect)
dev.off()

groups/number 计数的方差没有明显变化...

在数据上叠加结果(这次是原始比例):

pp <- animal_df
pp$animal_species <- predict(m1,type="response")
ggplot(animal_df,aes(months,animal_species,colour=transect))+
  geom_point()+
  geom_line(data=pp)+theme_bw()
ggsave("animal3.png")