Построение подобранной линейной регрессии, умноженной на коэффициент k

#r

#r

Вопрос:

Построение простой линейной регрессии имеет код

 plot(X,Y, pch=16)
  

где Y_i=b_0 b_1X_i, а подогнанная линия равна

 abline(lm(Y~X))
  

Тогда каким будет код для подобранного значения Y_hat, если X умножить на коэффициент k?
Было бы

 abline(k*lm(Y~X))
  

поскольку k * Y_hat = k * b_0 k * b_1 * X_i?

Ответ №1:

Это напрямую не сработает, потому что вы не можете умножить "lm" объект на что-либо. Однако вы можете нарисовать линию регрессии различными способами, используя stats:::plot.lm method , пересечение и наклон и выводя (упорядоченные) подобранные значения.

 ## baseline regression
(fit0 <- lm(y ~ x, d))$coe
# (Intercept)           x 
#    1.111633    3.427159 

op <- par(mfrow=c(1, 3))  ## set pars

plot(y ~ x, d, main="line.fit")
abline(fit0)  ## line by stats:::plot.lm method

plot(y ~ x, d, main="line.coef")
abline(a=fit0$coefficients[1], b=fit0$coefficients[2])  ## intercept and slope

plot(y ~ x, d, main="line.fitted")
lines(sort(d$x), fit0$fitted.values[order(d$x)])  ## (ordered) fitted values
  

введите описание изображения здесь

Теперь давайте умножим x данные нашего примера (см. Ниже) на k , чтобы получить xk .

 k <- 1e5
d <- transform(d, xk=x * k)
(fit.k <- lm(y ~ xk, d))$coe
#  (Intercept)           xk 
# 1.111633e 00 3.427159e-05 
  

Мы можем видеть только изменения наклона по сравнению с fit0 , он делится на k . Перехват остается неизменным. Соответственно, мы применяем это понимание к нашим методам построения графиков.

 plot(y ~ xk, d, main="line.fit");abline(fit.k)

plot(y ~ xk, d, main="line.coef")
abline(a=fit.k$coefficients[1], b=fit.k$coefficients[2], col="black")
abline(a=fit0$coefficients[1], b=fit0$coefficients[2]/k, lty=2, col="red")

plot(y ~ xk, d, main="line.fitted");lines(sort(d$xk), fit0$fitted.values[order(d$x)])

par(op)  ## reset pars
  

введите описание изображения здесь

Средний график демонстрирует, что линия соответствия fit.k совпадает с линией, на которой мы умножаем пересечение fit0 на k .


Пример данных:

 set.seed(42)
d <- data.frame(x=rnorm(1e2))
d <- transform(d, y=1.2   3.4*x   rnorm(1e2))