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

使用R语言t.test执行双样本t检验因因子变量报错求助

双样本t检验报错排查及结果解释

问题背景

我尝试用R语言的标准函数t.test对两个变量执行双样本t检验:FC01是1-5分的Likert量表(有序排名变量),joko是取值为TRUE/FALSE的二元分类变量。代码如下:

## Dummy data
ds <- data.frame(FC01 = c(3, 3, 4, 2, 3, 1, 2, 4, 3, 3, 2), 
                 joko = c(TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, TRUE))
ds$FC01 = factor(ds$FC01, 
                 levels = c("1", "2", "3", "4", "5", "-9"),
                 labels = c("1", "2", "3", "4", "5", "[NA] Not answered"), 
                 ordered = FALSE)

## t-test
t.test(ds$FC01, ds$joko, var.equal = TRUE)

报错信息

运行后抛出如下错误:

> t.test(ds$FC01, ds$joko, var.equal = TRUE)
Error in var(x) : Calling var(x) on a factor x is defunct.
  Use something like 'all(duplicated(x)[-1L])' to test for a constant vector.
In addition: Warning message:
In mean.default(x) :
  Argument ist weder numerisch noch boolesch: gebe NA zurück

补充操作及疑惑

我额外运行了以下代码:

all(duplicated(ds$FC01)[-1L])
all(duplicated(ds$joko)[-1L])

得到结果:

> all(duplicated(ds$FC01)[-1L])
[1] FALSE
> all(duplicated(ds$joko)[-1L])
[1] FALSE

但我不理解这个结果的含义,希望得到问题解决方法及结果解释。


问题分析与解决

1. 报错核心原因

t.test是参数检验,要求输入的因变量必须是数值型或逻辑型,因为它需要计算均值、方差等统计量。但你将FC01转换为了无序因子(ordered = FALSE),因子属于分类变量,无法直接计算均值和方差,这就是报错的直接原因:

  • Error in var(x):因子无法计算方差,该操作已被废弃;
  • mean.default警告:因子既不是数值也不是逻辑类型,无法计算均值,返回NA。

2. 补充代码结果解释

你运行的all(duplicated(x)[-1L])是用来检验向量是否为常量向量(所有元素完全相同):

  • duplicated(x)返回逻辑向量,标记每个元素是否与前面的元素重复;
  • [-1L]去掉第一个元素,若剩下的元素全为TRUE,说明从第二个元素开始都和第一个元素一致,即整个向量是常量;
  • 你的两个结果都是FALSE,说明FC01和joko都不是常量向量,这是t检验的正常前提(样本需要有变异),但这个结果和当前报错无关。

3. 解决方案

根据变量类型,有两种合理选择:

选项1:近似为数值型变量执行t检验

很多场景下会将Likert量表近似当作数值变量处理,此时需要先将FC01转换为数值型,再使用规范的公式语法执行t检验:

# 将因子转换为数值型(先转字符避免因子水平编码干扰)
ds$FC01_num <- as.numeric(as.character(ds$FC01))
# 公式形式:因变量 ~ 分组变量,是t检验的标准写法
t.test(FC01_num ~ joko, data = ds, var.equal = TRUE)

选项2:使用非参数检验(更严谨的统计选择)

Likert量表本质是有序分类变量,t检验要求数据近似正态分布,更严谨的做法是使用曼-惠特尼U检验(适用于有序分类变量的组间比较),对应R中的wilcox.test:

# 有序因子可直接用于曼-惠特尼检验
wilcox.test(FC01 ~ joko, data = ds)

该检验不需要正态分布假设,更适配有序分类变量的统计特性。


内容的提问来源于stack exchange,提问作者user21297188

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 00:52:50