首页 > 解决方案 > 使用 OLS 在 Mata 中循环

问题描述

我需要帮助在 Mata 中循环。我必须使用循环为 Mata 中的 OLS 的 Beta 系数编写代码。我不确定如何调用变量并创建代码。这是我到目前为止所拥有的。

foreach j of local X {
if { //for X'X
    matrix XX = [mata:XX = cross(X,1  ,  X,1)]
    XX
} 
else {
      mata:Xy = cross(X,1  , y,0)
      Xy
}

我收到一条错误消息“无效的语法”。

标签: stata

解决方案


我不确定你需要循环做什么。也许您可以提供更多有关此的信息。但是,以下示例可能会帮助您在mata.

从以下位置加载示例数据bcuse

ssc install bcuse
clear 
bcuse bwght
mata

x = st_data(., ("male", "parity","lfaminc","packs"))
cons = J(rows(x), 1, 1)
X = (x, cons)
y = st_data(., ("lbwght"))
beta_hat = (invsym(X'*X))*(X'*y)
e_hat = y - X * beta_hat
s2 = (1 / (rows(X) - cols(X))) * (e_hat' * e_hat)
B = J(cols(X), cols(X), 0)
n = rows(X)
for (i=1; i<=n; i++) {
    B =B+(e_hat[i,1]*X[i,.])'*(e_hat[i,1]*X[i,.])
    }
V_robust = (n/(n-cols(X)))*invsym(X'*X)*B*invsym(X'*X)
se_robust = sqrt(diagonal(V_robust))
V_ols = s2 * invsym(X'*X)
se_ols = sqrt(diagonal(V_ols))

beta_hat
se_robust

end

这远不是使用mata. 请参阅 Stata 博客了解另一个使用 的示例quadcross,我喜欢我的示例,因为它在代码中保留了更多的矩阵代数。


推荐阅读