Model.frame и обновление

В R вы могли бы оценить модель с зависимой от журнала зависимой переменной:

mfit <- lm(
 formula = log(salary) ~ yrs.service + yrs.since.phd, 
 data = Salaries
 )

Затем вы можете изменить рамку модели и вызвать обновление, чтобы обновить модель:

n <- nrow(Salaries)
mfr <- model.frame(mfit)[sample(1:n, size=n, replace=TRUE),]
mfit2 <- update(mfit, data = mfr)

Это приведет к ошибке:

Error in eval(expr, envir, enclos) : object 'salary' not found

Причина в том, что формула все еще имеет зависимую переменную log(salary), а переменная в кадре модели называется log(salary). R думает, что он может найти salary, а затем называть log на нем. Такая же ошибка возникла бы без повторной выборки, в примере просто показано, почему это может понадобиться.

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

1 ответ

Я не думаю, что это ошибка. Так как формула может принимать функции и операторы, т.е.

log(foo)*3 ~ abs(fooller) + fooz

Он не может отделить объект abs(fooller) от результата функции abs() с аргументом fooller.

В моей точке зрения это проблема соглашений об именах. Вы не называете переменную или столбец как имя, которое может быть неправильно понято как функция. Вместо этого вы можете использовать salary.log.

licensed under cc by-sa 3.0 with attribution.