これを実現する方法の1つ:
library(quantmod)
library(data.table)
library(caret)
getSymbols("^GSPC")
DF <- data.frame(GSPC,DATE=time(GSPC))
PriceChange <- (DF$GSPC.Close-DF$GSPC.Open)
DF$Class <- as.factor(ifelse(PriceChange>0,"UP","DOWN"))
あなたは、次の二つの方法で月のインデックスを作成することができます。
# 1
DF$yearMon <- zoo::as.yearmon(DF$DATE)
DF <- data.table(DF)
DF[, Month_Index:= .GRP, by = yearMon]
# 2
DF$year <- as.numeric(format(DF$DATE, format = "%Y"))
DF$MONTH <- as.numeric(format(DF$DATE, format = "%m"))
DF[, Month_Index2 := .GRP, by = .(year, MONTH)]
identical(DF$Month_Index, DF$Month_Index2)
[1] TRUE
Month_Index <- length(unique(DF$Month_Index))
TimeSlices <- createTimeSlices(1:Month_Index, 5, horizon = 2,
fixedWindow = FALSE, skip = 0)
は、あなたの結果を保存するために3つの空のリストを作成します。
totalSlices <- length(TimeSlices$train)
plsFitTime <- vector("list", totalSlices)
Prediction <- vector("list", totalSlices)
Accuracy <- vector("list", totalSlices)
すべての結果を次のリストに保存します。
k <- 1:totalSlices
for(i in seq_along(k))
{
plsFitTime[[i]] <- train(Class~.,
data = DF[TimeSlices$train[[i]],],
method = "pls")
Prediction[[i]] <- predict(plsFitTime[[i]],
DF[TimeSlices$test[[i]],])
Accuracy[[i]] <- confusionMatrix(Prediction[[i]],
DF[TimeSlices$test[[i]],]$Class)$overall[1]
}
すべてのモデルはAccuracy
で、plsFitTime
にPrediction
の予測、および精度を保存しています。
更新:
より整然とアプローチはpurrr
パッケージを使用することです。 、
library(purrr)
customFunction <- function(x, y) {
model <- train(Class~.,
data = DF[x],
method = "pls")
prediction <- predict(model, DF[y])
accuracy <- confusionMatrix(prediction,
DF[y]$Class)$overall[1]
return(list(prediction, accuracy))
}
results <- map2_df(TimeSlices$train, TimeSlices$test, customFunction)
map2_df
は、引数として2つのリスト.x
と.y
をとる関数であるこれらのリストのすべての要素に対して関数.f
を適用し、その結果を返します。
タイムスライスを作成した後、使用することができますデータフレーム
(lapply
のように)ファンクションを作成することはできますが、コードをきれいにするために、グローバル環境でcustomFunction
を作成しました。関数内
DF[x]
はDF[TimeSlices$train[[n]]]
とDF[y]
に相当し、今DF[TimeSlices$test[[n]]]
map2_df
である上記for
ループがしたすべてを行い、そして唯一の予測を返しとはの形ですべてのモデルのを精度データフレーム
class(results)
[1] "tbl_df" "tbl" "data.frame"
dim(results)
[1] 2 109
results
の各列がリストです。 109列は109モデルの結果です。
各モデルの結果(この場合予測と精度)にアクセスするには、results$columnName
またはresults[[columnNumber]]
を使用してください。
あなたが同様のモデルを保存したい場合は、単にモデルを含めるようにcustomFunction
でreturn
文を変更します。return(list(model, prediction, accuracy))