2014-10-30 5 views
2

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

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

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

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

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

Вот фигура из бумаги Elith по сравнению с одним, полученного с gbm.plot

Рисунок 6 из Elith и др., 2009 Figure 6 from Elith et al., 2009

От gbm.plot From gbm.plot

Мои решения

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

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

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

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

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

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

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)

ответ

0

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

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

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

к этому:

var.name <- labels[j] 

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

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

vars <- c(17, 175, 198) 

Шаг 3. Сделайте dataframe с двумя колоннами: одна колонна будет иметь все возможные имена переменных вы можете быть заинтересованы в использовании и один с метками, которые вы хотите использовать. Убедитесь, что имена столбцов действительно соответствуют тому, что вы можете найти в «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="") 

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

+0

Мне все равно, есть ли лучший способ сделать это. Это отлично работает! Большое спасибо за Вашу помощь. – GNG