Julia关于回归系数的不同标准误差

问题描述

我正在弄乱标准错误,试图确保自己理解并理解它们,但是看起来lm和标准矩阵代数有不同的计算方式,或者也许我的计算方式是不正确...

这就是我跑的

using DataFrames,GLM,Linearalgebra,Statistics,LaTeXStrings,PyPlot,Random,distributions,ProgressBars

stderr = Array{Float64,2}(undef,20,3)
manstderr = Array{Float64,3)
sigstderr = Array{Float64,3)

_stderr = Array{Float64,2)
_manstderr = Array{Float64,2)
_sigstderr = Array{Float64,2)

σ = 10

for i in ProgressBar(1:Int(20))
    X = rand(Uniform(-100,100),Int(1e6),2)
    y = 1X[:,1]+3X[:,2] + rand(normal(0,σ),Int(1e6))
    data = DataFrame(x1=X[:,1],x2=X[:,2],y=y)
    
    # full
    ols = lm(@formula(y ~ x1 + x2),data)
    stderr[i,:] = stderror(ols)
    manstderr[i,:] = diag(var(y - predict(ols)) * inv(ols.mm.m'ols.mm.m))
    sigstderr[i,:] = diag(σ^2 * inv(ols.mm.m'ols.mm.m))
    
    # omit
    ols = lm(@formula(y ~ x1),data)
    _stderr[i,:] = stderror(ols)
    _manstderr[i,:] = diag(var(y - predict(ols)) * inv(ols.mm.m'ols.mm.m))
    _sigstderr[i,:] = diag(σ^2 * inv(ols.mm.m'ols.mm.m))
    
end
scatter(stderr[:,stderr[:,label="full")
scatter(_stderr[:,_stderr[:,label="omit")
_ = legend()

但是当我衡量矩阵之间差异的范数时,不足以让我相信它们在做同一件事。

println("full")
println(norm(stderr - manstderr),"\n",norm(stderr - sigstderr))
println()
println("omit")
println(norm(_stderr - _manstderr),norm(_stderr - _sigstderr))
full
0.044288628759881314
0.04428864660024369

omit
0.64138313684955
0.7755064744520012

如果以同样的方式计算这些规范,我希望这些规范应该更加接近?我不认为这是由于舍入错误引起的。

我认为manstderrlm如何找到标准错误方法,但令我惊讶的是它们之间的距离还不很近。这就是为什么我还要进行sigstderr计算。


如果您感到好奇,此实验旨在了解未能包含相关但不相关的回归变量将如何影响标准误差。


我之所以加入R标签,是因为也许有些R人已经熟悉这里发生的事情。从我在其他帖子中所读的内容来看,似乎可能存在舍入错误,但我认为我的情况不正确。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)