2017-02-13 14 views
0

Невероятно новый для использования randomForest статистический пакет здесь.R - RandomForest с двумя переменными результата

Я пытаюсь запустить модель с 2 переменными ответа и 7 переменными-предикторами, но я не могу показаться из-за длин переменных ответа и/или характера подгонки модели с 2 переменными ответа.

Давайте предположим, что это мои данные и модель:

> table(data$y1) 
0 1 2 3 4 
23 43 75 47 21 

> length(data$y1) 
0 4 

> table(data$y2) 
    0 2 3 4 
104 30 46 29 

> length(data$y2) 
0 4 

m1<-randomForest(cbind(y1,y2)~a+b+c+d+e+f+g, data, mtry=7, importance=TRUE) 

Когда я запускаю эту модель, я получаю эту ошибку:

Error in randomForest.default(m, y, ...) : 
    length of response must be the same as predictors 

Я сделал некоторые поиск неисправностей, и обнаружили, что cbind() два ответа переменные просто объединяют свои значения, удваивая исходную длину и, возможно, приводя к указанной выше ошибке. В качестве примера,

length(cbind(y1,y2)) 
> 418 
t(lapply(data, length())) 
> a b c d e f g y1 y2 
209 209 209 209 209 209 209 209 209 

Затем я попытался решить эту проблему, запустив randomForest индивидуально по каждому из переменных отклика, а затем применить combine() на моделях регрессии, но наткнулся на эти вопросы:

m2<-randomForest(y1~a+b+c+d+e+f+g, data, mtry=7, importance=TRUE) 
m3<-randomForest(y2~a+b+c+d+e+f+g, data, mtry=7, importance=TRUE) 
combine(m2,m3) 

Warning message: 
In randomForest.default(m, y, ...) : 
The response has five or fewer unique values. Are you sure you want to do regression? 

Затем я решил обработать модели randomForest в качестве моделей классификации и применить as.factor() к обеим переменным ответа перед запуском randomForest, но затем наткнулся на эту новую проблему:

m4<-randomForest(as.factor(y1)~a+b+c+d+e+f+g, data, mtry=7, importance=TRUE) 
m5<-randomForest(as.factor(y2)~a+b+c+d+e+f+g, data, mtry=7, importance=TRUE) 
combine(m4,m5) 

Error in rf$votes + ifelse(is.na(rflist[[i]]$votes), 0, rflist[[i]]$votes) : 
    non-conformable arrays 

Мое предположение, что я не могу combine() классификационных моделей.

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

+2

Когда вы говорите две переменные исхода вы имеете в виду бинарную классификацию, например, A vs B, или вы говорите, что переменная ответа одна - это A vs B, а переменная ответа 2 - это C vs D (и, по существу, предсказывает четыре результата в целом)? Потому что мы не можем видеть ваши данные несколько сложнее. – zacdav

+0

@zacdav Хороший вопрос. Каждая переменная ответа имеет 5 различных категорий. Надеюсь, это ответит на ваш вопрос. Я сделаю корректировки в исходном сообщении. –

+1

В этом случае вы можете быть в порядке, объединив два столбца ответа - что-то, о чем следует помнить, это потенциально 25 прогнозируемых результатов классификации, и если количество выборок будет низким, вы вряд ли создадите эффективную модель. Я не знаю, будет ли это иначе, а просто создав две модели, вы можете независимо оценить прогностическую способность каждого ответа, а затем просто запустить две модели и снова объединить их результат для каждого образца независимо. это обеспечило бы то, что вы хотели из 'comb'. – zacdav

ответ

1

Объединить столбцы вне формулы RandomForest:

data[["y3"]] <- paste0(data$y1, data$y2) 
randomForest(y3~a+b+c+d+e+f+g, data, mtry=7, importance=TRUE) 
+1

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

+0

У меня был только вопрос: не 'paste0()' предполагается, что две переменные не являются независимыми друг от друга? –

+1

контекст данных действительно даст представление о том, как направлять соответствующую методологию. Я не думаю, что объединение их предполагает зависимость, поскольку она не подразумевает никакой иерархии между ними только в том случае, если они являются дискретными при объединении. Но я менее уверен в моем ответе. На что вы пытаетесь ответить этой моделью? – zacdav