Я запускаю линейную регрессию, в которой предиктор классифицируется по другому значению, и у меня возникают проблемы с созданием смоделированных ответов для новых данных.
Во-первых, я генерирую несколько случайных значений для предиктора и ошибок. Затем я строю ответ. Обратите внимание, что коэффициент предиктора зависит от значения категориальной переменной. Я составляю матрицу дизайна на основе предиктора и его категории.
set.seed(1)
category = c(rep("red", 5), rep("blue",5))
x1 = rnorm(10, mean = 1, sd = 1)
err = rnorm(10, mean = 0, sd = 1)
y = ifelse(category == "red", x1 * 2, x1 * 3)
y = y + err
df = data.frame(x1 = x1, category = category)
dm = as.data.frame(model.matrix(~ category + 0, data = df))
dm = dm * df$x1
fit = lm(y ~ as.matrix(dm) + 0, data = df)
# This line will not produce a warning
predictOne = predict.lm(fit, newdata = dm)
# This line WILL produce a warning
predictTwo = predict.lm(fit, newdata = dm[1:5,])
Предупреждение:
'newdata' было 5 строк, но найденные переменные имеют 10 строк
Если я не ошибаюсь, у меня не должно быть проблем с именами переменных. (На этой доске есть одно или два обсуждения, которые предлагают эту проблему.) Обратите внимание, что первый прогноз выполняется нормально, а второй — нет. Единственное изменение заключается в том, что второй прогноз использует только первые пять строк матрицы плана.
Мысли?
lm
. - person joran   schedule 22.01.2013predict.lm
говорится, что аргумент «newdata» должен быть фреймом данных. Предупреждение выглядит немного не так, как нужно, но, возможно, оно лучше, чем поведение по умолчанию, которое заключается в молчаливом сообщении прогнозов на основе исходных данных, когда вы могли подумать, что получаете новые прогнозы. - person IRTFM   schedule 22.01.2013