我正在尝试重建R中的lm()函数作为练习。这是我目前正在使用的代码(你会看到函数中唯一的return()值是b,但是一旦修复了整个函数,我就会改变它):
OLS <- function(y,X){
df <- nrow(X) - ncol(X);
b <- solve(t(X) %*% X) %*% (t(X) %*% y);
se_whole <- as.numeric(sqrt((t(y - X %*% b)%*%(y - X %*% b))/df));
se_beta <- se_whole * solve(t(X) %*% X);
return(b)
}
当我运行该函数时,我得到的所有b都是NA的列向量。为什么会这样?我认为这与我在函数中对b的定义有关,但我似乎无法弄清楚我哪里出错了。也许有人可以启发我!
谢谢!
答案 0 :(得分:3)
我应用了您的代码,它似乎对我有用。但是,为什么你只返回b?你对s.e.不感兴趣吗?还有吗?
以下站点逐步手动导出R中的OLS。整体而言,代码似乎是一样的。
http://economictheoryblog.com/2016/02/20/rebuild-ols-estimator-manually-in-r