R: rpart с предсказанием нескольких значений - PullRequest
0 голосов
/ 01 сентября 2018

Я сравниваю прогнозы между разными методами 1-й метод - линейная регрессия (лм), 2-й - rpart

ЛМ в порядке, я посылаю 2 переменные, и я получаю 2 переменные.

но с rpart я не получаю то же самое, я просто получаю 1 переменную.

почему бы не получить 2 результата 1 для y1, а другой для y2

это мой код

######################################
##  S E T U P
######################################

x1 <- c(11,  21,  20,  36,  27,  15,  7,   19,  40,  5 )
x2 <- c(142, 175, 175, 180, 181, 160, 110, 170, 177, 92)
x3 <- c(44,  78,  79,  82,  92,  56,  31,  66,  91,  29)
y1 <- c(36,  41,  42,  44,  45,  40,  34,  41,  45,  32)
y2 <- c(7,   13,  13,  17,  19,  11,  6,   12,  19,  4)

TData <- data.frame(x1=x1[1:7], x2=x2[1:7], x3=x3[1:7], y1=y1[1:7], y2=y2[1:7])
PData <- data.frame(x1=x1[8:10], x2=x2[8:10], x3=x3[8:10], y1=y1[8:10], y2=y2[8:10])

######################################
## LINEAR REGRESSION
######################################

lm_Result <- lm(cbind(y1,y2)~., TData)

lm_pred <- predict(lm_Result, PData)

lr_pred[,"y1"]
lr_pred[,"y2"]


######################################
## RPART
######################################

library(rpart)

rpart_Result <- rpart(cbind(y1,y2)~., TData)

rpart_pred <- predict(rpart_Result, PData)

1 Ответ

0 голосов
/ 01 сентября 2018

почему бы не получить 2 результата 1 для y1 и другой для y2

Это потому, что метод predict возвращает разные классы, в зависимости от аргумента, который вы передали.

Если вы попробуете:

?Predict

Тогда говорится:

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

и его значение:

Форма значения, возвращаемого функцией предиката, зависит от класса его аргумента.

Итак, ответ метода lm - это объект класса lm, а возвращаемое значение rpart - это объект класса rpart

Следовательно, метод прогнозирования дает вам разные ответы.


Что вы можете сделать, чтобы получить тот же результат?

ваш метод lm создал модель для оценки значений y1 и y2. Итак, вы должны запустить rpart таким образом, чтобы он также получал значения y1 и y2.

Чтобы сделать это в вашем rpart методе, определите method="class", но это не получится Потому что он не может классифицировать 2 функции. Следовательно, самая большая проблема возникает из вашей формулы , где у вас есть cbind(y1,y2)~.

Чтение Rpart документ вам очень поможет.

...