Кривые накопления в R (не в Vegan) - PullRequest
2 голосов
/ 29 февраля 2020

Я хотел бы создать кривые накопления, в частности, метри c кривые накопления, используя начальную загрузку и циклы. Меня интересует выборка (с заменой) общего числа графиков в моем примере набора данных, начиная с 1 и заканчивая общим числом ( n = 1… max n ) , Каждый будет отбираться 1000 раз.

Я не верю, что пакет, такой как Vegan, поможет в этом, так как я не ищу кривые накопления видов, а вместо этого должен рассчитывать метрики на основе данных численности и коэффициент консервативности видов растений (поправьте меня, если я ошибаюсь!).

Мой примерный набор данных представляет собой матрицу с графиками, названиями видов растений, значениями численности и c -значениями (коэффициентами консерватизма):

https://docs.google.com/spreadsheets/d/1v-93sV4ANUXpObVbtixTo2ZQjiOKemvQ_cfubZPq9L4/edit?usp=sharing

Для каждой из 1000 итераций для каждого n -го образца мне нужно построить матрицу, которая будет содержать 1000 результатов итерации, которые имеют название вида, численность и c - оценить, а затем удалить все дубликаты видов из этого образца. Затем для каждой итерации я должен рассчитать показатели растительности. Важно, чтобы я не вычислял metri c для всей 1000 итераций, а для каждой отдельной итерации.

Я буду повторять для n + 1 до максимума n . В конце, в идеале, я буду затем вводить эти результаты в матрицу моих окончательных результатов со строками n … max n и 1000 столбцами с вычисленными метриками для каждого из этих показателей. 1000 итераций. Затем я буду усреднять по итерациям, а затем составлять кривую накопления моего желаемого показателя c из этих средних.

Код, который я считал полезным , приведен ниже, с другим примером набора данных, включая метрики, которые меня интересуют в расчете.

https://docs.google.com/spreadsheets/d/1GcH2aq3qZzgTv2YkN-uMpnShblgsuKxAPYKH_mLbbh8/edit?usp=sharing


d<-Example2
d<-data.matrix(d)

MEANC<-function(x){
  mean(x, na.rm=TRUE)
}


FQI<-function(x){
  mean(x, na.rm=TRUE)*sqrt(sum(!is.na(x)))
}

RICH<-function(x){
  totalsprich<-sum(x)
  sum(x!=0, na.rm=TRUE)
}

shannon <- function(x){
  totalCov <- sum(x, na.rm=TRUE)
  (sum(x / totalCov * log(x / totalCov), na.rm=TRUE)) * -1

}

#for this particular example, the only two functions (metrics) that will work will be RICH and shannon

nrep<-1000
totalQuads<-nrow(d)

bootResultSD<-data.frame(matrix(nrow=nrep, ncol=totalQuads) )

bootResultMean<-data.frame(matrix(nrow=nrep, ncol=totalQuads)  )

for(j in 1:totalQuads){
  for(i in 1:nrep){

    bootIndex<-sample(1:totalQuads, j, replace=FALSE)

    bootSample<-d[bootIndex, na.rm=TRUE, drop=FALSE]

    VALUES<-apply(bootSample, 1, shannon)
    bootResultSD[i, j]<-sd(VALUES, na.rm=TRUE)
    bootResultMean[i, j]<-mean(VALUES, na.rm=TRUE)
  }
}

VALUES
bootResultSD
bootResultMean

meanDATA <- apply(bootResultMean, 2, mean, na.rm=TRUE)
meanDATASD <- apply(bootResultSD[-1], 2, mean, na.rm=TRUE)

Проблема с тем, что я создал ранее, заключается в том, что он рассчитывает показатели для каждого графика, а не накапливает графики и повторный расчет показателей на основе каждой совокупной выборки. Вот что я придумала до сих пор, основываясь на моем коде сверху, но я не думаю, что это то, что мне нужно:


for(j in 1:totalQuads){
  for(i in 1:nrep){

    bootIndex<-sample(1:totalQuads, 10, replace=TRUE) 

    bootSample<-d[bootIndex, na.rm=TRUE, drop=FALSE]

    booted<-bootSample[!duplicated(bootSample[,2]),]

    bootResultSD[i, j]<-sd(booted, na.rm=TRUE)
    bootResultMean[i, j]<-mean(booted, na.rm=TRUE)

  }
}

Я не знаю, как пройти дальше эта точка. Заранее спасибо!

1 Ответ

0 голосов
/ 13 апреля 2020

ОБНОВЛЕНИЕ:

Я работал с коллегой, чтобы разработать ответ на мой вопрос выше. Вот код, который он создал.

#d<-data file 
nrep <- 1000

totalQuads <- length(unique(d$Plot))

boot.result.fqi <- matrix(nrow=nrep, ncol=totalQuads)
boot.result.meanc <- matrix(nrow=nrep, ncol=totalQuads)
boot.result.shannon <- matrix(nrow=nrep, ncol=totalQuads)
boot.result.rich <- matrix(nrow=nrep, ncol=totalQuads)

for(j in 1:totalQuads){

for(i in 1:nrep){

    bootIndex <- sample(1:totalQuads, j, replace=TRUE)

    for(k in 1:length(bootIndex)){

        if(k == 1){
            bootSample <- subset(d, Plot %in% bootIndex[k])
        } else {
            bootSample <- rbind(bootSample, subset(d, Plot %in% bootIndex[k]))
        }

    }
    # bootSample <- subset(d, Plot %in% bootIndex)

    bootSampleUniqSp <- unique(bootSample[c("Species", "C_Value")])

    ## Calculate and store the results

    #Richness
    boot.result.rich[i,j] <- nrow(bootSampleUniqSp)

    #Mean C
    if(boot.result.rich[i,j] > 0){
        boot.result.meanc[i,j] <- mean(bootSampleUniqSp$C_Value)
    } else {
        boot.result.meanc[i,j] <- 0
    # This is the rule I've set up for when there are no species in the quads. Change the rule as you like
    }

    #FQI
    boot.result.fqi[i,j] <- boot.result.meanc[i,j] * sqrt(boot.result.rich[i,j])

    #Shannon
    covers <- aggregate(bootSample$CoverA_1.4mplot, 
by=list(bootSample$Species), sum)
    # covers <- bootSample$CoverA_1.4mplot
    total.cov <- sum(covers$x)
    boot.result.shannon[i,j] <- (sum(covers$x / total.cov * 
log(covers$x / total.cov), na.rm=TRUE)) * -1

}

}

par(mfcol=c(2,2))
boxplot(boot.result.rich, main="Richness")
boxplot(boot.result.meanc, main="Mean C")
boxplot(boot.result.fqi, main="FQI")
boxplot(boot.result.shannon, main="Shannon's index")


# the means across number of quadrats
apply(boot.result.shannon, 2, mean)

summary.dfr <- data.frame(quads=1:totalQuads, 
richness=apply(boot.result.rich, 2, mean), 
meanc=apply(boot.result.meanc, 2, mean), 
fqi=apply(boot.result.fqi, 2, mean), 
shannon=apply(boot.result.shannon, 2, mean)
)
...