Оси Y в логит-шкале с центром в gbm.plot

В настоящее время я изучаю функции gbm в пакете dismo для создания усиленных деревьев регрессии для моделирования распространения видов. Я использовал виньетки дисмо, а также статью 2008 года «Рабочее руководство по форсированным деревьям регрессии» Элита и др., опубликованную в Журнале экологии животных. На странице 808:809 Elith et al. статьи авторы поясняют графики частных зависимостей и приводят пример внизу страницы 809 (рис. 6). Согласно виньетке dismo «Деревья ускоренной регрессии для экологического моделирования», gbm.plot «Показывает частичную зависимость ответа от одного или нескольких предикторов».

Gbm.plot создает графики, которые выглядят почти так же, как пример в Elith et al. Однако есть несколько параметров, которые я не могу понять, как установить, чтобы получить цифру, точно такую ​​же, как в статье.

  1. Оси Y в документе имеют логарифмическую шкалу и центрированы, чтобы иметь нулевое среднее значение по распределению данных. Оси Y в gbm.plot представляют подобранную функцию.

  2. Коврик в бумаге находится на верхней части сюжетов, gbm.step коврик находится на нижней.

  3. Gbm.plot использует имя переменной в качестве метки оси x. Бумага имеет осмысленные метки осей.

Вот рисунок из статьи Elith в сравнении с цифрой, полученной с помощью gbm.plot

Рисунок 6 из Elith et al., 2009 Рисунок 6 из Elith et al., 2009

Из gbm.plot Из gbm.plot

Мои решения

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

  1. Я не уверен, что нужно изменить, чтобы преобразовать оси Y в логарифмическую шкалу и центрировать их, чтобы иметь среднее значение, равное нулю.

  2. Я смог изменить источник, чтобы переместить ковер в верхнюю часть графиков. Я нашел команду для функции коврика и добавил аргумент side=3.

  3. Что касается имен переменных, я полагаю, мне нужно составить список соответствующих имен переменных, прикрепить его к данным и каким-то образом прочитать его в исходном коде. Все еще над моей головой.

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

Вот пример кода, который я запускал для создания графиков.

gbm.plot(all.sum.tc4.lr001, rug=TRUE, smooth=TRUE, n.plots=9, common.scale=TRUE, write.title = FALSE, show.contrib=TRUE, plot.layout=c(2,3), cex.lab=1.5)


person GNG    schedule 30.10.2014    source источник


Ответы (2)


Это поздно, но я могу предложить обходное решение проблемы 3: добавление пользовательских x-меток в gbm.plot. Я уверен, что есть лучший способ, но вот что я сделал. Этот метод полезен, если у вас большой набор данных и вы часто уточняете переменные, которые используете.

Шаг 1. Найдите исходный код пакета dismo для gbm.plot. Выделите весь код, создайте новый скрипт и назовите функцию gbm.plot2. Найдите «var.name». Замените все экземпляры, в которых изменяется var.name. Примеры:

var.name <- gbm.call$predictor.names[k]
var.name <- x.label 

к этому:

var.name <- labels[j]

Теперь сохраните сценарий и вызовите его с помощью source() или запустите весь сценарий, чтобы передать gbm.plot2 в глобальную среду.

Шаг 2. Предположим, что наш фрейм данных называется «df» и имеет 200 столбцов. Выберите номера столбцов, которые вы хотите вызвать в gbm.step.

vars <- c(17, 175, 198)

Шаг 3. Создайте фрейм данных с двумя столбцами: в одном столбце будут все возможные имена переменных, которые могут вас заинтересовать, а в другом — метки, которые вы хотите использовать. Убедитесь, что имена столбцов действительно соответствуют тому, что вы можете найти в «colnames (df) [vars]».

ColumnNames <- c("HiHorAve", "Elev", "Type5")
Labels <- c("Hi Hello Avenue", "Probably Elevation", "Type 5 of Something")
labels <- data.frame(ColumnNames,Labels)

Теперь упорядочите метки в том порядке, в котором они появляются в вашем фрейме данных. Это полезно, если у вас есть куча переменных, и ваш фрейм данных часто меняет форму.

labels <- labels[match(colnames(df)[vars], labels$ColumnNames),]

Шаг 4. Запустите уравнение gbm.step следующим образом:

BRTmodel<- gbm.step(data=df, gbm.x=vars, gbm.y = 5, .....)

Шаг 5. Получите сводную информацию о модели — она упорядочивает переменные по относительной важности. Затем расположите метки по относительной важности.

smry1<- summary(BRTmodel)

labels <- labels[order(match(names(df)[vars],smry1$var))]
labels <- labels$Labels #extract the labels to a vector

Шаг 6. Теперь запустите новый скрипт gbm.plot!

  gbm.plot2(BRTmodel, n.plots=3, y.label="")

Он должен отображать только красивые метки.

person TRT08    schedule 27.01.2015
comment
Меня не волнует, есть ли лучший способ сделать это. Это прекрасно работает! Большое спасибо за Вашу помощь. - person GNG; 03.02.2015

Быстрый способ изменить метку оси X — установить show.contrib на FALSE, а затем использовать x.label=expression(paste("")). Для оси Y просто используйте y.label= "" Вот пример:

gbm.plot(BRT_Model, variable.no=3, smooth=TRUE,
         common.scale=TRUE, write.title=FALSE, y.label="my y-axis title", 
         x.label=expression(paste("my x-axis title")), 
         show.contrib=FALSE, plot.layout=c(1, 1), cex.lab=1.5, cex.axis=1.5)
person Jo Harris    schedule 21.05.2019