r - Julia中回归系数的不同标准误差
问题描述
我正在搞乱标准错误,试图确保我理解它们以及我想要的,但看起来lm
标准矩阵代数有不同的计算方法,或者我的计算可能不正确......
这是我跑的
using DataFrames, GLM, LinearAlgebra, Statistics, LaTeXStrings, PyPlot, Random, Distributions, ProgressBars
stderr = Array{Float64,2}(undef, 20,3)
manstderr = Array{Float64,2}(undef, 20,3)
sigstderr = Array{Float64,2}(undef, 20,3)
_stderr = Array{Float64,2}(undef, 20,2)
_manstderr = Array{Float64,2}(undef, 20,2)
_sigstderr = Array{Float64,2}(undef, 20,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[:,1],stderr[:,2], label="full")
scatter(_stderr[:,1],_stderr[:,2], label="omit")
_ = legend()
但是当我测量矩阵之间差异的范数时,它还不足以让我相信它们在做同样的事情。
println("full")
println(norm(stderr - manstderr),"\n",
norm(stderr - sigstderr))
println()
println("omit")
println(norm(_stderr - _manstderr),"\n",
norm(_stderr - _sigstderr))
full
0.044288628759881314
0.04428864660024369
omit
0.64138313684955
0.7755064744520012
如果它们以相同的方式计算,我希望规范应该更接近?我不认为这是由于舍入错误。
我认为应该manstderr
如何lm
找到标准错误,但我很惊讶它们并没有靠得更近。这就是为什么我也加入了sigstderr
计算。
如果你很好奇,这个实验是为了看看不包括相关但不相关的回归量会如何影响标准误差。
我包含在R
标签中是因为也许有些R
人已经熟悉这里发生的事情。从我在其他帖子中读到的内容来看,似乎可能存在舍入错误,但我认为这不适用于我的情况。
解决方案
推荐阅读
- python - 子进程通信挂起
- jquery - 如何仅在访问者第一次访问我的网站时显示弹出窗口?
- javascript - ERROR 错误:未捕获(承诺中):XMLHttpRequest.onreadystatechange 处的错误错误
- css - 我怎样才能使这个主导航居中
- r - 将 R 中的数据框转换为“Python 字典”
- regex - 正则表达式长度问题
- file - 运行应用程序时如何确定用户/组?
- php - Mac OS 上的 PHP 7.2 memcached 扩展
- java - JavaFx:将列表中元素的索引绑定到元素的属性
- android - 未在我的模拟器或 Adb 上列出的设备