【问题标题】:Repeated measures anova without homogeneous variance in R?在 R 中没有均匀方差的重复测量方差分析?
【发布时间】:2017-05-19 04:29:45
【问题描述】:

我有一个动物物种多样性数据集,每个月在 3 个样带中观察到(略多于)2 年。我的问题是找出样带之间是否有明显不同的动物多样性。对于这样一个简单的问题,单方面的方差分析几乎是答案,但是,我认为为了控制相当大的季节性波动,可能需要重复测量方差分析来结合每月动物多样性的变化。

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

  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. 应如何对此类分析进行编码以产生可行的答案(可能考虑到违规行为),关于重复测量 anova 的大量在线信息似乎与如何对此类分析达成一致意见有点矛盾放在一起?

我基本上有一个简单的问题,我的直觉是它应该会因为三个横断面彼此显着不同而失败(至少trackA 比其他两个具有更高的多样性)。有人对如何解决这个问题有任何建议吗?

【问题讨论】:

    标签: r anova mixed-models


    【解决方案1】:

    两个一般性问题:

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

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

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

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

    使用lme4 包来拟合重复测量/纵向泊松 GLMM:

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

    检查过度分散(

    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()
    

    组间/计数的差异没有明显变化...

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

    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")
    

    【讨论】:

    • 感谢 Ben 和 @Koot6133。这看起来是一个非常有前途的分析途径。我最初使用 Koot 建议的泊松回归模型,但这个最新的答案看起来更直观。当我有时间时,我将重新运行分析,并让您知道模型如何适应完整数据。干杯,爱德华
    【解决方案2】:

    偏度可以通过您使用计数数据这一事实来解释。计数数据大部分时间遵循泊松分布,而不是正态分布。因此,理想情况下,您将使用某种泊松回归与重复测量的随机效应相结合。

    如需更多信息,我建议您咨询统计学家或谷歌“混合效应泊松回归模型”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-10
      • 2015-06-04
      • 2015-12-06
      • 2017-01-10
      • 1970-01-01
      • 2011-07-16
      相关资源
      最近更新 更多