Resposta:
No modelo de regressão abaixo:
\[y_i = X_i \beta + e_i\]
Onde:
O estimador MQO é dado por:
\[\widehat{\beta}_\mathrm{OLS} = (X'X)^{-1} X'y\] A função abaixo retorna os resultados da estimação por MQO:
ols <- function(Y,X){
# variáveis
Y <- as.matrix(Y)
X <- as.matrix(X)
n <- nrow(Y)
# coeficientes (X'X)^(-1)(X'Y)
betas <- solve(t(X) %*% X) %*% t(X) %*% Y
# resíduos: Y-Xb
res <- as.matrix(Y-X %*% betas)
# graus de liberdade dos resíduos
glr <- n - ncol(X) - 1
# soma dos quadrados dos resíduos
s2 <- sum(res^2)/glr
varcov <- s2 * solve(t(X) %*% X)
# erros-padrão
se <- as.matrix(sqrt(diag(varcov)))
# t-stat
tstat <- betas/se
# p-valor
pv <- 2 * pt(-abs(tstat), glr)
# saída
output <- data.frame(betas, se, tstat, pv)
colnames(output) <- c("Coeficientes", "Erros-padrão", "Estatística t", "P-valor")
print(output)
}
Teste:
set.seed(42)
Y <- rnorm(500) # variável dependente
int <- rep(1, 500) # intercepto
x1 <- rnorm(500) # variável explicativa
x2 <- rnorm(500) # variável explicativa
X <- cbind(int, x1, x2) # base de dados
ols(Y, X)
## Coeficientes Erros-padrão Estatística t P-valor
## int -0.028539214 0.04362115 -0.6542517 0.5132529
## x1 -0.007954455 0.04222468 -0.1883840 0.8506527
## x2 0.040486714 0.04510937 0.8975234 0.3698751