Условия суммирования без для л oop в р - PullRequest
0 голосов
/ 12 апреля 2020

Учитывая два вектора x и y:

x <- c(2.9, 6.7, 8.0, 3.1, 2.0, 4.1, 2.2, 8.9, 8.1, 7.9, 5.7, 1.6, 6.6, 3.0, 6.3)
y <- c(5.8 13.4 16.0  6.2  4.0  8.2  4.4 17.8 16.2 15.8 11.4  3.2 13.2  6.0 12.6)
mean_x = mean(x)
mean_y = mean(y)

Я хочу вычислить оценку OLS для beta_1 по формуле:

beta_1 = sum_i (x_i - mean(x)) (y_i - mean (y))/ sum_i (x_i - mean(x))^2.

Я знаю, что мог бы l oop с a для l oop над элементами x и y - есть ли способ сделать это в R, избегая циклов?

Редактировать: я делаю не хочу использовать лм. Мой вопрос, в частности, как суммирование по этим терминам может быть сделано без для l oop - OLS является лишь примером.

Ответы [ 2 ]

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

Это будет, как это сделать с алгеброй матриц, предполагая, что x - это матрица со столбцом 1 и столбцом значений, которые соответствуют x_1 в исходном уравнении. Преимущество в том, что оно обобщается, а также дает вам b_0.

x_0 <- c(1, 1, 1, 1, 1)
x_1 <- c(3,4,5,6,7)
x <- matrix(c(x_0, x_1), ncol =2 )
y <- c(4, 5, 4, 7, 9)
MASS::ginv(t(x) %*% x)%*% t(x) %*% y

Это было бы, как это сделать с нелинейной алгеброй, но вам нужно получить b_0 отдельно.

b_1 = sum((x_1- mean(x_1))*(y- mean (y)))/ sum ((x_1 - mean(x_1))^2)

Но если вы действительно хотите сделать это таким образом, вы можете использовать одну из «формул расчета», которая потребует меньше вложенности.

0 голосов
/ 12 апреля 2020

При использовании этого аналитическая формула для ? для многовариантного случая совпадает с одномерным:

solve(t(x) %*% x) %*% x %*% y

https://en.wikipedia.org/wiki/Ordinary_least_squares#Matrix / vector_formulation

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