Проблемы:Перекрестная проверка для нелинейной регрессии с помощью NLS в R
У меня есть набор данных inputAll.data
. Я хочу использовать 80% данных в качестве ввода модели и проверить модель на оставшиеся 20% данных.
Я вручную разделил набор данных на два меньших набора данных input80.data
и input20.data
, содержащих 80% и 20% данных соответственно.
Формат данных в моих наборах данных:
Name xvalues yvalues
Prog1 0.654219 59.70282
Prog2 0.149516 49.59548
Prog3 0.50577 50.53859
Prog4 0.77783 59.95499
Prog5 0.237923 49.61133
Prog6 0.756063 50.63021
Prog7 0.015625 53.77959
Я использую 80% данные для построения нелинейной модели регрессии с использованием nls
.
df = data.frame(input80.data)
yval = df$yvalues
xval = df$xvalues
model1 = nls(formula = yval ~ exp(xval + beta * xval), start = list(beta = 0))
sm1 = summary(model1)
fit1 = fitted.values(model1)
Я беру оставшиеся 20% данные для получения прогнозируемых значений. Я сохранил копию этих данных, которая содержит фактические значения y
в другом файле с именем input20Actual.data
, но input20.data
содержит только значения x
.
dfNew = data.frame(input20.data)
xpred = dfNew$xvalues
dfVerify = data.frame(input20Actual.data)
yverify = dfVerify$yvalues
xverify = dfVerify$xvalues
obtainedPred = predict(model1, data.frame(xvalues = c(xpred)))
Я затем с помощью пользовательской функции с именем RMSE
, чтобы вычислить погрешность между предсказанием и фактическим значением.
RMSE <- function(fitted, actual){
sqrt(mean((fitted - actual)^2))
}
Расчет ошибок осуществляется путем взятия каждого предсказанного значения и сравнивая его с фактическим значением, которое я хранящегося в input20Actual.data
. Я сохраняю вывод в файле.
sink("ErrorsOut.txt")
cat("\n\nRMSE:\n")
for (i in 1:13) {
#There are 13 values to be predicted in input20.data
corr = obtainedPred[[i]]
act = yverify[[i]]
err = RMSE(act, corr)
cat(err)
cat(" ")
}
cat("\n")
sink()
Проблема в том, что я вручную разделил входной набор. Я хотел бы автоматизировать это и делать то же самое для разных расщеплений (каждый раз каждый раз) и получать среднее значение расчетных ошибок.
Что я пробовал:
Я прочитал на StackOverflow о перекрестной проверке в R. Я понимаю, что это итеративно занимает некоторое% данные для создания модели, а остальное для тестирования. Если я могу использовать функцию перекрестной проверки в nls
, мне не нужно разделить мои входные данные на два файла.
Я искал на SO много для решения. Многие ответы о перекрестной проверке были для lm
. Но я специально требую перекрестной проверки для nls
. Я также читал о caret
пакете, но я попытался установить его и, но большую часть времени я в конечном итоге получить ошибки установки пакета, как показано ниже:
Warning: dependency ‘plyr’ is not available
package ‘plyr’ is not available (for R version 3.0.2)
Так что я надеялся, что был прямой путь для выполнения перекрестной проверки (в rkward) без установки большего количества пакетов. Есть ли функция или API в R, которую я могу использовать для итеративного создания моделей и их тестирования?
Обратите внимание, что я полный новичок R. Извините, если это очевидный вопрос.
Вам необходимо обновить свое R. Вы в версии 3.0.2, и в настоящее время мы находимся на 3.3.0. Как только вы это сделаете, вы сможете установить пакет '' caret'' –
@CyrusMohammadian Но я установил R, используя 'sudo apt-get install r-base'. Я просто повторил это, и он говорит, что r-base - это уже самая новая версия. Является ли версия 3.3.0 своего рода пакетом? Я использую R с rkward, и я выполнил шаги, которые я видел здесь: http://www.r-bloggers.com/download-and-install-r-in-ubuntu/ – Kajal
Кроме того, если я абсолютно _have_ для обновления , означает ли это, что не существует способа выполнить перекрестную проверку самой версии, и никакой функции/API в R, которую я могу использовать напрямую? – Kajal