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

按国家分组执行储蓄银行与合作银行总资产双样本t检验时遇报错的求助

解决分组t检验的报错问题

首先咱们来拆解你遇到的问题:你想按国家分组,对每个国家的储蓄银行和合作银行总资产做t检验,但始终碰到「grouping factor must have exactly 2 levels」的报错——哪怕你已经把Specialisation转成了因子类型。问题主要出在dplyr分组后调用t.test的方式,再加上模拟数据的样本量限制,咱们一步步解决:

1. 报错的核心原因

当你直接用df %>% group_by(Country) %>% t.test(...)时,dplyr并不会自动对每个分组单独执行t检验——t.test函数会把整个未拆分的数据集当作输入,而非每个国家的子集。另外你的模拟数据里,每个国家的每种银行类型只有1个观测值,这也会让t.test在计算方差时出现逻辑问题(不过这不是报错的直接原因)。

2. 正确的分组t检验实现方式

你需要用dplyr::do()或者结合purrr工具,对每个分组单独应用t检验,这里推荐两种清晰的实现方法:

方法一:用dplyr::do()处理分组

library(dplyr)

# 注意:模拟数据每组仅1个观测会触发方差警告,但语法是正确的
result <- df %>%
  group_by(Country) %>%
  do(t_test = t.test(TotalAssets ~ Specialisation, data = ., 
                     alternative = "two.sided", var.equal = FALSE))

# 提取你需要的统计量(均值差、p值等)
final_result <- result %>%
  mutate(
    diff_mean = map_dbl(t_test, ~ .$estimate[1] - .$estimate[2]),
    p_value = map_dbl(t_test, "p.value")
  ) %>%
  select(Country, diff_mean, p_value)

print(final_result)

方法二:用nest() + map()更直观地处理分组

这种方式适合后续扩展更多统计量的提取:

library(dplyr)
library(purrr)
library(tidyr)

result <- df %>%
  # 按国家嵌套数据集,每个国家对应一个子数据框
  nest(data = -Country) %>%
  mutate(
    # 对每个子数据框执行t检验
    t_test = map(data, ~ t.test(TotalAssets ~ Specialisation, data = .,
                               alternative = "two.sided", var.equal = FALSE)),
    # 提取均值差、p值、置信区间
    diff_mean = map_dbl(t_test, ~ .$estimate["mean in group Cooperative"] - .$estimate["mean in group Savings"]),
    p_value = map_dbl(t_test, "p.value"),
    ci_low = map_dbl(t_test, ~ .$conf.int[1]),
    ci_high = map_dbl(t_test, ~ .$conf.int[2])
  ) %>%
  # 移除不需要的中间列
  select(-data, -t_test)

print(result)

3. 关键数据检查步骤

你提到已经转换了因子水平,但仍报错,建议先检查每个国家的两种银行类型是否都有数据:

# 查看每个国家的银行类型分布
table(df$Country, df$Specialisation)

如果输出里出现0,说明某个国家缺少其中一种类型的数据,这会直接触发「分组因子必须恰好2个水平」的报错——你需要补全对应数据,或者过滤掉这些不完整的国家。

另外,你的模拟数据中每个类型仅1个观测值,真实数据里一定要保证每个国家的每种银行类型有多个观测,否则t检验的结果没有统计意义,还会触发方差计算警告。

内容的提问来源于stack exchange,提问作者Martina Noli Maio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 13:02:48