Вопросы MCMCglmm: несколько видов и ультраметрические деревья

Эти вопросы связаны с моим другим вопросом на Филогенетической модели с использованием нескольких записей для каждого разновидности Благодаря @ thomas-guillerme мне удалось запустить модель MCMCglmm.

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

comp_data <- comparative.data(phy = my_tree, data =my_data, names.col = species, vcv = TRUE)’  

У меня ошибка:

'Ошибка в row.names ‹-. Data.frame (tmp, value = value): дублирование' row.names 'не допускается. Вдобавок: Предупреждение: неуникальные значения при установке' row.names ':' Species1 ' , 'Вид2', 'Вид3', 'Вид4', ...

Я был удивлен, потому что я использую MCMCglmm, а не PGLS из-за возможности использования нескольких записей для каждого вида.

Я попробовал обходной путь сделать имя вида уникальным, но в этом случае только первая запись каждого вида распознается позже в модели (потому что она соответствует имени в my_tree).

Более того, у меня были проблемы с распознаванием моего дерева как ультраметрического. Я проверил это с помощью

'is.ultrametric(my_tree)'

Получил:

ЛОЖНЫЙ

Я пытался:

    function (phy) { if(any(is.ultrametric(my_tree)) == FALSE) { my_tree <- lapply(my_tree, chronoMPL) class(my_tree) <- "Phylo" 
 }
}

Но эти строчки, видимо, не решают проблемы. Заранее спасибо за помощь.


person Marco Gamba    schedule 31.07.2018    source источник


Ответы (1)


Трудно сказать без работающего примера, но, по крайней мере, для второго вопроса кажется, что ошибка возникает из-за того, что аргумент phy не передается в функцию вообще (он использует my_tree

check.fun <- function(my_tree) {
    if(any(is.ultrametric(my_tree)) == FALSE) {
         my_tree <- lapply(my_tree, chronoMPL)
         class(my_tree) <- "Phylo" 
    }
    return(my_tree)
}

Во-первых, вы можете попробовать запустить его через mulTree пакет, который выполняет много ведение домашнего хозяйства:

## Loading/installing the package
library(devtools)
install_github("TGuillerme/mulTree")
library(mulTree)

## Loading the example data
data(lifespan)
## Randomly combining trees
combined_trees <- tree.bind(x = trees_mammalia, y = trees_aves, sample = 2,
                            root.age = 250)

Затем мы можем создать пример с несколькими экземплярами каждого вида:

## Subset of the data
data <- lifespan_volant[sample(nrow(lifespan_volant), 30),]
## Create a dataset with two specimen per species
data <- rbind(cbind(data, specimen = rep("spec1", 30)), cbind(data,
             specimen = rep("spec2", 30)))

Обратите внимание, что первый столбец содержит список видов с несколькими экземплярами для каждого вида (указан в столбце $specimen).

head(data[order(data$species),])
#                 species    class longevity      mass    volant specimen
#16   Addax_nasomaculatus Mammalia 0.8413927 1.8227058 nonvolant    spec1
#161  Addax_nasomaculatus Mammalia 0.8413927 1.8227058 nonvolant    spec2
#140          Anser_anser     Aves 0.9929849 0.5993055    volant    spec1
#1401         Anser_anser     Aves 0.9929849 0.5993055    volant    spec2
#21   Antilope_cervicapra Mammalia 0.6055864 1.4910746 nonvolant    spec1
#211  Antilope_cervicapra Mammalia 0.6055864 1.4910746 nonvolant    spec2

Затем вы можете использовать функцию clean.data, чтобы убедиться, что деревья соответствуют набору данных (указав, какой столбец содержит названия видов)

## Making sure both the trees and the data match
cleaned_data <- clean.data(data, combined_trees, data.col = "species")

## Only using the cleaned version
trees <- cleaned_data$tree
data <- cleaned_data$data

Вы можете найти возможные выпавшие подсказки / строки в cleaned_data$dropped_tips и cleaned_data$dropped_rows:

## Creates a mulTree object specifying species AND specimens as random terms
mulTree_data <- as.mulTree(data, trees, taxa = "species",
                        rand.terms = ~species+specimen)

## formula to test
test_formula <- longevity ~ mass + volant
## MCMC parameters (number of generations, thin/sampling, burnin)
mcmc_parameters <- c(101000, 10, 1000)
## priors
mcmc_priors <- list(R = list(V = 1/2, nu = 0.002),
                    G = list(G1 = list(V = 1/2, nu = 0.002)))

## Running MCMCglmm on multiple trees
mulTree(mulTree_data, formula = test_formula, parameters = mcmc_parameters,
     priors = mcmc_priors, output = "longevity.example", ESS = 50)

Для анализа полученных файлов вы можете использовать read.mulTree и последующие функции (см. mulTree руководство).

person Thomas Guillerme    schedule 08.08.2018