如何用R语言BayesFactor包的ttestBF()处理缺失值?
关于BayesFactor包ttestBF()处理缺失值的问题解答
问题与报错情况
使用BayesFactor::ttestBF()分析含缺失值的数据时,会触发如下报错:
> ttestBF(formula = Level2 ~ Completers, r = sqrt(2)/2, data = tib) Error in checkFormula(formula, data, analysis = "indept") : Dependent variable must not contain missing or infinite values.
即使按照文档提示添加is.na = TRUE参数,问题依然存在:
> ttestBF(formula = Level2 ~ Completers, r = sqrt(2)/2, is.na = TRUE, data = tib) Error in checkFormula(formula, data, analysis = "indept") : Dependent variable must not contain missing or infinite values. In addition: Warning message: data coerced from tibble to data frame
问题解答
1. 是否可以用BayesFactor包的ttestBF()处理缺失值?
不能直接通过函数参数处理因变量的缺失值。函数文档中提到的is.na参数仅针对自变量的缺失值过滤,对因变量的缺失值无效。ttestBF()内部的checkFormula()检查会直接阻断因变量含NA的分析请求。
2. 具体处理方法是什么?
必须先手动预处理数据,移除或插补因变量的缺失值,再传入函数分析。最直接的方法是删除含缺失值的观测:
方法1:使用na.omit()清理数据
# 保留需要的列并删除含缺失值的行 tib_clean <- na.omit(tib[, c("Completers", "Level2")]) # 运行贝叶斯t检验 BayesFactor::ttestBF(formula = Level2 ~ Completers, r = sqrt(2)/2, data = tib_clean)
方法2:使用dplyr过滤缺失值
library(dplyr) # 过滤掉Level2列含NA的行 tib_clean <- tib %>% filter(!is.na(Level2)) # 运行分析 BayesFactor::ttestBF(formula = Level2 ~ Completers, r = sqrt(2)/2, data = tib_clean)
处理后即可得到正常的分析结果,类似无缺失值时的输出:
> BayesFactor::ttestBF(formula = Level2 ~ Completers, r = sqrt(2)/2, data = tib_clean) Bayes factor analysis -------------- [1] Alt., r=0.707 : 0.3507102 ±0.02% Against denominator: Null, mu1-mu2 = 0 --- Bayes factor type: BFindepSample, JZS Warning message: data coerced from tibble to data frame
可复现数据
nn <- 100 # 总样本量(完成者和未完成者) # 创建包含两组样本(完成者和未完成者)的tibble,每组50个样本 tib <- tibble::tibble(Completers = rep(c(1, 0), each = nn/2), Level = c(sample(1:9, 50, replace = TRUE, prob = c(57/1043*100, 275/1043*100, 398/1043*100, 199/1043*100, 72/1043*100, 27/1043*100, 12/1043*100, 2/1043*100, 1/1043*100)), sample(1:9, 50, replace = TRUE, prob = c(57/1043*100, 275/1043*100, 398/1043*100, 199/1043*100, 72/1043*100, 27/1043*100, 12/1043*100, 2/1043*100, 1/1043*100)))) # 赋值标签 expss::val_lab(tib$Completers) = expss::num_lab(" 1 Completers 0 Non Completers") expss::val_lab(tib$Level) = expss::num_lab("1 A 2 B 3 C 4 D 5 E 6 F 7 G 8 H 9 I") # 将第2列复制到第3列,命名为Level2 tib$Level2 <- tib$Level # 插入单个缺失值(NA) tib[3, 2] = NA
环境信息
setting value version R version 4.2.1 (2022-06-23) os macOS Monterey 12.5.1 rstudio 2022.07.1+554 Spotted Wakerobin (desktop) package * version date (UTC) lib source BayesFactor * 0.9.12-4.4 2022-07-05 [1] CRAN (R 4.2.0) expss * 0.11.1 2022-01-07 [1] CRAN (R 4.2.0) tibble * 3.1.8 2022-07-22 [1] CRAN (R 4.2.0)
内容的提问来源于stack exchange,提问作者pdeli
相关产品推荐
相关产品推荐

