Exercício 1:


  1. Escreva uma função para estimar um modelo de regressão linear por OLS com, ao menos, dois argumentos: y (variável dependente); e x (regressores). O output deve estar organizado em uma tabela contendo os coeficientes estimados, os erros-padrão, a estatística t e o p-valor.

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