Ошибка в режимах [i,] <- mr: количество заменяемых элементов не кратно длине замены в моем цикле
Я пытался запустить цикл for, чтобы рассчитать размер ниши и достоверные интервалы для каждого из моих семи видов рыб, и продолжаю получать эту ошибку. Ошибка в режимах [i, ]<- mr: количество заменяемых элементов не кратно длине замены
Я начинаю с расчета niche.region для конкретного вида, и я могу заставить это работать, поэтому я хотел рассчитать апостериорное распределение нишевого региона для нескольких видов одновременно. Для этого я использовал петлю.
Вот код, который я запускал для этой проблемы.
# Fit Bayesian part
# 1. Choose the number of re-samples/iterations
nsamples <- 10000
#2. Use fish.par function to generate a list of the main ellipse
# parameters for each of the random draws (number specified in "nsamples"
# above). Each element of the list contains 2 objects, a 1 x 2 matrix
# of the mu values (means) and a 2 x 2 matrix of Sigma values
# (covariance matrix). Following the vignette:
fish.par1 <- tapply(1:nrow(RS), #Apply a function to each factor in the dataframe "fish"
RS$Species, #specify those factors to be the ones that exist in the column "species" (in my case, this is the ecosystem identifier)
function(ii) niw.post(nsamples = nsamples, #define the function: Take "nsamples" # of random draws from the null posterior distribution (in this case, normal-inverse-Wishart (niw))
X = RS[ii, 2:4])) #from these columns in the dataframe (isotope data)
# 3. To calculate niche.region for a specific species, the function
# requires Sigma as the input. Here's the function again for reference:
niche.size <- function(Sigma, alpha = .95) {
n <- nrow(Sigma)
sz <- as.numeric(determinant(Sigma, log = TRUE)$modulus)
sz <- .5 * (sz + n * (log(pi) + log(qchisq(alpha, df = n)))) - lgamma(.5*n+1)
exp(sz)
}
# But REALLY, we usually want to calculate the posterior
# distributions of niche region for multiple species at once.
# I do that here using a loop. This is extracted directly
# deom the stat.par function, but is truncated to include
# only niche size calculations:
# Extract all non-null elements of the list
nn.fish.par=Filter(Negate(is.null), fish.par1)
# Create an empty matrix to store the results
modes <- matrix(NA, nrow = length(fish.par1), ncol=7)
modes
modes
# And then run the loop to calculate niche size and credible
# intervals for each of the seven species:
for(i in 1:length(fish.par1)){
tmpn <- apply(fish.par1[[i]]$Sigma, 3, niche.size, alpha=.95) # calculate posterior distribution of niche size for species "i"
ns <- hdr(tmpn, prob=95, all.modes=T)$mode # calculate mode of the 95% highest density region for species "i"
ns.cred <- quantile(tmpn, prob = c(.025, .975)) # calculate credible intervals for species "i"
lower.ns <- as.numeric(ns.cred[1])
upper.ns <- as.numeric(ns.cred[2])
group <-names(fish.par1[i]) # what is the name of this species (first-level list name)?
mr <- c(group, round(c(ns, lower.ns, upper.ns),2)) #concatenate desired values, round to 2 decimal places
modes[i,] <- mr #fill in row "i" with the data we just calculated
}
И тут появляется ошибка.
Я не уверен, что проблема в размере моей матрицы или у меня где-то есть опечатка. Я предполагаю, что проблема связана либо с моими режимами, либо с мистером, но я не уверен. Моя матрица 7x7, так как у меня 7 видов, поэтому в моем режиме есть место для 7 значений. Однако я заметил, что мой мистер дает 10 значений. Не знаю, проблема ли в этом.
Спасибо, Джиллиан