В чем разница между lm (нарушение $R ~ нарушение $ OBP) и lm (R ~ OBP)?

Я пытаюсь использовать R для создания линейной модели и использовать ее для прогнозирования некоторых значений. Тема — бейсбольная статистика. Если я сделаю это:

obp <- lm(offense$R ~ offense$OBP)
predict(obp, newdata=data.frame(OBP=0.5), interval="predict")

Я получаю сообщение об ошибке: Предупреждающее сообщение: «newdata» имеет 1 строку, но найденные переменные имеют 20 строк.

Однако, если я сделаю это:

attach(offense)
obp <- lm(R ~ OBP)
predict(obp, newdata=data.frame(OBP=0.5), interval="predict")

Он работает так, как ожидалось, и я получаю один результат. Какая разница между двумя? Если я просто напечатаю OBP и обиду $OBP, они будут выглядеть одинаково.


person Steve Rowe    schedule 12.03.2014    source источник


Ответы (2)


В первом случае вы получите это, если распечатаете модель:

Call:
lm(formula = offense$R ~ offense$OBP)

Coefficients:
(Intercept)  offense$OBP  
    -0.1102       0.5276 

Но во втором вы получаете это:

Call:
lm(formula = R ~ OBP)

Coefficients:
(Intercept)          OBP  
    -0.1102       0.5276  

Посмотрите на название коэффициентов. Когда вы создаете свои новые данные с помощью newdata=data.frame(OBP=0.5), это на самом деле не имеет смысла для первой модели, поэтому новые данные игнорируются, и вы получаете только прогнозируемые значения с обучающими данными. Когда вы используете offense$R ~ offense$OBP, формула имеет только два вектора с каждой стороны, без имен, связанных с data.frame.

Лучший способ сделать это:

obp = lm(R ~ OBP, data=offense)
predict(obp, newdata=data.frame(OBP=0.5), interval="predict")

И вы получите правильный результат, предсказание для OBP=0.5.

person Ricardo Oliveros-Ramos    schedule 12.03.2014
comment
Спасибо. Потрясающий ответ. Я не знал о формулировке «данные = правонарушение». - person Steve Rowe; 13.03.2014

Нет никакой разницы --- вы получаете те же коэффициенты.

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

Большинство опытных пользователей делают

 lm(R ~ OBP, offense)

вместо.

person Dirk Eddelbuettel    schedule 12.03.2014