Predict.lm в R не может распознать новые данные

Я выполняю линейную регрессию, где предиктор классифицируется по другому значению, и у меня возникают проблемы при создании смоделированных ответов для новых данных.

Сначала я генерирую некоторые случайные значения для предиктора и условия ошибки. Затем я строю ответ. Обратите внимание, что предикторКоэффициент s зависит от значения категориальной переменной. Я составляю матрицу дизайна на основе предиктора и его категории.

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 строк

Если только яЯ очень сильно ошибаюсь, я не долженне должно быть никаких проблем с именами переменных. (Есть одно или два обсуждения на этой доске, которые предлагают эту проблему.) Обратите внимание, что первое предсказание работает хорошо, а второе - нет. Единственное изменение заключается в том, что во втором прогнозе используются только первые пять строк матрицы проекта.

Мысли?

Ответы на вопрос(2)

Ваш ответ на вопрос