2012-09-12 5 views
1

내 데이터는 종의 동시 발생 행렬이므로 공동 발생 패턴을 테스트하기 위해 임의 화 된 행렬을 생성하고 싶습니다.종 공동 발생 행렬 무작위 R

이 유형의 분석에서 찾은 유일한 기능은 R 패키지 picante의 randomizeMatrix 함수입니다. 잘 작동하지만,이 함수에서 사용할 수있는 null 모델 유형의 수가 제한되어 있습니다.

현재 구현 널 모델 (인수 null.model하기) : 주파수 (종 주파수를 선두로부터 유지 관리합니다), 풍요 로움, independentswap 및 trialswap을 (샘플 종 풍부 성 유지)

사람이 다른 기능이나 수정을 알고 있나요

함수를 사용하여 평행 이동식 또는 비례식 열 합계와 같은 다른 null 모델을 테스트 할 수 있습니다. 여기

내가

> 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

당신은'vegan' 패키지를 보았습니까? 더 구체적인 정의를 게시하면 누군가가 여기에서 작성할 수 있습니다 (예 : 동일 사례 생성은 매우 간단합니다). 'r-sig-ecology @ r-project.org' 메일 링리스트에서 물어볼 수도 있습니다 ... –

+0

제안 해 주셔서 감사합니다. 내가 원했던 것은 무작위 화에 대한 더 많은 통제를하는 방법이었습니다. 그것은 행과 열의 seperatley에 대해 서로 다른 옵션, 동일 확률, 비례 또는 고정 된 합계를 설정했습니다. 나는 다른 소프트웨어를 사용하여 그 일을 할 수 있었지만, R에서 옵션을 사용할 수 있다는 것이 좋을 것입니다. –

+1

글쎄, 확실히 R로 할 수는 있지만, 당신이 원하는 것에 대해 훨씬 더 정확하고 구체적 일 필요가 있습니다. 대부분의 R 사용자는 커뮤니티 생태 학자가 아니지만 원하는 매트릭스의 특성을 정확하게 정의하면 대답을 얻을 수 있습니다. –

답변

0

에 감사 해요 방법 각 열의 확률이 다른 null, 임의의 행렬 이것은 종 발생 행렬에 대한 것입니다.

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 

나는 대화에 조금 늦었지만 이것이 누군가에게 도움이되기를 바랍니다.