学生 t.test 为中位数(不是平均数)

Student t.test for the median (not the mean)

我有一个包含一列工资的数据框。我想计算中值附近 97% 的置信区间。 t.test 计算平均值而不是中位数。 你知道我该怎么做吗? 这是 t.test 在我的专栏中的输出:

t.test(Salary)
One Sample t-test
data:  Salary
t = 26.131, df = 93, p-value < 2.2e-16
alternative hypothesis: true mean is not equal to 0
95 percent confidence interval:
37235.65 43360.56
sample estimates:
mean of x 
40298.1 

虽然中位数是:

median(na.omit(Salary))
[1] 36000

谢谢

如果你的数据是成对的,你可以做一个简单的符号测试,这本质上是一个二项式测试。您会看到有多少对中一个群体的样本大于另一个群体的样本,然后对 success/failure 比率进行测试。

set.seed(1)

x2 <- runif(30, 0.5, 2)^2
y2 <- runif(30, 0.5, 2)^2 + 0.5

bino <- x2 < y2

binom.test(sum(bino), length(bino), conf.level=0.97)

如果您的数据未配对,您可以执行 Mann-Whitney 检验,这是一种等级检验。您会看到一个总体中的样本数量大于另一个总体中的样本数量,反之亦然。

x <- c(80, 83, 189, 104, 145, 138, 191, 164, 73, 146, 124, 181)*1000
y <- c(115, 88, 90, 74, 121, 133, 97, 101, 81)*1000

wilcox.test(x, y, conf.int=TRUE, conf.level=0.97)

Mann-Whitney 检验还有一个成对变体,称为 Wilcoxon 符号秩检验,可以替代简单符号检验。

wilcox.test(x2, y2, paired=TRUE, conf.int=TRUE, conf.level=0.97)

Wilcoxon 假定围绕中位数对称,而简单符号检验则不然。要记住的事情。此外,如果您想将 Mann-Whitney 检验解释为中位数的差异,则必须假设这两个总体具有相同的形状,并且只是位置发生了变化。


一种完全不同的方法是 bootstrap 中位数的差异。
天真的实现:

set.seed(1)
rr <- replicate(
  1e3, 
  median(sample(x, length(x), replace=TRUE)) -
  median(sample(y, length(y), replace=TRUE))
)

rr <- jitter(rr, 50)
plot(density(rr))
qu <- quantile(rr, probs=c((1-0.97)/2, 1 - (1-0.97)/2))
abline(v=qu, col="blue")