Применение popbio "projection.matrix" к нескольким фертильностям и создание списка матриц

Я обычно нахожу ответы на свои вопросы, осматриваясь здесь (я рад, что stackovergflow существует!), Но я не нашел ответа на этот вопрос... Я надеюсь, что вы можете помочь мне:)

Я использую projection.matrix() функция из пакета "popbio" для создания переходных матриц. В функции необходимо указать "этап" и "судьба" (обе категориальные переменные) и "фертильность" (числовой столбец).

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

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

stage.fate = data.frame(replicate(2, sample(0:6,40,rep=TRUE)))
stage.fate$X1 = as.factor(stage.fate$X1)
stage.fate$X2 = as.factor(stage.fate$X2)
fertilities = data.frame(replicate(10,rnorm(40, .145, .045)))
df = cbind(stage.fate, fertilities)
colnames(df)[1:2]=c("stage", "fate")
prefix = "control"
suffix = seq(1:10)
fer.names = (paste(prefix ,suffix , sep="."))
colnames(df)[3:12] = c(fer.names)

С помощью

library(popbio)
projection.matrix(df, fertility=control.1)

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

Моя проблема в том, что я хотел бы создать список матриц с различными значениями рождаемости за один раз (в действительности длина моих данных составляет>=300, а столбцы рождаемости ~100 для каждого из четырех различных видов обработки...),

Я буду признателен за вашу помощь!

-W

PS Вот так выглядит функция в popbio:

    projection.matrix =
function (transitions, stage = NULL, fate = NULL, fertility = NULL, 
    sort = NULL, add = NULL, TF = FALSE) 
{
    if (missing(stage)) {
        stage <- "stage"
    }
    if (missing(fate)) {
        fate <- "fate"
    }
    nl <- as.list(1:ncol(transitions))
    names(nl) <- names(transitions)
    stage <- eval(substitute(stage), nl, parent.frame())
    fate <- eval(substitute(fate), nl, parent.frame())
    if (is.null(transitions[, stage])) {
        stop("No stage column matching ", stage)
    }
    if (is.null(transitions[, fate])) {
        stop("No fate column matching ", fate)
    }
    if (missing(sort)) {
        sort <- levels(transitions[, stage])
    }
    if (missing(fertility)) {
        fertility <- intersect(sort, names(transitions))
    }
    fertility <- eval(substitute(fertility), nl, parent.frame())
    tf <- table(transitions[, fate], transitions[, stage])
    T_matrix <- try(prop.table(tf, 2)[sort, sort], silent = TRUE)
    if (class(T_matrix) == "try-error") {
        warning(paste("Error sorting matrix.\n  Make sure that levels in stage and fate columns\n  match stages listed in sort option above.\n Printing unsorted matrix instead!\n"), 
            call. = FALSE)
        sort <- TRUE
        T_matrix <- prop.table(tf, 2)
    }
    T_matrix[is.nan(T_matrix)] <- 0
    if (length(add) > 0) {
        for (i in seq(1, length(add), 3)) {
            T_matrix[add[i + 0], add[i + 1]] <- as.numeric(add[i + 
                2])
        }
    }
    n <- length(fertility)
    F_matrix <- T_matrix * 0
    if (n == 0) {
        warning("Missing a fertility column with individual fertility rates\n", 
            call. = FALSE)
    }
    else {
        for (i in 1:n) {
            fert <- tapply(transitions[, fertility[i]], transitions[, 
                stage], mean, na.rm = TRUE)[sort]
            F_matrix[i, ] <- fert
        }
    }
    F_matrix[is.na(F_matrix)] <- 0
    if (TF) {
        list(T = T_matrix, F = F_matrix)
    }
    else {
        T_matrix + F_matrix
    }
}
<environment: namespace:popbio>

1 ответ

На мой вопрос через ResearchGate ответил Caner Aktas

Ответ:

fertility.list<-vector("list",length(suffix))

names(fertility.list)<-fer.names

for(i in suffix) fertility.list[[i]]<-projection.matrix(df,fertility=fer.names[i])

fertility.list 

Применять popbio "projection.matrix" к нескольким фертильностям и генерировать список матриц? Доступно по адресу: https://www.researchgate.net/post/Applying_popbio_projectionmatrix_to_multiple_fertilities_and_generate_list_of_matrices [по состоянию на 10 июня 2015 г.].

Другие вопросы по тегам