我在使用 R 中的 predict() 函数时遇到问题,希望能得到一些帮助。考虑一个有两列的数据集 - 1) Y, 2) X
我的目标是拟合自然样条拟合并获得 95% CI,并将 95% CI 之外的点标记为异常值。这是我所做的:
1) 最初数据集中没有任何点被标记为异常值。2)我拟合我的 ns 拟合并使用其 95% CI,我将 CI 之外的点标记为异常值 3)然后,我排除最初标记的异常值,并拟合另一个 ns 并使用它的 95% CI,我标记异常值.
* 问题:* 假设我的初始数据集有 1000 个 obs。我在第一轮中标记了一些异常值,我得到了 23 个异常值。然后我使用剩余的 977 个非异常值拟合另一个 ns(称为 fit.ns)。然后,我使用 ALL X(全部 1000)根据这个新拟合获得预测值,但我收到警告和错误,即我的预测函数中的新数据有 1000 个 obs 但拟合有 977。返回的预测值也有 977 个值而不是 1000。
*我的预测()代码*
# Fitting a Natural Spline Fit (df = 3 by default)
fit.ns <- lm(data.ns$IBI ~ ns(data.ns$Time, knots = data.ns$Time[knots]))
# Getting Fitted Values and 95% CI:
fit.ns.values <- predict(fit.ns, newdata = data.frame(Time = data.temp$Time),
interval="prediction", level = 1 - 0.05) # ??? PROBLEM
我真的很感谢你的帮助。
似乎我无法上传数据集,但我的代码是:
library(splines)
ns.knot <- 10
for (i in 1:2){
# I exclude outliers so that my ns.fit does not get affected my outliers
data.ns <- data.temp[data.temp$OutlierInd == 0,]
data.ns$BeatNum <- 1:nrow(data.ns) # BeatNum is like a row number for me and is an auxilary variable
# Place Holder for Natural Spline results:
data.temp$IBI.NSfit <- rep(NA, nrow(data.temp))
data.temp$IBI.NSfit.L95 <- rep(NA, nrow(data.temp))
data.temp$IBI.NSfit.U95 <- rep(NA, nrow(data.temp))
# defining the knots in n.s.:
knots <- (data.ns$BeatNum)[seq(ns.knot, (length(data.ns$BeatNum) - ns.knot), by = ns.knot)]
# Fitting a Natural Spline Fit (df = 3 by default)
fit.ns <- lm(data.ns$IBI ~ ns(data.ns$Time, knots = data.ns$Time[knots]))
# Getting Fitted Values and 95% CI:
fit.ns.values <- predict(fit.ns, newdata = data.frame(Time = data.temp$Time), interval="prediction", level = 1 - 0.05) # ??? PROBLEM
data.temp$IBI.NSfit <- fit.ns.values[,1]
data.temp$IBI.NSfit.L95 <- fit.ns.values[,2]
data.temp$IBI.NSfit.U95 <- fit.ns.values[,3]
# Updating OutlierInd based on Natural Spline 95% CI:
data.temp$OutlierInd <- ifelse(data.temp$IBI < data.temp$IBI.NSfit.U95 & data.temp$IBI > data.temp$IBI.NSfit.L95, 0, 1)
}