r- многомерный случайный лес на матрице сообщества - PullRequest
0 голосов
/ 11 апреля 2019

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

library(randomForestSRC)

# simulated species matrix
species 
# site       species 1    species2     species 3
# 1             1            1            0
# 2             1            0            1
# 3             1            1            1
# 4             1            0            1
# 5             1            0            0
# 6             1            1            0
# 7             1            1            0
# 8             1            0            0
# 9             1            0            0
# 10            1            1            0


# environmental data
data
# site   elevation_m     PRECIPITATION_mm  
# 1        500                28
# 2        140                37
# 3        445                15
# 4        340                45
# 5        448                20
# 6        55                 70
# 7        320                18
# 8        200                42
# 9        420                22
# 10       180                8


# adding my species matrix into the environmental data frame
data[["species"]] <-(species)

# running the model
rf_model <- rfsrc(Multivar(species) ~.,data = data, importance = T)

но я получаю сообщение об ошибке:

Error in parseFormula(formula, data, ytry) : 
  the y-outcome must be either real or a factor.

Я предполагаю, что проблема в данных о присутствии / отсутствии, но я не уверен, как пройти мимо этого. Это ограничение функции?

1 Ответ

1 голос
/ 12 апреля 2019

Я думаю, что это может иметь отношение к тому, как вы построили свой фрейм данных. Когда вы использовали data[["species"]] <- (species), у вас был фрейм данных внутри фрейма данных. Если вы str(data) после шага, который я только что упомянул, вывод будет таким:

> str(data)
'data.frame':   10 obs. of  4 variables:
$ site     : int  1 2 3 4 5 6 7 8 9 10
$ elevation: num  500 140 445 340 448 55 320 200 420 180
$ precip   : num  28 37 15 45 20 70 18 42 22 8
$ species  :'data.frame':      10 obs. of  4 variables: #2nd data frame
..$ site     : int  1 2 3 4 5 6 7 8 9 10
..$ species.1: num  1 1 1 1 1 1 1 1 1 1
..$ species2 : num  1 0 1 0 0 1 1 0 0 1
..$ species.3: num  0 1 1 1 0 0 0 0 0 0

Если вместо этого вы создадите фрейм данных как data2 <- as.data.frame(cbind(data,species)) тогда

rfsrc(Multivar(species.1,species2,species.3)~.,data = data2, importance=T)

, кажется, работает, потому что я не получаю сообщение об ошибке, вместо этого я получаю некоторый разумный вывод:

Sample size: 10
Number of trees: 1000
Forest terminal node size: 5
Average no. of terminal nodes: 2
No. of variables tried at each split: 2
Total no. of variables: 4
Total no. of responses: 3
User has requested response: species.1
Resampling used to grow trees: swr
Resample size used to grow trees: 10
Analysis: mRF-R
Family: regr+
Splitting rule: mv.mse *random*
Number of random split points: 10
% variance explained: NaN
Error rate: 0   

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

...