找回密码
 立即注册
查看: 11374|回复: 0

变数的长度不一样

[复制链接]
发表于 2015-9-19 22:04:59 | 显示全部楼层 |阅读模式
这是R语言与商业智能的 第八章代码 股票预测 运行后有问题
library(xts)
x<-xts(x=data.frame(x=1:13,y=13:1),order.by = seq(from=as.POSIXct("2012-05-23"),
                                                  length.out = 13,by="day")
      )
#创建一个简单的xts对象,从外形上看xts类型的数据和普通的数据
#框很像,对于时间序列数据的索引可以采用两种方式,第二种方式是使用日期来索引

class(x)

x[1:2,]#通过数字索引
x["2012-05-23"]#日期索引
x["2012-05-29/"]#日期索引
x["2012-05-23/2012-05-29"]#日期索引
x["/2012-05-23"]#日期索引
x["2012-06"]#日期索引#/间隔时间的标记

time(x)#单独获取索引

coredata(x)#单独获取数据

#help(package="xts") #具体参见

#衡量指标 年中收益率为2.5%,间隔时间设为10天的T,要决定何时买进何时卖出
library("quantmod")

p<-0.025
k<-10
hlc<-HLC(SSEC["2012"])#等价于
#hlc<-SSEC["2012",c("SSEC.Hige","SSEC.Low","SSEC.Close")]

P<-rowMeans(hlc)
V<-matrix(NA,ncol=k,nrow=NROW(P))
for(i in 1:k){
  V[,i]<-Next(Delt(P,k=i),k=i)
  #Next和Delt来自quantmod包,分别为平移一个序列,计算收益率

}
T<-apply(V,1,function(x) sum(x[abs(x)>p]))
T<-xts(x=T,order.by = time(SSEC["2012"]))

T.Index<-function(data,p,k){
  hlc<-HLC(data)
  P<-rowMeans(hlc)
  V<-matrix(NA,ncol=k,nrow=NROW(P))
  for(i in 1:k){
    V[,i]<-Next(Delt(P,k=i),k=i)
    #Next和Delt来自quantmod包,分别为平移一个序列,计算收益率
  }
  T<-apply(V,1,function(x) sum(x[abs(x)>p]))
  T<-xts(x=T,order.by = time(data))
  return(T)
}
#使用什么样的指标来预测
#真实波幅ATR,随机动量指标SMI,Wells定向指标ADX,收盘价位置价值CLV,资金流向指标MFI
#这些指标独在TTR包中找到
#写一个函数
myTTR<-function(data){
  require(TTR)
  require(quantmod)
  names(data)<-sapply(X=names(SSEC),FUN=function(x)
    strsplit(x,split=".",fixed=TRUE)[[1]][2])
myATR<-ATR(HLC(data))$atr
mySMI<-SMI(HLC(data))$SMI
myADX<-ADX(HLC(data))$ADX
myAroon<-aroon(HLC(data)[,-3])$oscillator
myBBands<-BBands(HLC(data))$pctB
myChaikin<-Delt(chaikinVolatility(HLC(data)[,-3]))[,1]
myCLV<-EMA(CLV(HLC(data)))[,1]
myMACD<-MACD(data[,"Close"])[,2]
myMFI<-MFI(data[,c("High","Low","Close")],data[,"Volume"])
mySAR<-SAR(data[,c("High","Close")])[,1]
result<-cbind(myATR,myADX,myAroon,myBBands,myChaikin,myCLV,myMACD,myMFI,mySAR)
colnames(result)<-c("myATR","myADX","myAroon","myBBands","myChaikin","myCLV","myMACD","myMFI","mySAR")
return(result)
}
#这10个技术指标作为预测变量,用随机森林的方法精简变量

require(quantmod)
require(randomForest)
model<-specifyModel(formula = T.Index(SSEC,p=0.025,k=10)~Delt(Cl(SSEC),k=1:10)+
                      myTTR(SSEC)+runMean(Cl(SSEC))+runSD(Cl(SSEC)),na.rm = TRUE)

set.seed(42)
rf<-buildModel(x=model,method="randomForest",training.per=c(start(SSEC),index(SSEC["2011-10-12"])))
varImpPlot(rf@fitted.model)#查看各个变量的重要性
#buildModel()建立模型的第一个参数是x已经构建好的式子,training.per训练数据集,

x<-importance(rf@fitted.model)
rownames(x)[x>12]#给定阈值获得关键指标

#构建两个数据集
#myTTR.data<-myTTR(SSEC)[,c("myATR","mySMI","myADX","myMACD","mySAR")]
#变量重要性的技术指标5个

#model.data<-specifyModel(formula = T.Index(SSEC,p=0.025,k=10)~
    #                       myTTR.data+runMean(Cl(SSEC)))
#~连接因变量和自变量
myTTR.data <- myTTR(SSEC)[,c("myATR","mySMI","myADX","myMACD","mySAR")]
model.data <- specifyModel(formula=T.Index(SSEC,p=0.025,k=10)~
                             myTTR.data+runMean(Cl(SSEC)))
train.data <- as.data.frame(modelData(model.data,
                                      data.window=c(start(SSEC),"2012-12-31")))
test.data <- as.data.frame(modelData(model.data,
                                     data.window=c(as.Date("2013-01-05"),end(SSEC))))
colnames(train.data)<- c("T","myATR","mySMI","myADX","myMACD","mySAR","runMean")
colnames(test.data)<- c("T","myATR","mySMI","myADX","myMACD","mySAR","runMean")

form<-as.formula("T~.")

library(e1071)#找支持向量机模型
m<-svm(form,train.data,cost=100)
p<-predict(m,na.omit(test.data))

以下是错误提示:
>  colnames(train.data)<- c("T","myATR","mySMI","myADX","myMACD","mySAR","runMean")
Error in `colnames<-`(`*tmp*`, value = c("T", "myATR", "mySMI", "myADX",  :
  'names' attribute [7] must be the same length as the vector [6]
> colnames(test.data)<- c("T","myATR","mySMI","myADX","myMACD","mySAR","runMean")
Error in `colnames<-`(`*tmp*`, value = c("T", "myATR", "mySMI", "myADX",  :
  'names' attribute [7] must be the same length as the vector [6]
>
> form<-as.formula("T~.")
>
> library(e1071)#找支持向量机模型
> m<-svm(form,train.data,cost=100)
Error in model.frame.default(formula = form, data = train.data, na.action = function (object,  :
  变数的长度不一样('T.Index.SSEC.p.0.025.k.10')
> p<-predict(m,na.omit(test.data))
Error in predict(m, na.omit(test.data)) : object 'm' not found
>


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|R语言中文网

GMT+8, 2025-5-7 23:15 , Processed in 0.026586 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表