我的数据是物种共生矩阵,我想生成随机矩阵以测试共生模式。
我发现这种分析的唯一功能是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
>
我在循环中运行该函数以获得多次迭代
提前谢谢
答案 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
我对谈话有点迟,但希望这对某人有帮助。