LM的覆盖率计算

克留

我正在尝试计算我在回归的截距和斜率上生成的一组残留自举副本的覆盖率。谁能告诉我如何计算置信区间的覆盖率?非常感谢。

请注意,我使用Qr分解手动运行了回归,但lm()如果更简单,则可以使用我只是认为手动执行会更快。

set.seed(42)  ## for sake of reproducibility
n <- 100
x <- rnorm(n)
e <- rnorm(n)
y <- as.numeric(50 + 25*x + e)
dd <- data.frame(id=1:n, x=x, y=y)

mo <- lm(y ~ x, data=dd)

# Manual Residual Bootstrap
resi <- residuals(mo)
fit <- fitted(mo)
ressampy <- function() fit + sample(resi, length(resi), replace=TRUE)
# Sample y values:
head(ressampy())
# Qr decomposition of X values
qrX <- qr(cbind(Intercept=1, dd[, "x", drop=FALSE]), LAPACK=TRUE)
# faster than LM
qr.coef(qrX, dd[, "y"])
# One Bootstrap replication
boot1 <- qr.coef(qrX, ressampy())
# 1000 bootstrap replications
boot <- t(replicate(1000, qr.coef(qrX, ressampy())))
杰伊

您可以首先使用confint“ HC2”健壮的vcov计算CI

mo <- lm(y ~ x, data=dd)
# ci <- confint(mo)
## or
library(lmtest);library(sandwich)
ci <- confint(coeftest(mo, vcov.=vcovHC(mo, type="HC3")))  ## probably better

然后假设正态分布,则quantile在升压时计算.025和.975 s FUNmatrixStats::colQuantiles会很好并且快速地做到这一点。

FUN <- function(qrX) {
  b <- t(replicate(200, qr.coef(qrX, ressampy())))
  matrixStats::colQuantiles(b, probs=c(.025, .975))
}

set.seed(42)
R <- 200
res <- replicate(R, FUN(qrX), simplify=F)

## where one iteration looks like this
res[[1]]
#               2.5%    97.5%
# Intercept 49.77095 50.09592
# x         24.83468 25.20457

## grab results for intercept and x
icc <- t(sapply(res, function(x, y) x[grep(y, rownames(x)), ], "Intercept"))
cfc <- t(sapply(res, function(x, y) x[grep(y, rownames(x)), ], "x"))

最后,data.table::between为了方便起见,请检查引导程序的配置项相对于引导程序R重复数位于原始配置项之间的次数,以获得覆盖概率

## intercept
sum(apply(icc, 1, function(x) {
  all(data.table::between(x, ci[1,1], ci[1,2]))
}))/R
# [1] 0.536

## x
sum(apply(cfc, 1, function(x) {
  all(data.table::between(x, ci[2,1], ci[2,2]))
}))/R
# [1] 0.796

编辑

要仅使用基数R,您可以代替 matrixStats::colQuantiles

matrixStats::colQuantiles(b, probs=c(.025, .975))
#               2.5%    97.5%
# Intercept 49.24900 50.12374
# x         25.02903 25.68369
t(apply(b, 2, quantile, probs=c(.025, .975)))
#               2.5%    97.5%
# Intercept 49.24900 50.12374
# x         25.02903 25.68369

而不是data.table::between

data.table::between(1:5, 2, 4)
# [1] FALSE  TRUE  TRUE  TRUE FALSE
1:5 >= 2 & 1:5 <= 4
# [1] FALSE  TRUE  TRUE  TRUE FALSE

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

计算屏幕覆盖率

来自分类Dev

如何计算全球覆盖率?

来自分类Dev

使用Robolectric时如何计算测试覆盖率

来自分类Dev

SonarQube:仅计算增量的代码覆盖率

来自分类Dev

SonarQube:从未计算过新代码的覆盖率

来自分类Dev

计算刮擦式网络蜘蛛的覆盖率

来自分类Dev

SimpleCov计算用户模型的0%覆盖率

来自分类Dev

如何根据土地覆盖率计算R中的散点图?

来自分类Dev

SonarQube:仅计算增量的代码覆盖率

来自分类Dev

如何从EclEmma中的覆盖率计算中排除类而不实际从覆盖率本身中排除类

来自分类Dev

Xcode:代码覆盖率

来自分类Dev

RSpec的代码覆盖率

来自分类Dev

CoffeeScript代码覆盖率

来自分类Dev

什么是序列覆盖率?

来自分类Dev

测试覆盖率:如何覆盖断言?

来自分类Dev

如何使用C ++计算1-100数组中的覆盖率百分比?

来自分类Dev

pytest-cov-不计算集成测试目录的覆盖率

来自分类Dev

如何计算R中每一列的残基(核苷酸)覆盖率?

来自分类Dev

VEINS / OMNeT ++中的代码覆盖率计算和性能分析

来自分类Dev

如何使用C ++计算1-100数组中的覆盖率百分比?

来自分类Dev

如何根据打印的页面数计算黑色碳粉盒的平均页面覆盖率?

来自分类Dev

计算代码覆盖率时 Travis-CI 上出现“找不到包目录”错误

来自分类Dev

VS2013中的代码覆盖率显示测试的覆盖率,而不是实际代码的覆盖率

来自分类Dev

测试覆盖率vs pytest

来自分类Dev

单元测试代码覆盖率

来自分类Dev

测试中的代码覆盖率

来自分类Dev

代码覆盖率和回报

来自分类Dev

Jacoco-零覆盖率

来自分类Dev

Jenkins代码覆盖率如何工作?