Получение неправильных бета-версий при выполнении регрессии OLS в R - PullRequest
0 голосов
/ 19 ноября 2018

Мой первый вопрос здесь. Эта проблема украла дни из моей жизни. Я знаю, это не так важно, но в то же время: мне нужно знать! Я знаю, что есть много хороших формул для регрессии. Но когда я пытаюсь сделать это, используя старую арифметику, просто чтобы понять ее, я получаю нелепые ответы на бета-версии.

Предполагается, что бета-вектор (X'X) ^ (- 1) X'y (где X - матрица регрессоров, а y - вектор ответов). Я приведу один пример (и то, что он не подходит для OLS, не имеет значения - я просто хочу b: s здесь):

X <- matrix(1:10)
y <- matrix(2:11)
b <- (t(X) %*% X)^(-1) %*% t(X) %*% y

Что дает b = 1,142857, в то время как итоговое значение (lm (y ~ X)) дает бета = 1 и перехват 1. Я добавляю константу к X, чтобы получить перехват: X <-cbind (X, 1) и я получаю результат b = (2.324675,14.5), который вообще не имеет смысла. Что я тут не так делаю? </p>

Ответы [ 3 ]

0 голосов
/ 19 ноября 2018

Проблема с использованием ^(-1) для обратного.Это не работает так для матриц.solve используется для получения обратной матрицы: https://www.statmethods.net/advstats/matrix.html

# use solve 
b <- solve(t(X) %*% X) %*% t(X) %*% y

# fit model without intercept
m <- lm(y~-1+X)
summary(m)

# same coefficients
b
m$coefficients


# with intercept
X2 <- cbind(rep(1, 10), X)

b2 <- solve(t(X2) %*% X2) %*% t(X2) %*% y
m2 <- lm(y~+X)
summary(m2)

b2
m2$coefficients
0 голосов
/ 19 ноября 2018
 X <- cbind(1, matrix(1:10))
 b<-solve(t(X)%*%X)%*%t(X)%*%y

https://www.rdocumentation.org/packages/Matrix/versions/0.3-26/topics/solve.Matrix

0 голосов
/ 19 ноября 2018

Здесь есть две проблемы. Первое - это проблема обозначений. Степень -1 в формуле фактически указывает на обратную матрицу. Это рассчитывается с solve в R, а не с ^-1, что указывает на поэлементные обратные значения.

Затем вам нужно создать матрицу дизайна, которая фактически содержит перехват.

X <- matrix(1:10)
y <- matrix(2:11)^2
coef(lm(y~X))
#(Intercept)           X 
#        -21          13 

X <- cbind(1, X)
solve(t(X) %*% X) %*% t(X) %*% y
#     [,1]
#[1,]  -21
#[2,]   13

Очевидно, что вы не должны делать эту инверсию матрицы в реальных приложениях (а R lm этого не делает).

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