У меня возникли проблемы с использованием функции прогноза() в R, и я надеюсь, что смогу получить некоторую помощь. Рассмотрим набор данных с двумя столбцами - 1) Y, 2) XПроблемы с функцией прогнозирования в R
Моя цель - установить естественную сплайнную форму и получить 95% ДИ и отметить точки вне 95% ДИ как выброс. Вот что я делаю:
1) Изначально никакая точка в наборе данных не была отмечена как выброс. 2) Я приспосабливаю свои ns и использую свой 95% CI, я отмечаю точки вне CI как outlier 3) Затем я исключаю изначально выделенные выбросы и устанавливаю другое ns и используя его 95% CI, I отметьте выбросы.
* Вопрос: * Предположим, что мой первоначальный набор данных имеет 1000 обс. Я отмечаю некоторые выбросы в первом раунде, и я получаю 23 выброса. Затем я устанавливаю другой ns (назовем его fit.ns), используя оставшиеся 977 не-outliers. Затем я использую ALL X (все 1000), чтобы получить предсказанные значения на основе этой новой подгонки, но я получаю предупреждение AND, что newdata в моей функции прогнозирования имеет 1000 obs, но fit имеет 977. Возвращенные предсказанные значения также имеют 977 значений и NOT 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)
}
Привет, спасибо, что ответит. Я сомневаюсь, что это проблема. Обратите внимание, что в приведенном выше примере вы используете ту же «pred.data» для подгонки модели и получения прогноза от модели, и именно по этой причине вы не получаете ошибку. Я попробовал ваше решение, переименовав переменные, но, как я и ожидал, у меня все еще есть ошибка. Спасибо за Ваш ответ. – Sam
Пока имена переменных одинаковы, вы можете использовать прогноз для нового набора данных, но с теми же именами переменных. В вашем случае вы используете «data.NS $ Time» в качестве зависимой переменной, пытаясь предсказать, что вы используете 'data.frame (Time = data.temp $ time)' – vins