如何使用 R 计算简单线性回归中的 b0 和 b1?
How to calculate b0 and b1 in Simple Linear Regression With R?
我正在尝试使用 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)
但是失败了
两个问题。
调用函数时 b0
和 b1
不存在,因此不能将它们作为参数传入---您可以将它们作为参数传入字符串,这是 switch
所期望的。因此,当您调用 regression
时,将其调用为 regression("b1", x, y)
或 regression("b0", x, y)
.
在代码的 b0 = {...}
部分,您调用了中间结果 b
,但稍后尝试引用 b1
。同样,b1
不存在,因此将您的中间结果称为 b1
,而不是 b
。
解决这些问题,我认为你的函数会工作得很好:)
定义函数的更简单方法如下,
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)
我正在尝试使用 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)
但是失败了
两个问题。
-
调用函数时
b0
和b1
不存在,因此不能将它们作为参数传入---您可以将它们作为参数传入字符串,这是switch
所期望的。因此,当您调用regression
时,将其调用为regression("b1", x, y)
或regression("b0", x, y)
.在代码的
b0 = {...}
部分,您调用了中间结果b
,但稍后尝试引用b1
。同样,b1
不存在,因此将您的中间结果称为b1
,而不是b
。
解决这些问题,我认为你的函数会工作得很好:)
定义函数的更简单方法如下,
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)