我是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年的情况。
感谢您的帮助。
答案 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)
回复较晚,但希望以后对您有所帮助。