В нем для воспроизведения важны не только структура дисперсии, но и использование REML и аппроксимация df по Саттервайту.
set.seed(42)
x <- rep(0:1, times = c(10, 15))
y <- rnorm(length(x), mean = x)
t.test(y ~ x, var.equal = FALSE) |>
broom::tidy() |>
dplyr::select(
estimate, statistic, df = parameter, p.value
)
#> # A tibble: 1 × 4
#> estimate statistic df p.value
#> <dbl> <dbl> <dbl> <dbl>
#> 1 -0.400 -0.845 22.4 0.407
nlme::gls(
y ~ x,
weights = nlme::varIdent(form = ~ 1 | x),
method = "REML"
) |>
emmeans::emmeans(~ x, mode = "satterthwaite") |>
emmeans::contrast("revpairwise") |>
tibble::as_tibble() |>
dplyr::select(
estimate,
statistic = t.ratio,
df, p.value
)
#> # A tibble: 1 × 4
#> estimate statistic df p.value
#> <dbl> <dbl> <dbl> <dbl>
#> 1 0.400 0.845 22.4 0.407