如何用R计算简单线性回归中的b0和b1



我正试图用R创建一个程序,用最小二乘法在简单线性回归中手动计算b0和b1。

regression=function(num,x,y)
switch(num,
b1 = {n = 5
b = (n*sum(x*y)-sum(x)*sum(y))/(n*sum(x^2)-sum(x)^2)
print(b)},
b0 = {n = 5
b = (n*sum(x*y)-sum(x)*sum(y))/(n*sum(x^2)-sum(x)^2)
a = mean(y)-b1*mean(x)
print(a)}
)
x = c(1, 2, 3, 4, 5)
y = c(2, 1, 4, 5, 3)
regression(b1, x, y)
regression(b0, x, y)

但它没有通过

定义函数的一种更简单的方法如下,

regression=function(num,x,y){
n=num
b1 = (n*sum(x*y)-sum(x)*sum(y))/(n*sum(x^2)-sum(x)^2)
b0=mean(y)- b1*mean(x)
return(c(b0,b1))
}

这样,你就可以得到一个包含b0和b1的向量。在下面的代码中,我展示了如何访问它并绘制结果回归线。

x = c(1, 2, 3, 4, 5)
y = c(2, 1, 4, 5, 3)
b0<-regression(5,x,y)[1]
b1<-regression(5,x,y)[2]
regression_line<-b0+b1*x
plot(x,y)
lines(regression_line)

两个问题。

  1. b0b1在调用函数时不存在,因此不能将它们作为参数传入--可以将它们作为字符串传入,这正是switch所期望的。因此,当您调用regression时,请将其称为regression("b1", x, y)regression("b0", x, y)

  2. 在代码的b0 = {...}部分,您调用一个中间结果b,但稍后尝试引用b1。同样,b1不存在,所以将中间结果称为b1,而不是b

解决这些问题,我认为你的功能会很好地工作:(

最新更新