我想从 sem R包中 tsls 命令的输出中提取标准错误。
使用一些通用代码作为示例:
fit = tsls(Y ~ X, ~Z)
summary(fit)
摘要函数除了回归估计之外还输出一些东西(例如,模型公式,残差摘要)。
我想要输出标准错误的等效于 fit $ coef 。但这似乎不是一种选择。用于执行 glm 和 lm 输出的等效代码的所有代码似乎都不起作用。有没有办法破解输出?
答案 0 :(得分:3)
有时候需要花一点时间才能找到这些值的来源。如果您没有从str(fit)
获得任何线索,那么最佳观看的地方就是查看summary.tsls
正在做什么。
在getAnywhere("summary.tsls")
的帮助下,我们看到了:
getAnywhere("summary.tsls")
# A single object matching ‘summary.tsls’ was found
# It was found in the following places
# registered S3 method for summary from namespace sem
# namespace:sem
# with value
#
# function (object, digits = getOption("digits"), ...)
# {
# ###
# ### \\\SNIP///
# ###
# std.errors <- sqrt(diag(object$V))
# ###
# ### \\\SNIP///
# ###
# }
# <bytecode: 0x503c530>
# <environment: namespace:sem>
因此,要获得您正在寻找的价值,您需要自己计算:
sqrt(diag(fit$V))
可重现的例子:
library(sem)
fit <- tsls(Q ~ P + D, ~ D + F + A, data=Kmenta)
summary(fit)
#
# 2SLS Estimates
#
# Model Formula: Q ~ P + D
#
# Instruments: ~D + F + A
#
# Residuals:
# Min. 1st Qu. Median Mean 3rd Qu. Max.
# -3.4300 -1.2430 -0.1895 0.0000 1.5760 2.4920
#
# Estimate Std. Error t value Pr(>|t|)
# (Intercept) 94.63330387 7.92083831 11.94738 1.0762e-09 ***
# P -0.24355654 0.09648429 -2.52431 0.021832 *
# D 0.31399179 0.04694366 6.68869 3.8109e-06 ***
# ---
# Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#
# Residual standard error: 1.9663207 on 17 degrees of freedom
sqrt(diag(fit$V))
# (Intercept) P D
# 7.92083831 0.09648429 0.04694366