Я выполнил регрессионный анализ в R для некоторого набора данных и попытался предсказать вклад каждой отдельной независимой переменной в зависимую переменную для каждой строки в наборе данных.

Так что примерно так:

set.seed(123)                                              
y <- rnorm(10)                                           
m <- data.frame(v1=rnorm(10), v2=rnorm(10), v3=rnorm(10))
regr <- lm(formula=y~v1+v2+v3, data=m)  
summary(regr)
terms <- predict.lm(regr,m, type="terms")

Вкратце: запустите регрессию и используйте функцию прогнозирования для вычисления членов v1, v2 и v3 в наборе данных m. Но мне трудно понять, что вычисляет функция прогнозирования. Я ожидал, что он умножит коэффициент результата регрессии на переменные данные. Итак, что-то вроде этого для v1:

coefficients(regr)[2]*m$v1

Но это дает разные результаты по сравнению с функцией прогнозирования.

Собственный расчет:

0.55293884  0.16253411  0.18103537  0.04999729 -0.25108302  0.80717945  0.22488764 -0.88835486  0.31681455 -0.21356803

И спрогнозируем расчет функции:

0.45870070  0.06829597  0.08679724 -0.04424084 -0.34532115  0.71294132  0.13064950 -0.98259299  0.22257641 -0.30780616

Функция прогнозирования имеет значение 0,1 или около того. Также, если вы добавляете все термины в функцию прогнозирования вместе с константой, это не добавляет к общему прогнозу (с использованием type = "response"). Что здесь вычисляет функция прогнозирования и как я могу сказать ей, что я рассчитываю, что я сделал с коэффициентами (regr) [2] * m $ v1?

6
Tall Measure 17 Дек 2017 в 12:35

1 ответ

Лучший ответ

Все следующие строки приводят к одним и тем же прогнозам:

# our computed predictions
coefficients(regr)[1] + coefficients(regr)[2]*m$v1 +
  coefficients(regr)[3]*m$v2 + coefficients(regr)[4]*m$v3

# prediction using predict function
predict.lm(regr,m)

# prediction using terms matrix, note that we have to add the constant.
terms_predict = predict.lm(regr,m, type="terms")
terms_predict[,1]+terms_predict[,2]+terms_predict[,3]+attr(terms_predict,'constant')

Вы можете узнать больше об использовании type="terms" здесь < / а>.

Причина, по которой ваше собственное вычисление (coefficients(regr)[2]*m$v1) и вычисление функции прогнозирования (terms_predict[,1]) различаются, заключается в том, что столбцы в матрице терминов центрированы вокруг среднего значения, поэтому их среднее значение становится равным нулю:

# this is equal to terms_predict[,1]
coefficients(regr)[2]*m$v1-mean(coefficients(regr)[2]*m$v1)

# indeed, all columns are centered; i.e. have a mean of 0.
round(sapply(as.data.frame(terms_predict),mean),10)

Надеюсь это поможет.

7
Florian 18 Дек 2017 в 07:45