首页 > 解决方案 > 在 R 中运行具有特定数据的 ANOSIM?

问题描述

我尝试使用我进行的一项研究的数据来完成 ANOSIM,但我遇到了多个错误,我不知道如何修复它。大多数错误是“差异有 24 个观察值,但分组有 23 个”。我试图查看多个样本之间社区结构的相似性。到目前为止我的代码是

setwd()
#load invertebrate data

Invertebrates<- read.csv(file="Invertebrates.csv",head=TRUE,sep=",")

#install packages

install.packages("vegan")
library(vegan)

#make community matrix

com<-Invertebrates[,2:ncol(Invertebrates)]
m_com<-as.matrix(com)

# group by site

group=Invertebrates[,1]

#ANOSIM

invert.ano<-anosim(m_com,group)

然后我得到

anosim(m_com, group) 中的错误:组内应该有重复

谢谢你的帮助

Invertebrates <- structure(list(Site = structure(c(10L, 14L, 6L, 3L, 24L, 12L, 7L, 18L, 1L, 8L, 15L, 5L, 16L, 23L, 4L, 11L, 21L, 19L, 9L, 13L
    ), .Label = c("Anax parthenope", "Anisus vortex", "Asellus aquaticus", 
    "Bathyomphalus contortus", "Bithynia leachii", "Bithynia tentaculata", 
    "Coenagrion pulchellum", "Corixa punctata", "Dytiscus marginalis", 
    "Gammarus pulex", "Gyraulus albus", "Haliplus fluviatilis", "Haplotaxis gordioides", 
    "Ilyocoris cimicoides", "Lymnaea stagnalis", "Lymnaea truncatula", 
    "Oxygastra curtisii", "Physa fontilnalis", "Piscicola geometra", 
    "Planorbis cornatus", "Planorbis planorbis", "Radix ovata", "Radix palustris", 
    "Sialis lutaria"), class = "factor"), Finglesham.Brook.A = c(112L, 
    1L, 3L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L), Betteshanger.Pond.A = c(0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), Betteshanger.Pond.B = c(0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L), Great.Mongeham.A = c(7L, 0L, 0L, 2L, 2L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), Site.7.SS.A = c(6L, 
    0L, 0L, 0L, 0L, 6L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L), Great.Mongeham.B = c(32L, 0L, 0L, 0L, 1L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), Broad.dike.A = c(0L, 
    0L, 0L, 0L, 0L, 2L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L), Broad.dike.B = c(0L, 0L, 0L, 2L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), S3.Broad.dike.SS.B = c(14L, 
    0L, 7L, 6L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L), Site.6.NS.B = c(65L, 0L, 0L, 2L, 2L, 0L, 0L, 1L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), Fowlmead.Lake.A = c(0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 3L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L), Site.7.SS.B = c(0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), Fowlmead.lake.B = c(0L, 
    0L, 0L, 0L, 0L, 0L, 2L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L), Adelaide.NS.A = c(5L, 0L, 3L, 6L, 2L, 0L, 0L, 0L, 
    0L, 0L, 2L, 6L, 4L, 1L, 1L, 6L, 4L, 0L, 0L, 0L), Little.Downs.Bridge.B = c(48L, 
    8L, 0L, 23L, 0L, 0L, 2L, 0L, 0L, 0L, 0L, 18L, 0L, 2L, 0L, 1L, 
    0L, 1L, 0L, 0L), Finglesham.Brook.B = c(78L, 0L, 3L, 15L, 1L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 2L), 
        Adelaide.SS.A = c(8L, 0L, 0L, 33L, 9L, 0L, 0L, 0L, 0L, 0L, 
        0L, 12L, 0L, 4L, 19L, 7L, 4L, 0L, 2L, 0L), Adelaide.SS.B = c(4L, 
        0L, 20L, 9L, 2L, 0L, 0L, 0L, 0L, 0L, 7L, 0L, 0L, 0L, 14L, 
        0L, 1L, 0L, 0L, 0L), Ham.Fen.SS = c(1L, 0L, 0L, 6L, 3L, 0L, 
        0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), 
        Adelaide.NS.B = c(3L, 0L, 0L, 8L, 0L, 6L, 1L, 0L, 0L, 2L, 
        0L, 0L, 0L, 0L, 0L, 0L, 12L, 0L, 1L, 0L), Site.6.NS.A = c(58L, 
        0L, 0L, 2L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
        0L, 0L, 0L, 0L), S3.Broad.dike.SS.A = c(24L, 0L, 0L, 50L, 
        0L, 0L, 3L, 13L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
        0L, 0L), Little.Downs.Bridge.A = c(10L, 16L, 23L, 46L, 0L, 
        0L, 2L, 0L, 0L, 4L, 0L, 0L, 0L, 0L, 4L, 0L, 5L, 0L, 0L, 0L
        )), row.names = c(NA, 20L), class = "data.frame")

标签: rvegan

解决方案


如果你跑

table(Invertebrates$Site)

你会看到你分组的变量实际上并没有分组任何东西。也就是说,每组最多有一个观察值。但是 ANOSIM 需要对数据进行分组。

如果我只是组成一个随机分组变量,如下所示:

Invertebrates$Group <- sample(c(1,2), nrow(Invertebrates), replace = TRUE)

并重新运行您的分析:

Invertebrates$Group <- sample(c(1,2), nrow(Invertebrates), replace = TRUE)
group <- Invertebrates[, "Group"]
invert.ano <- anosim(m_com, group)

有用!


推荐阅读