You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 06:30:51