如何使用用于预测的回归lm函数

时间:2016-05-23 18:22:21

标签: r regression lm function

我对数据集应用线性回归:

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

现在我想使用这个拟合函数来知道

的预测值
  1. 内插值(例如x = 3.5)
  2. 外推值(例如x = 110)
  3. 我通过网络找到了这个答案:

    y2=predict(f0, data.frame(x=seq(0,100,1)))
    

    但这与我想要的不同。我当然可以使用它们的参数手动实现这些函数,但我希望它具有通用性。

    任何暗示欢迎!

1 个答案:

答案 0 :(得分:2)

在线性回归中,您的最佳估计(无论您是否具有内部/外部)通常只是计算拟合值。也就是说,你有等式:

$$ y = \ beta_0 + \ beta_1 x_1 + \ dotso + \ beta_k x_k $$

简单地输入值。乘以$ \ beta_j $和sum。简单的方法是将数据存储在向量中。像这样:

$$ y = \ boldsymbol {\ beta}'X $$

其中$ \ boldsymbol {\ beta}'$是系数的行向量$(1 \次k)$和$ X $是列向量$(k \次1)$。因此,$ y $是一个标量(拟合/预测值)。在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)))

使用预测应该是您首选的方式。  它通过名称跟踪变量,因此您不会  必须按正确的顺序组织它才能获得一个吝啬的数字。