Как рассчитать b0 и b1 в простой линейной регрессии с R? - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь создать программу с 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)

Но это не удается

Ответы [ 2 ]

1 голос
/ 18 апреля 2020

Более простой способ определения вашей функции заключается в следующем:

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)
0 голосов
/ 31 марта 2020

Два вопроса.

  1. b0 и b1 не существуют при вызове функции, поэтому вы не можете передавать их как аргументы - вы можете передавать их как строки, чего и ожидает switch. Поэтому, когда вы вызываете regression, называйте его как regression("b1", x, y) или regression("b0", x, y).

  2. В разделе кода b0 = {...} вы вызываете промежуточный результат b, но позже попробуйте сослаться на b1. Опять же, b1 не существует, поэтому назовите свой промежуточный результат b1, а не b.

Решите эти проблемы, и я думаю, что ваша функция будет работать нормально:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...