When using model_parameters() with a prop.test() object, the reported Proportion column is hardcoded as a percentage and the underlying estimate is gone and un-extractable (unless I'm missing an argument that makes this work!)
This is happening because Proportion is explicitly built as a character string:
|
.extract_htest_prop <- function(model) { |
|
out <- data.frame( |
|
Proportion = paste(insight::format_value(model$estimate, as_percent = TRUE), collapse = " / "), |
|
stringsAsFactors = FALSE |
|
) |
Here's a reproducible example:
library(parameters)
table(penguins$sex) |>
prop.test()
#>
#> 1-sample proportions test with continuity correction
#>
#> data: table(penguins$sex), null probability 0.5
#> X-squared = 0.012012, df = 1, p-value = 0.9127
#> alternative hypothesis: true p is not equal to 0.5
#> 95 percent confidence interval:
#> 0.4406707 0.5504259
#> sample estimates:
#> p
#> 0.4954955
That 0.4954955 (and other non-visible floating point digits) is the estimated proportion.
In model_parameters() it appears rounded, which is fine:
table(penguins$sex) |>
prop.test() |>
model_parameters()
#> 1-sample proportions test
#>
#> Proportion | 95% CI | Chi2(1) | Null_value | p
#> --------------------------------------------------------
#> 49.55% | [0.44, 0.55] | 0.01 | 0.50 | 0.913
#>
#> Alternative hypothesis: true p is not equal to 0.5
In the underlying data frame, the Proportion column is a character, not a double:
table(penguins$sex) |>
prop.test() |>
model_parameters() |>
as.data.frame()
#> Proportion CI CI_low CI_high Chi2 df Null_value p
#> 1 49.55% 0.95 0.4406707 0.5504259 0.01201201 1 0.5 0.9127271
#> Method Alternative
#> 1 1-sample proportions test two.sided
This makes it tricky to extract that value and use it other places, like in plots:
library(tidyverse)
table(penguins$sex) |>
prop.test() |>
model_parameters() |>
mutate(estimate = parse_number(Proportion) / 100) |>
ggplot(aes(x = estimate, y = "Proportion")) +
geom_vline(xintercept = 0.5, color = "red") +
geom_pointrange(aes(xmin = CI_low, xmax = CI_high))

↑ That works, but the value is actually only 0.4955, not the complete true value estimated by prop.test(), since parse_number() converted it from text to a number
It's possible to use broom::tidy() to extract values from htest objects like prop.test(), and it maintains the numeric-ness of the estimate column:
table(penguins$sex) |>
prop.test() |>
broom::tidy(conf.int = TRUE) |>
ggplot(aes(x = estimate, y = "Proportion")) +
geom_vline(xintercept = 0.5, color = "red") +
geom_pointrange(aes(xmin = conf.low, xmax = conf.high))

But then it requires {broom} for this kind of plotting (while all other htest objects like t.test(), etc. can be extracted and plotted with CIs with model_parameters()—it's just prop.test() that has the character-only version of the estimate)
When using
model_parameters()with aprop.test()object, the reportedProportioncolumn is hardcoded as a percentage and the underlying estimate is gone and un-extractable (unless I'm missing an argument that makes this work!)This is happening because
Proportionis explicitly built as a character string:parameters/R/methods_htest.R
Lines 518 to 522 in 3a9c8f2
Here's a reproducible example:
That
0.4954955(and other non-visible floating point digits) is the estimated proportion.In
model_parameters()it appears rounded, which is fine:In the underlying data frame, the
Proportioncolumn is a character, not a double:This makes it tricky to extract that value and use it other places, like in plots:
↑ That works, but the value is actually only 0.4955, not the complete true value estimated by
prop.test(), sinceparse_number()converted it from text to a numberIt's possible to use
broom::tidy()to extract values from htest objects likeprop.test(), and it maintains the numeric-ness of theestimatecolumn:But then it requires {broom} for this kind of plotting (while all other htest objects like
t.test(), etc. can be extracted and plotted with CIs withmodel_parameters()—it's justprop.test()that has the character-only version of the estimate)