用R预测ctree

时间:2016-01-09 22:49:19

标签: r prediction

我是R的新手,我试图用ctree使用R来预测日期。 我的数据是这样的:

Datos      | Global_active_power
2006-12-16 | 3.0534747
2006-12-17 | 2.3544861
And like this 1433 entries.

以下是代码:

data <- read.table('diena.txt', sep = ' ')
library("party")
set.seed(124)
datos <- as.Date(data$Datos)
View(data[2])
train <- data[1:sum(datos<"2009-12-16"),]
test <- data[-(1:sum(datos<"2009-12-16")),]
View(train)
dt <- ctree(test$Global_active_power ~ test$Datos, data=train,controls=ctree_control(maxdepth=3))
p <- predict(dt, test)
View(p)

使用View(p),R在所有行中给出相同的数字。 我不知道这是否是正确的预测方式。也许任何人都可以提供帮助。

对于未来,也许任何人都知道如何预测未来的价值,例如我在2010-11-30的日期结束,我想预测2011年的情况。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

首先,存在技术问题。你应该真的使用规范

Global_active_power ~ Datos, data = train

而不是

test$Global_active_power ~ test$Datos, data = train

前者将从train数据集中获取变量,而后者将始终从test数据集中获取变量。通常,在模型公式中使用data$...构造几乎总是一个坏主意 - 尤其是当对新数据的预测感兴趣时。

其次,更严重的是,存在一个概念性问题。如果您使用类似power ~ date的模型,则它基本上指定了趋势模型。如果是回归树,则通过阶梯函数逼近非线性趋势。使用步长函数之外预测训练数据的范围,将始终产生恒定的拟合值。

但是对于其他非线性趋势规范(例如,GAM),您几乎肯定会在训练数据之外得到不良结果。其他一切都会非常令人惊讶。

我建议您查看时间序列模型,看看是否可以将它们用于功率预测。

答案 1 :(得分:0)

ctree对象上的preidct()返回一个列表,而不是一个数据框。它必须不列出并转换为数据框以供进一步使用。

a=data.frame()
for(i in 1:length(p)){
  a= rbind(a,unlist(p[i]))
}
colnames(a)= c(0,1)

回复较晚,但希望以后对您有所帮助。