Я пытаюсь создать одностороннюю таблицу данных Excel в R, чтобы найти показатель, который минимизирует ошибки коэффициента в уравнении. У меня есть цикл for, который дает правильный результат, но он делает что-то странное, что я не могу понять.
Вот пример данных. Я буду использовать формулу Pythogrean Win из бейсбола и использовать цикл for, чтобы найти показатель, который минимизирует среднюю абсолютную ошибку в проекциях выигрышей.
## Create Data
Teams <- c("Bulls", "Sharks", "Snakes", "Dogs", "Cats")
Wins <- c(5, 3, 8, 1, 9)
Losses <- 10 - Wins
Win.Pct <- Wins/(Wins + Losses)
Points.Gained <- c(30, 50, 44, 28, 60)
Points.Allowed <- c(28, 74, 40, 92, 25)
season <- data.frame(Teams, Wins, Losses, Win.Pct, Points.Gained, Points.Allowed)
season
## Calculate Scoring Ratio
season$Score.Ratio <- with(season, Points.Gained/Points.Allowed)
## Predict Wins from Scoring Ratio
exponent <- 2
season$Predicted.Wins <- season$Score.Ratio^exponent / (1 + season$Score.Ratio^exponent)
## Calculate Mean Absolute Error
season$Abs.Error <- with(season, abs(Win.Pct - Predicted.Wins))
mae <- mean(season$Abs.Error)
mae
Вот мой цикл for, который просматривает диапазон параметров степени, чтобы увидеть, является ли какой-либо из них лучше, чем показатель степени 2, использованный выше. По какой-то странной причине, когда я запускаю цикл for, он продолжает повторять таблицу несколько раз (многие из таблиц с неверными результатами), пока, наконец, не получит правильную таблицу как последнюю. Может кто-нибудь объяснить мне, что не так с моим циклом for и почему это происходит?
## Identify potential exponent options that minimize mean absolute error
exp.options <- seq(from = 0.5, to = 3, by = 0.1)
mae.results <- data.frame("Exp" = exp.options, "Results" = NA)
for(i in 1:length(exp.options)){
win.pct <- season$Predicted.Wins
pred.win.pct <-
(season$Points.Gained/season$Points.Allowed)^exp.options[i] /
(1 + (season$Points.Gained/season$Points.Allowed)^exp.options[i])
mae.results[i,2] <- mean(abs(win.pct - pred.win.pct))
print(mae.results)
}