ggpredict 和四分位数:只有一个数据点的预测?

问题描述 投票:0回答:1

我正在使用

ggefects::ggpredict()
绘制一个回归模型,包括双向交互:分类:连续、连续:连续、连续:连续(二次多项式)。我的第一个选择是通过设置
terms = c("var.cont1[all]", "var.cont2[quart]")
,使用四分位数(包括最小值和最大值)绘制连续变量之间的相互作用,如本
ggeffects
vignette 所示。在这个小插图中,感兴趣的变量的最小值和最大值有很多观察结果。

但是,在我的数据中,我对最小值和最大值都有一个观察,并且

ggpredict
将很好地绘制预测,尽管最大值的置信区间非常宽。在这种情况下,
ggpredict()
根据单个数据点绘制预测?
我想确保我了解正在发生的事情。非常感谢!

我在下面提供了一个可重现的示例,其中我强制数据对最小值和最大值进行单个观察。数据来自这个

ggeffects
vignette

library(ggeffects)
#> Warning: package 'ggeffects' was built under R version 4.2.3
library(tidyverse)
#> Warning: package 'ggplot2' was built under R version 4.2.2
#> Warning: package 'tibble' was built under R version 4.2.3
#> Warning: package 'tidyr' was built under R version 4.2.3
#> Warning: package 'purrr' was built under R version 4.2.3
#> Warning: package 'dplyr' was built under R version 4.2.3
#> Warning: package 'stringr' was built under R version 4.2.3

data(efc)

summary(efc$c12hour)
#>    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
#>    4.00   10.00   20.00   42.40   42.75  168.00       6

c(sum(!is.na(efc$c12hour) & efc$c12hour == 4), sum(!is.na(efc$c12hour) & efc$c12hour == 168))
#> [1] 24 86

efc2 <- efc[!is.na(efc$c12hour), ]
efc2 <- arrange(efc2, c12hour)
efc2$c12hour[1] <- 3
efc2$c12hour[nrow(efc2)] <- 169
summary(efc2$c12hour)
#>    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
#>    3.00   10.00   20.00   42.40   42.75  169.00
table(efc2$c12hour)
#> 
#>   3   4   5   6   7   8   9  10  11  12  14  15  16  17  18  20  21  22  24  25 
#>   1  23  29  60  32  42  11  70   6  23  34  43  12   4  16  58  12  11  20  28 
#>  26  27  28  30  35  36  39  40  42  43  45  48  49  50  55  56  59  60  62  65 
#>   1   2  28  40  24   1   1  35   9   1   4   4   2  22   1   6   1   7   1   3 
#>  70  77  80  84  85  89  90  91 100 105 110 118 119 120 125 126 128 130 140 148 
#>  13   3   5   6   2   1   2   3  13   1   4   1   1   8   1   1   1   1   6   1 
#> 150 154 160 161 162 168 169 
#>   4   1   6   2   1  85   1

fit <- lm(barthtot ~ c12hour * c161sex + neg_c_7, data = efc2)
plot(ggpredict(fit, terms = c("c161sex", "c12hour[quart]")))

sessionInfo()
#> R version 4.2.0 (2022-04-22 ucrt)
#> Platform: x86_64-w64-mingw32/x64 (64-bit)
#> Running under: Windows 10 x64 (build 22000)
#> 
#> Matrix products: default
#> 
#> locale:
#> [1] LC_COLLATE=Spanish_Spain.utf8  LC_CTYPE=Spanish_Spain.utf8   
#> [3] LC_MONETARY=Spanish_Spain.utf8 LC_NUMERIC=C                  
#> [5] LC_TIME=Spanish_Spain.utf8    
#> 
#> attached base packages:
#> [1] stats     graphics  grDevices utils     datasets  methods   base     
#> 
#> other attached packages:
#>  [1] forcats_0.5.1     stringr_1.5.0     dplyr_1.1.2       purrr_1.0.1      
#>  [5] readr_2.1.2       tidyr_1.3.0       tibble_3.2.1      ggplot2_3.4.0    
#>  [9] tidyverse_1.3.1   ggeffects_1.3.1.5
#> 
#> loaded via a namespace (and not attached):
#>  [1] lubridate_1.8.0  assertthat_0.2.1 digest_0.6.29    utf8_1.2.2      
#>  [5] R6_2.5.1         cellranger_1.1.0 backports_1.4.1  reprex_2.0.2    
#>  [9] evaluate_0.15    httr_1.4.3       highr_0.9        pillar_1.9.0    
#> [13] rlang_1.1.1      readxl_1.4.0     rstudioapi_0.13  rmarkdown_2.14  
#> [17] labeling_0.4.2   munsell_0.5.0    broom_0.8.0      compiler_4.2.0  
#> [21] modelr_0.1.8     xfun_0.40        pkgconfig_2.0.3  htmltools_0.5.6 
#> [25] insight_0.19.5   tidyselect_1.2.0 fansi_1.0.3      crayon_1.5.1    
#> [29] tzdb_0.3.0       dbplyr_2.1.1     withr_2.5.0      grid_4.2.0      
#> [33] jsonlite_1.8.0   gtable_0.3.0     lifecycle_1.0.3  DBI_1.1.2       
#> [37] magrittr_2.0.3   scales_1.2.1     datawizard_0.7.0 cli_3.6.1       
#> [41] stringi_1.7.6    farver_2.1.0     fs_1.5.2         snakecase_0.11.0
#> [45] xml2_1.3.3       ellipsis_0.3.2   generics_0.1.2   vctrs_0.6.3     
#> [49] sjlabelled_1.2.0 tools_4.2.0      glue_1.6.2       hms_1.1.1       
#> [53] fastmap_1.1.0    yaml_2.3.5       colorspace_2.0-3 rvest_1.0.2     
#> [57] knitr_1.39       haven_2.5.0

创建于 2023-10-05,使用 reprex v2.0.2

r interaction quantile quartile ggeffects
1个回答
0
投票

在内部,

ggpredict()
调用
predict()
(和
ggemmeans()´ calls 
emmeans()
, 
ggeffect()
calls
effect()`)。预测基于模型的系数 - 置信区间(分别是多窄/多宽)取决于数据量。

也许这个小插图澄清了预测值与回归系数的关系。

在您的特定示例中,我假设由于“尾部”只有一个数据点,置信区间很宽,这表明基于少量数据,您的预测有更大范围的合理值(更高的“不确定性”) ,如果你愿意的话)。

© www.soinside.com 2019 - 2024. All rights reserved.