From a708be1ccfbc51134b7810ab3896912fb1009fbb Mon Sep 17 00:00:00 2001 From: prdm0 Date: Wed, 29 Jul 2026 10:52:37 -0300 Subject: [PATCH 1/3] Update --- .DS_Store | Bin 0 -> 6148 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..ed14453acefb4754a7a44a6919271a5ace867ed4 GIT binary patch literal 6148 zcmeH~JqiLr422WjLa^D=avBfd4F=H@cmZ*@6t)oiIl3=D2(H#5@&d^>$xK-G6+0Ud z(fxhgiS#0}f*WOPVP=ZFlTjuat&j*d1jHcGw@z!`?*a}0V+TRr~nn90zagH z-P^F$I><-`r~nmsDq!D-0yoxV3;L%6!AAhFL)i^$pC!Oz1+XSt5EYn4D;TZnV~Ewg z9V~gSCR;GtMRWMje6rdU1Jh_1El6Nm9Sl@}3d|H(M&8@~e}sRU|7R^ssQ?xDGX=Ce zoDO@uRNk#`uV?jhR&CwjpdUwg`3XQ`SMdh!hW%m-uqIm&6&Qa6Tm}Xz@KpsKa_kbU literal 0 HcmV?d00001 From 70153bef5ab8dd7281b69815489f59e2becb7909 Mon Sep 17 00:00:00 2001 From: prdm0 Date: Wed, 29 Jul 2026 14:17:08 -0300 Subject: [PATCH 2/3] version 0.1.1.9000 --- .DS_Store | Bin 6148 -> 8196 bytes .Rhistory | 4 + .Rproj.user/67B916F4/pcs/source-pane.pper | 2 +- .../67B916F4/pcs/windowlayoutstate.pper | 14 +- R/data.R | 75 +++++ R/hc-weights.R | 50 ++-- R/hcinfer.R | 3 +- R/methods.R | 2 +- R/vcov-hc.R | 8 +- _pkgdown.yml | 3 + data-raw/Crime2009.R | 20 ++ data-raw/Hprice.R | 11 + data/Crime2009.rda | Bin 0 -> 1532 bytes data/Hprice.rda | Bin 0 -> 2392 bytes docs/404.html | 1 + docs/LICENSE-text.html | 1 + docs/LICENSE.html | 1 + docs/articles/hcinfer-bootstrap.html | 1 + docs/articles/hcinfer-comparison.html | 1 + docs/articles/hcinfer-hcbeta-algorithm.html | 265 ++++++++++++++++++ docs/articles/hcinfer-hcbeta-algorithm.md | 177 ++++++++++++ docs/articles/hcinfer-hcbeta.html | 74 +++-- docs/articles/hcinfer-hcbeta.md | 59 ++-- docs/articles/hcinfer-methodology.html | 31 +- docs/articles/hcinfer-methodology.md | 29 +- docs/articles/index.html | 3 + docs/articles/index.md | 2 + docs/articles/introduction.html | 41 +-- docs/articles/introduction.md | 40 +-- docs/authors.html | 1 + docs/index.html | 1 + docs/llms.txt | 6 + docs/news/index.html | 1 + docs/pkgdown.yml | 3 +- docs/reference/Crime2009.html | 141 ++++++++++ docs/reference/Crime2009.md | 82 ++++++ docs/reference/Hprice.html | 144 ++++++++++ docs/reference/Hprice.md | 89 ++++++ docs/reference/PublicSchools.html | 1 + docs/reference/PublicSchools2.html | 1 + docs/reference/boot_pairs.html | 1 + docs/reference/coef.hcinfer.html | 1 + docs/reference/confint.hcinfer.html | 1 + docs/reference/hc_methods.html | 1 + docs/reference/hcinfer-package.html | 1 + docs/reference/hcinfer.html | 24 +- docs/reference/hcinfer.md | 23 +- docs/reference/hcinfer_boot-methods.html | 1 + docs/reference/index.html | 15 + docs/reference/index.md | 4 + docs/reference/plot.hcinfer.html | 1 + docs/reference/plot.hcinfer_boot.html | 1 + docs/reference/plot.hcinfer_vcov.html | 1 + docs/reference/print.hcinfer.html | 1 + docs/reference/print.hcinfer_vcov.html | 1 + docs/reference/summary.hcinfer.html | 1 + docs/reference/summary.hcinfer_vcov.html | 1 + docs/reference/tests.html | 1 + docs/reference/vcov.hcinfer.html | 1 + docs/reference/vcov_hc.html | 11 +- docs/reference/vcov_hc.md | 10 +- docs/search.json | 2 +- docs/sitemap.xml | 3 + man/Crime2009.Rd | 47 ++++ man/Hprice.Rd | 44 +++ man/hcinfer.Rd | 3 +- man/vcov_hc.Rd | 8 +- tests/testthat/test-hc-methods.R | 2 +- tests/testthat/test-hc-weights.R | 49 +++- vignettes/hcinfer-hcbeta-algorithm.Rmd | 165 +++++++++++ vignettes/hcinfer-hcbeta.Rmd | 4 +- vignettes/hcinfer-methodology.Rmd | 27 +- 72 files changed, 1682 insertions(+), 162 deletions(-) create mode 100644 data-raw/Crime2009.R create mode 100644 data-raw/Hprice.R create mode 100644 data/Crime2009.rda create mode 100644 data/Hprice.rda create mode 100644 docs/articles/hcinfer-hcbeta-algorithm.html create mode 100644 docs/articles/hcinfer-hcbeta-algorithm.md create mode 100644 docs/reference/Crime2009.html create mode 100644 docs/reference/Crime2009.md create mode 100644 docs/reference/Hprice.html create mode 100644 docs/reference/Hprice.md create mode 100644 man/Crime2009.Rd create mode 100644 man/Hprice.Rd create mode 100644 vignettes/hcinfer-hcbeta-algorithm.Rmd diff --git a/.DS_Store b/.DS_Store index ed14453acefb4754a7a44a6919271a5ace867ed4..8e098c20b10c029c8fe850f9b7ece27c8c584875 100644 GIT binary patch literal 8196 zcmeHML2nyH6n^74*iIU{Nt2QasI2;e)DY4@KoJKVCs7p@8q1E_L`iXX?Txd|ddJ;e z$Al=7#T8DyaEB`rQg7S}cQ|sbRQ>=$;#|I&UAwyz=Tr$*up{lfxAVSl-kWFd8_$}E zSgF&vK{QK5SzJPD$v~2UBm+qXk_;pn zcoi~$JzKQwIs1NKP5LAQNe2Fx84&d$k4wm6D0_jFr30Nj0zjrQEE{zB(;qS~1|W-} z>;)1dXe^*Y22>UvF<5wVU;!QWVuZ%;@a7;^4>Po=5$BIo6n+~1bf9$w_lttd_Hpnd z{B`5_^rC_vr!`uqDy<^#8&sw(^qX{BVST5tL^K@h@NQPh3mwlFxlPk8WZ!{B=%GD6 z&*;>7^B7&P9lkmG$!Ob_=PxY$&Qc@k(bqEBOm;kbuX@0{RbTfzUP*U%#oZR?w$ayh zv*lb2aVC$;slvjpe!g($ezj zT>fNvabYh1!TTScp60SMh4((L)DG>I!@oxGXe``;Xd<{D^xr@mEWF{>Z36)c>tN8T zABC%AzxG%8RMYzF%#Dp-n0Wo7HaT@^a(Z%RX6Eu6vsb3xe5C9n9X3^>z30jeDY_I+gzdePM~R22o#)Jru$kbS>egUCsN;X z^p*)yIj|Ipw?askuG0#>?0fW(dh{)QPe0Pn^c(#_f75d|!7j6F>^hrcOY9?7WGk$~ zcG-QVvj+h`)&Jz*4(AI6^PmhqY*cas`T6C0$<13(}B`qyk zC}#@pF9nyOPw~*M;xWFBwXMg|vJm|cDdJ;s^swSXkKrN889{+U>59)R3w{)pgZ~x! zOqP=}G(@B@9x3x?z*widh%D2Qi@_Z&*zI^tZDF%OAA z7UAfeV+x}(q;QLZ9OaCnXq$3V^5XHxQXEC*=m?*<*zinnBuin4G8|>#_GQ{gK%N!n z|Mm0V|G$ijgqvg_$-pa~0hV5?u9XmEe}7ZsO<^F9>pm{g1g;lINkJzdVq6}_AqRgL mLeGb`Vkmoogaz&2e-V)E|B+t{!*); the underlying figures come +#' from the *Statistical Abstract of the United States* (2009) and are in the +#' public domain. +#' +#' @examples +#' data(Crime2009) +#' Crime2009[Crime2009$state == "Alabama", ] +#' +#' fit <- lm(violent ~ poverty + single, data = Crime2009) +#' hcinfer(fit, type = "hcbeta") +#' +"Crime2009" + +#' Boston-area home prices, 1990 +#' +#' @description +#' Sale prices, assessed values, and physical characteristics of 88 homes sold +#' in the Boston, Massachusetts area in 1990. The data are widely used to +#' illustrate regression and heteroskedasticity-consistent inference. +#' +#' @format A tibble with 88 rows and 10 variables: +#' \describe{ +#' \item{price}{House price, in thousands of U.S. dollars.} +#' \item{assess}{Assessed value, in thousands of U.S. dollars.} +#' \item{bdrms}{Number of bedrooms.} +#' \item{lotsize}{Size of the lot, in square feet.} +#' \item{sqrft}{Size of the house, in square feet.} +#' \item{colonial}{Indicator equal to 1 if the home is of colonial style.} +#' \item{lprice}{Natural logarithm of `price`.} +#' \item{lassess}{Natural logarithm of `assess`.} +#' \item{llotsize}{Natural logarithm of `lotsize`.} +#' \item{lsqrft}{Natural logarithm of `sqrft`.} +#' } +#' +#' @source +#' Wooldridge, J. M. (2020). *Introductory Econometrics: A Modern Approach*, +#' 7th ed. Cengage Learning, Boston, MA. The `hprice1` data are distributed with +#' the `wooldridge` R package and were originally collected from the real estate +#' pages of the *Boston Globe*. +#' +#' @examples +#' data(Hprice) +#' head(Hprice) +#' +#' fit <- lm(price ~ lotsize + sqrft + bdrms, data = Hprice) +#' hcinfer(fit, type = "hcbeta") +#' +"Hprice" diff --git a/R/hc-weights.R b/R/hc-weights.R index bf3ad5c..4ece088 100644 --- a/R/hc-weights.R +++ b/R/hc-weights.R @@ -30,7 +30,7 @@ default_hc_args <- function(type, dots, call = rlang::caller_env()) { args }, hcbeta = { - allowed <- c("c1", "c2", "lower", "upper") + allowed <- c("c1", "c2", "lower", "upper", "a_max", "b_max") check_allowed_dots(dots, allowed, call = call) args <- utils::modifyList(hc_default_arguments()$hcbeta, dots) args$c1 <- check_nonnegative_scalar(args$c1, "c1", call = call) @@ -50,6 +50,8 @@ default_hc_args <- function(type, dots, call = rlang::caller_env()) { call = call ) } + args$a_max <- check_scalar_number(args$a_max, "a_max", lower = 50, call = call) + args$b_max <- check_scalar_number(args$b_max, "b_max", lower = 50, call = call) args } ) @@ -62,22 +64,25 @@ hcbeta_components <- function(leverage, n, p, args, call = rlang::caller_env()) mu_hat <- mean(w) s2_w <- sum((w - mu_hat)^2) / (n - 1) - if (!is.finite(s2_w) || s2_w <= .Machine$double.eps) { - cli::cli_abort( - c( - "HCbeta cannot estimate beta parameters from these leverages.", - "x" = "The sample variance of truncated leverage complements is zero or too small." - ), - call = call - ) - } - - phi_hat <- mu_hat * (1 - mu_hat) / s2_w - 1 - a_hat <- mu_hat * phi_hat - b_hat <- (1 - mu_hat) * phi_hat zeta <- n / (n + 50) - a_tilde <- (1 - zeta) + zeta * a_hat - b_tilde <- (1 - zeta) + zeta * b_hat + + if (is.finite(s2_w) && s2_w > .Machine$double.eps) { + phi_hat <- mu_hat * (1 - mu_hat) / s2_w - 1 + a_hat <- mu_hat * phi_hat + b_hat <- (1 - mu_hat) * phi_hat + a_tilde <- min((1 - zeta) + zeta * a_hat, args$a_max) + b_tilde <- min((1 - zeta) + zeta * b_hat, args$b_max) + } else { + # Degenerate leverage configuration: all truncated complements coincide, so + # the method-of-moments variance vanishes and the raw shape estimates + # diverge. Following the article, the caps define the limiting shapes, which + # keeps HCbeta well-defined and drives g_t to the HC1 scale n / (n - p). + phi_hat <- Inf + a_hat <- Inf + b_hat <- Inf + a_tilde <- args$a_max + b_tilde <- args$b_max + } if (a_tilde <= 0 || b_tilde <= 0 || !is.finite(a_tilde) || !is.finite(b_tilde)) { cli::cli_abort( @@ -90,15 +95,10 @@ hcbeta_components <- function(leverage, n, p, args, call = rlang::caller_env()) ) } - beta_cdf <- stats::pbeta(w, a_tilde, b_tilde) - if (any(!is.finite(beta_cdf)) || any(beta_cdf <= 0)) { - cli::cli_abort( - "HCbeta produced invalid beta distribution probabilities.", - call = call - ) - } - - weights <- (n / (n - p)) * (1 / beta_cdf)^(args$c1 / n^args$c2) + n_over_np <- n / (n - p) + log_beta_cdf <- stats::pbeta(w, a_tilde, b_tilde, log.p = TRUE) + exponent <- pmin(-(args$c1 / n^args$c2) * log_beta_cdf, 700) + weights <- n_over_np * exp(exponent) list( weights = weights, diff --git a/R/hcinfer.R b/R/hcinfer.R index c865ea4..07692bd 100644 --- a/R/hcinfer.R +++ b/R/hcinfer.R @@ -87,7 +87,8 @@ #' summary(result) #' confint(result) #' -#' hcinfer(fit, type = "hcbeta", c1 = 7, c2 = 0.75, lower = 0.01, upper = 0.99) +#' hcinfer(fit, type = "hcbeta", c1 = 7, c2 = 0.75, lower = 0.01, upper = 0.99, +#' a_max = 10000, b_max = 10000) #' hcinfer(fit, type = "hc5", k = 0.7) #' hcinfer(fit, type = "hc5m", k = 0.7, k1 = 1, k2 = 0, k3 = 1) #' diff --git a/R/methods.R b/R/methods.R index 836bb98..752e614 100644 --- a/R/methods.R +++ b/R/methods.R @@ -36,7 +36,7 @@ hc_default_arguments <- function() { hc4m = list(), hc5 = list(k = 0.7), hc5m = list(k = 0.7, k1 = 1, k2 = 0, k3 = 1, gamma1 = 1, gamma2 = 1.5), - hcbeta = list(c1 = 7, c2 = 0.75, lower = 0.01, upper = 0.99) + hcbeta = list(c1 = 7, c2 = 0.75, lower = 0.01, upper = 0.99, a_max = 10000, b_max = 10000) ) } diff --git a/R/vcov-hc.R b/R/vcov-hc.R index 40d6da0..8eda63a 100644 --- a/R/vcov-hc.R +++ b/R/vcov-hc.R @@ -24,13 +24,16 @@ #' * `"hc5"`: `k = 0.7`. #' * `"hc5m"`: `k = 0.7`, `k1 = 1`, `k2 = 0`, `k3 = 1`, `gamma1 = 1`, and #' `gamma2 = 1.5`. -#' * `"hcbeta"`: `c1 = 7`, `c2 = 0.75`, `lower = 0.01`, and `upper = 0.99`. +#' * `"hcbeta"`: `c1 = 7`, `c2 = 0.75`, `lower = 0.01`, `upper = 0.99`, +#' `a_max = 10000`, and `b_max = 10000`. #' #' For `"hc5"` and `"hc5m"`, `k`, `k1`, `k2`, and `k3` must be nonnegative, #' while `gamma1` and `gamma2` must be positive. For `"hcbeta"`, `c1` must be #' nonnegative, `c2` must be positive, and `lower` and `upper` must lie in #' `(0, 1)` with `lower < upper`. The HCbeta truncation is #' \eqn{w_t = max(lower, min(1 - h_t, upper))}. +#' Both `a_max` and `b_max` must be finite and at least 50; they cap the shrunk +#' Beta shape parameters \eqn{\tilde a} and \eqn{\tilde b} (default 10000). #' #' @param object An ordinary least squares model fitted by [stats::lm()]. #' @param type A character string specifying the HC estimator. The default is @@ -91,7 +94,8 @@ #' vcov(cov) #' plot(cov) #' -#' vcov_hc(fit, type = "hcbeta", c1 = 7, c2 = 0.75, lower = 0.01, upper = 0.99) +#' vcov_hc(fit, type = "hcbeta", c1 = 7, c2 = 0.75, lower = 0.01, upper = 0.99, +#' a_max = 10000, b_max = 10000) #' vcov_hc(fit, type = "hc5", k = 0.7) #' vcov_hc(fit, type = "hc5m", k = 0.7, k1 = 1, k2 = 0, k3 = 1) #' diff --git a/_pkgdown.yml b/_pkgdown.yml index bc8b74d..384e5ba 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -20,6 +20,7 @@ articles: navbar: ~ contents: - hcinfer-methodology + - hcinfer-hcbeta-algorithm - hcinfer-comparison - hcinfer-hcbeta - hcinfer-bootstrap @@ -52,6 +53,8 @@ reference: contents: - PublicSchools - PublicSchools2 + - Crime2009 + - Hprice - title: S3 methods contents: - coef.hcinfer diff --git a/data-raw/Crime2009.R b/data-raw/Crime2009.R new file mode 100644 index 0000000..5ccbef6 --- /dev/null +++ b/data-raw/Crime2009.R @@ -0,0 +1,20 @@ +# Build Crime2009 package data. +source_file <- file.path("..", "outros_dados", "Crime2009.RData") +if (!file.exists(source_file)) { + stop("Cannot find Crime2009.RData in outros_dados/.") +} +env <- new.env(parent = emptyenv()) +load(source_file, envir = env) # loads `crime2009`, a 51x7 data.frame with state row names + +Crime2009 <- tibble::tibble( + state = rownames(env$crime2009), + violent = as.numeric(env$crime2009$violent), + murder = as.numeric(env$crime2009$murder), + hs_grad = as.numeric(env$crime2009$hs_grad), + poverty = as.numeric(env$crime2009$poverty), + single = as.numeric(env$crime2009$single), + white = as.numeric(env$crime2009$white), + urban = as.numeric(env$crime2009$urban) +) + +save(Crime2009, file = file.path("data", "Crime2009.rda"), compress = "xz") diff --git a/data-raw/Hprice.R b/data-raw/Hprice.R new file mode 100644 index 0000000..b2c384e --- /dev/null +++ b/data-raw/Hprice.R @@ -0,0 +1,11 @@ +# Build Hprice package data. +source_file <- file.path("..", "outros_dados", "Hprice.RData") +if (!file.exists(source_file)) { + stop("Cannot find Hprice.RData in outros_dados/.") +} +env <- new.env(parent = emptyenv()) +load(source_file, envir = env) # loads `hprice1`, an 88x10 data.frame + +Hprice <- tibble::as_tibble(env$hprice1) + +save(Hprice, file = file.path("data", "Hprice.rda"), compress = "xz") diff --git a/data/Crime2009.rda b/data/Crime2009.rda new file mode 100644 index 0000000000000000000000000000000000000000..c818cc19bd6360d27fe0a9b620bfd57ea8be2471 GIT binary patch literal 1532 zcmVvQ&2UKVgRpfklJ z?$kMYTNN2WFvDQa3Knb9m$qXf;zeG@yW9Ig%*l=Y2H@#3U8Re(4CZx8AQW4Q)TsVD zCofL{CM$&90s(nBg2Cr_7Ov^v>~|{wDnw1#|Iwa#O~QrFI03*L|LRq00w-7Xm(Oh}ZoT_FC**onR714wf2XJosZxz-<)Qhy zz!mpn{tlQZA2oyzmS{P?(krm?{&5Fu}&=8 zyp*Eq*JyTu(ZL|E^fL@TESP5<&^X0uR8zDAh4Cf9YIl#*y@VE6{W%#6cM9R)xi4pl z_VA^r$uukN{FJwIB7DN55APPr$GFDB^+7{DvgDTDQPYvEi+pRs1t4#BzaFQp1nQC7A!Up`nShVdsg@RjHS~hLh z`iFEO8bjZWRSg+i#cCw6$p)V*T;f0MYup&E4nDFvl#A5Abzic+aM^91vfJ<%JoT7* zgsCYW;& z7BqoQ?$W!QB;l(D$U`#(gas%8NE8^!Pij_XD`U8@NPa{L&zbA~_bQMaY@On#+C$FW znbav*4U@iHETgb0Etjd1uOFQIbr)%-FGx^T1-L#qTE^LEL%y7i*Rkf!g%Yjtumh%< z>WEq4V;jj#g}{P9jlAq#$TNp1LMYy(lc|$B+D1e6UpL{F(a7v|OmLzkokP~vwCeal zwozsylM&~y0G>?*ZJk_CKF49EFtN(H|4(LE8ED3{O`-e1~LY{DC_W)0LRt z14@T2tO{6@pZ~CVz>Y;naFT;;24+bMed~x!$_t|u^j(-CP4?B|P z)vaS2NB5~vu7hZkKEA|?1J}}wp?`4)L#J++8GWf)g2o+M0E8GS?go)(>eiX?7OevB zYNFfgsO1a}nj4U=kIRW5Jir%hmr{7m&*e=HurWet&6ZrR%9Ss=b-KsKbBp2!y!y3n zvD}wJ1zVhBw2=#%(CP!EoOUJEy7Y7|%o(+GM5!~ZS=QPxsXFwBtEs^HgY!~s0Ncvr zx(|0>z5f)&N?)ApZ`QJ(9w|2Xe2j92A2EEZLzyI^ta-x{SVS0tjVivYEG_QTT*S^# zT_0R`QR&L-1gy)r$5PuaB<_OgPWUooDZFe#GM3;|Gm799hBv%>m#D*jxabV&)c3sI z!q@uR(;1&K*2~`;n+9T1^Kht}NLk%(rdfgde@37vkvIY7iUoCfd?*!958b-?;# zpKK>F$tYOo+ayc~qkWrCF5{XQOfaj;{T=gI*1q_3cUgMD=Og95)bRBJR+%aBljR^b z{t!{v2U#1|>WIt}f9xl1bn;;UD8aWa)q;r0JrL z)I!o-N7l}M+5wRyI>^@j4nm*TlPId(S(LJWe*Qc#VO6=Wg9R+U+XW&ehPVyqDVb`( z9ryoOG^o3UIGfV1yavO_pp55bE9051*h1q3Hp&x)pcrzsLd4#*l2$9LRvnq3u8FKb z&Es(7=CnB*aw11f`0xlFGp4yqwcrxap#lILRd{VmZt$sKo9J{v7sy iHvj-sb2!NW0oMzFAOHY>IjU|xFb#_W000000a;qJ?E19; literal 0 HcmV?d00001 diff --git a/data/Hprice.rda b/data/Hprice.rda new file mode 100644 index 0000000000000000000000000000000000000000..fe72115f842bddcbf2fae76fc98bc8b7d1415915 GIT binary patch literal 2392 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 K000000a;p|gpNG` literal 0 HcmV?d00001 diff --git a/docs/404.html b/docs/404.html index ca0bbea..7a818fc 100644 --- a/docs/404.html +++ b/docs/404.html @@ -42,6 +42,7 @@