From f9fb284b740a6edf39e3fbc2e5149f6ef269bcf9 Mon Sep 17 00:00:00 2001 From: Jan Meis Date: Tue, 9 May 2023 10:25:05 +0200 Subject: [PATCH] Fix wrong variance calculation in BiasReduced estimator --- R/estimators.R | 6 ++-- ...bias_reduced_unknown_variance_is_correct.R | 29 +++++++++++++++++++ 2 files changed, 32 insertions(+), 3 deletions(-) create mode 100644 tests/misc/bias_reduced_unknown_variance_is_correct.R diff --git a/R/estimators.R b/R/estimators.R index bc53754..4dc6f94 100644 --- a/R/estimators.R +++ b/R/estimators.R @@ -505,12 +505,12 @@ setMethod("get_stagewise_estimators", signature("BiasReduced", "Normal"), diff <- Vectorize(\(design, mu_plugin, sigma, two_armed, ...) { int_kv(design = design, g1 = \(smean1, n1, sigma, two_armed, ...) { - se1sq <- sigma^2 / ((1L + two_armed) * n1) + se1sq <- sigma^2 * (1L + two_armed) / n1 (smean1 - mu_plugin) * ( (smean1 - mu_plugin) /se1sq) - 1 }, g2 = \(smean1, smean2, n1, n2, sigma, two_armed, ...) { - se1sq <- sigma^2 / ((1L + two_armed) * n1) - se2sq <- sigma^2 / ((1L + two_armed) * n2) + se1sq <- sigma^2 * (1L + two_armed) / n1 + se2sq <- sigma^2 * (1L + two_armed) / n2 ((n1 * smean1 + n2 * smean2) / (n1 + n2) - mu_plugin) * ( (smean1 - mu_plugin) /se1sq + (smean2 - mu_plugin) /se2sq ) - 1 }, mu = mu_plugin, diff --git a/tests/misc/bias_reduced_unknown_variance_is_correct.R b/tests/misc/bias_reduced_unknown_variance_is_correct.R new file mode 100644 index 0000000..d4e531b --- /dev/null +++ b/tests/misc/bias_reduced_unknown_variance_is_correct.R @@ -0,0 +1,29 @@ +# Set tolerances for unit testing +options( + list( + # Root finding inside estimators + adestr_tol_roots = 1e-3, + adestr_maxiter_roots = 1e3, + # Integrals used inside estimators + adestr_tol_inner = 5e-3, + adestr_maxEval_inner = 1e3, + adestr_absError_inner = 1e-5, + # Integrals to evaluate estimators + adestr_tol_outer = 5e-6, + adestr_maxEval_outer = 3e4, + adestr_absError_outer = 1e-8 + ) +) + +evaluate_estimator(MSE(), SampleMean(), Normal(FALSE), design = designad, mu=0.3, sigma = 1) +evaluate_estimator(MSE(), MedianUnbiasedMLEOrdering(), Normal(FALSE), design = designad, mu=0.3, sigma = 1) +evaluate_estimator(MSE(), BiasReduced(), Normal(FALSE), design = designad, mu=0.3, sigma = 1) + +evaluate_estimator(MSE(), SampleMean(), Normal(TRUE), design = designad, mu=0.3, sigma = 1) +evaluate_estimator(MSE(), MedianUnbiasedMLEOrdering(), Normal(TRUE), design = designad, mu=0.3, sigma = 1) +evaluate_estimator(MSE(), BiasReduced(), Normal(TRUE), design = designad, mu=0.3, sigma = 1) + + +evaluate_estimator(MSE(), SampleMean(), Student(FALSE), design = designad, mu=0.3, sigma = 1) +evaluate_estimator(MSE(), MedianUnbiasedMLEOrdering(), Student(FALSE), design = designad, mu=0.3, sigma = 1) +evaluate_estimator(MSE(), BiasReduced(), Student(FALSE), design = designad, mu=0.3, sigma = 1)