#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))