微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。