物种共生矩阵随机化R.

时间:2012-09-12 13:30:47

标签: r

我的数据是物种共生矩阵,我想生成随机矩阵以测试共生模式。

我发现这种分析的唯一功能是R包picante中的randomizeMatrix函数。它运行良好,但此函数中可用的空模型类型数量有限。

目前实施的空模型(null.model的参数):频率(保持物种出现频率),丰富度(维持样本物种丰富度),独立交换和 trialwap

是否有人知道此功能的其他功能或修改,这些功能允许我测试其他零模型,例如可装备或比例列总和。

以下是我使用函数的方法

> test <- matrix(c(1,1,0,1,0,1,0,0,1,0,0,1,0,1,0,0),nrow=4,ncol=4)
> test
     [,1] [,2] [,3] [,4]
[1,]    1    0    1    0
[2,]    1    1    0    1
[3,]    0    0    0    0
[4,]    1    0    1    0
> randomizeMatrix(test,null.model = "richness",iterations = 1000)
     [,1] [,2] [,3] [,4]
[1,]    1    1    0    0
[2,]    1    1    0    1
[3,]    0    0    0    0
[4,]    0    1    0    1
> randomizeMatrix(test,null.model = "independentswap",iterations = 1000)
     [,1] [,2] [,3] [,4]
[1,]    1    0    1    0
[2,]    1    1    0    1
[3,]    0    0    0    0
[4,]    1    0    1    0
>

我在循环中运行该函数以获得多次迭代

提前谢谢

1 个答案:

答案 0 :(得分:0)

我写了一个函数来生成一个空的随机矩阵,其中每列的概率是不同的。这是物种出现矩阵。

nullMatrix <- function(nrows, ncols, prob1) {
matrixVector <- c()
for(i in 1:ncols){
    columnVector <- sample(c(0,1), nrows, replace = T, prob = c((1-prob1[i]), prob1[i]))
    matrixVector <- c(matrixVector, columnVector)
}
matrix(matrixVector, nrow = nrows, ncol = ncols)
}

这将生成指定n行和列的矩阵以及每行为1的概率向量。

我使用以下代码测试了它。

#generate probability vectore for column matrix, each 10 rows the probability increases by .1
p1 <- c(rep(.1, 10), rep(.2, 10), rep(.3, 10), rep(.4, 10), rep(.5, 10), rep(.6, 10), rep(.7, 10), rep(.8, 10), rep(.9, 10), rep(1, 10) )
#generate the matrix with the nullMatrix function
m1 <- nullMatrix(100, 100, p1)
#The average of every ten rows should roughly = .1, .2, ..., 1
sum(m1[,c(1:10)])/1000 #Should ~.1
sum(m1[,c(11:20)])/1000 #Should ~.2
sum(m1[,c(21:30)])/1000 #Should ~.3
sum(m1[,c(31:40)])/1000 #Should ~.4
sum(m1[,c(41:50)])/1000 #Should ~.5
sum(m1[,c(51:60)])/1000 #Should ~.6
sum(m1[,c(61:70)])/1000 #Should ~.7
sum(m1[,c(71:80)])/1000 #Should ~.8
sum(m1[,c(81:90)])/1000 #Should ~.9
sum(m1[,c(91:100)])/1000 #Should ~1

我对谈话有点迟,但希望这对某人有帮助。