Я пытаюсь сравнить три модели: knn, кубические сплайны и кубические сглаживающие сплайны. Я использую функцию postResample, но она не работает для сглаживающих сплайнов. Я подозреваю, что это потому, что это не «модель», однако я искал вокруг и не могу найти других способов получить ошибку предсказания.
dataset <- read.table("https://www.uio.no/studier/emner/matnat/math/STK2100/v19/mandatoryassignments-exam/data.dat")
set.seed(1)
samplesize <- round(nrow(dataset)/2)
samp <- sample(seq_len(nrow(dataset)), size = samplesize)
training <- dataset[samp, ]
test <- dataset[-samp, ]
training <- training[order(training$x),]
test <- test[order(test$x),]
attach(training)
library(caret)
ctrl <- trainControl(method="cv",number = 5)
knn <- train(y ~ x, data = training, metric = "Rsquared", method = "knn", trControl = ctrl)
knn
y.pred = predict(knn,newdata = training)
plot(training)
lines(x, y.pred, col='red')
require(splines)
cub.splines = lm(y ~ bs(x, knots = c(-3,-0.8,0.2,2.6)), data = training)
cub.splines
y.splines = predict(cub.splines, newdata = training)
lines(x, y.splines, col='green')
smooth.splines = smooth.spline(x,y, cv = TRUE)
smooth.splines
y.smooth = predict(smooth.splines, newdata = training)
lines(x, y.smooth$y, col='blue')
knn.test = predict(knn, newdata = test)
spline.test = predict(cub.splines, newdata = test)
smooth.test = predict(smooth.splines, newdata = test)
postResample(pred=knn.test, obs=test$y)
postResample(pred=spline.test, obs=test$y)
postResample(pred=smooth.test, obs=test$y)