如何使用用于预测的回归 lm 函数
How to use a regression lm function used for prediction
我对数据集应用线性回归:
## Random set
set.seed(123)
i0=0
imax = 100
x = seq(0,imax,1)
y = c(i0)
for( i in 1:imax ){
i1 = rnorm( n = 1, mean = i0, sd = 1)
y = c( y, i1 )
i0 = i1
}
plot(x,y)
## Build a data frame out of it
d0 = data.frame( x, y )
## Apply a linear regression
f0 = lm( d0$y ~ d0$x )
## Plot the fitted function
abline(f0)
现在我想使用这个拟合函数来了解
的预测值
- 内插值(例如 x=3.5)
- 外推值(例如 x=110)
我在网上只找到了这个答案:
y2=predict(f0, data.frame(x=seq(0,100,1)))
但这和我想要的不一样。我当然可以使用它们的参数手动实现这些功能,但我想让它通用。
欢迎任何提示!
在线性回归中,您的最佳估计(无论您是否 inter/extra 推算)始终只是计算拟合值。也就是说,您有等式:
$$
y = \beta_0 + \beta_1 x_1 + \dotso + \beta_k x_k
$$
您只需输入值即可。乘以 $\beta_j$,然后求和。做到这一点的简单方法是将数据存储在向量中。像这样:
$$
y = \boldsymbol{\beta}'X
$$
其中 $\boldsymbol{\beta}'$ 是系数 $(1 \times k)$ 的行向量,$X$ 是列向量 $(k \times 1)$。因此 $y$ 是一个标量(fitted/predicted 值)。在 R 中它会像:
# Generate data:
x <- rgamma(n = 1000, shape = 2)
y <- 5 + 0.5*x + rnorm(1000)
reg1 <- lm(y ~ x)
# Now for doing unit prediction:
some_new_x <- 5 # This is the new value of x you wish to predict for
intercept <- 1 # This is always 1
coef(reg1) %*% c(intercept, some_new_x)
# We can also do predictions for an entire data frame:
x <- seq(from = 1, to = 1000, by = 1)
predict(reg1, newdata = data.frame(cbind(1, x)))
使用预测确实应该是您的首选方式。
它按名称跟踪变量,因此您不必
必须以正确的顺序组织它才能得到一个有意义的数字。
我对数据集应用线性回归:
## Random set
set.seed(123)
i0=0
imax = 100
x = seq(0,imax,1)
y = c(i0)
for( i in 1:imax ){
i1 = rnorm( n = 1, mean = i0, sd = 1)
y = c( y, i1 )
i0 = i1
}
plot(x,y)
## Build a data frame out of it
d0 = data.frame( x, y )
## Apply a linear regression
f0 = lm( d0$y ~ d0$x )
## Plot the fitted function
abline(f0)
现在我想使用这个拟合函数来了解
的预测值- 内插值(例如 x=3.5)
- 外推值(例如 x=110)
我在网上只找到了这个答案:
y2=predict(f0, data.frame(x=seq(0,100,1)))
但这和我想要的不一样。我当然可以使用它们的参数手动实现这些功能,但我想让它通用。
欢迎任何提示!
在线性回归中,您的最佳估计(无论您是否 inter/extra 推算)始终只是计算拟合值。也就是说,您有等式:
$$ y = \beta_0 + \beta_1 x_1 + \dotso + \beta_k x_k $$
您只需输入值即可。乘以 $\beta_j$,然后求和。做到这一点的简单方法是将数据存储在向量中。像这样:
$$ y = \boldsymbol{\beta}'X $$
其中 $\boldsymbol{\beta}'$ 是系数 $(1 \times k)$ 的行向量,$X$ 是列向量 $(k \times 1)$。因此 $y$ 是一个标量(fitted/predicted 值)。在 R 中它会像:
# Generate data:
x <- rgamma(n = 1000, shape = 2)
y <- 5 + 0.5*x + rnorm(1000)
reg1 <- lm(y ~ x)
# Now for doing unit prediction:
some_new_x <- 5 # This is the new value of x you wish to predict for
intercept <- 1 # This is always 1
coef(reg1) %*% c(intercept, some_new_x)
# We can also do predictions for an entire data frame:
x <- seq(from = 1, to = 1000, by = 1)
predict(reg1, newdata = data.frame(cbind(1, x)))
使用预测确实应该是您的首选方式。 它按名称跟踪变量,因此您不必 必须以正确的顺序组织它才能得到一个有意义的数字。