在 R 中查找四分位数

机器算法验证 r 分位数
2022-01-26 14:47:24

我在学习 R 时正在阅读统计教科书,但在以下示例中遇到了绊脚石:

在此处输入图像描述

在查看之后,?quantile我尝试使用以下内容在 R 中重新创建它:

> nuclear <- c(7, 20, 16, 6, 58, 9, 20, 50, 23, 33, 8, 10, 15, 16, 104)
> quantile(nuclear)
   0%   25%   50%   75%  100% 
  6.0   9.5  16.0  28.0 104.0 

鉴于文本和 R 有不同的结果,我认为 R 在计算第一和第三四分位数时使用了中位数。

问题:

我应该在计算第一和第三四分位数时包括中位数吗?

更具体地说,教科书或R是否正确?如果教科书有这个正确的,有没有办法在 R 中正确实现这一点?

提前致谢。

2个回答

你的教科书很混乱。 很少有人或软件以这种方式定义四分位数。(它往往会使第一个四分位数太小,而第三个四分位数太大。)

中的quantile函数R实现了九种不同的计算分位数的方法!要查看其中哪些(如果有)对应于该方法,让我们从实现它开始。根据描述,我们可以编写一个算法,首先是数学,然后是R

  1. 订购数据x1x2xn.

  2. 对于任何一组数据,当有奇数个值时,中位数是它的中间值;否则,当有偶数个值时,它是两个中间值的平均值。 Rmedian函数计算这个。

    中间值的索引是m=(n+1)/2. 当它不是整数时,(xl+xu)/2是中位数,其中lum向下和向上舍入。否则当m是一个整数,xm是中位数。在这种情况下采取l=m1u=m+1. 在任一情况下l是紧靠中位数左侧的数据值的索引,并且u是紧靠中位数右侧的数据值的索引。

  3. “第一个四分位数”是所有的中位数xi为此il. “第三四分位数”是(xi)为此iu.

这是一个实现。它可以帮助你在这本教科书中做练习。

quart <- function(x) {
  x <- sort(x)
  n <- length(x)
  m <- (n+1)/2
  if (floor(m) != m) {
    l <- m-1/2; u <- m+1/2
  } else {
    l <- m-1; u <- m+1
  }
  c(Q1=median(x[1:l]), Q3=median(x[u:n]))
}

例如,输出quart(c(6,7,8,9,10,15,16,16,20,20,23,33,50,58,104))与文本一致:

Q1 Q3 
 9 33 

让我们使用所有十种方法计算一些小数据集的四分位数:九R和教科书的:

y <- matrix(NA, 2, 10)
rownames(y) <- c("Q1", "Q3")
colnames(y) <- c(1:9, "Quart")
for (n in 3:5) {
  j <- 1
  for (i in 1:9) {
    y[, i] <- quantile(1:n, probs=c(1/4, 3/4), type=i)
  }
  y[, 10] <- quart(1:n)
  cat("\n", n, ":\n")
  print(y, digits=2)
}

当您运行它并检查时,您会发现教科书值与所有三种样本大小任何输出都不一致。R (分歧模式在第三周期的循环中继续存在,表明无论样本有多大,问题仍然存在。)

教科书可能误解了 John Tukey 计算“铰链”(又名“四分之二”)的方法。不同之处在于,当围绕中位数分割数据集时,他将中位数包含在两半中。 那会产生9.528对于示例数据集。

在统计学领域(我教的,但我不是研究人员),四分位数计算特别模棱两可(在某种程度上,分位数不一定是正确的,更一般地说)。这背后有很多历史,部分原因是四分位间距 (IQR) 的使用(也可能是滥用),它对异常值不敏感,作为标准偏差的检查或替代方法。它仍然是一场公开竞赛,计算 Q1 和 Q3 的三种独特方法是共同规范的。

通常情况下,维基百科的文章有一个合理的总结: https ://en.m.wikipedia.org/wiki/Quartile Larson 和 Farber 文本,像大多数基本统计文本一样,使用维基百科文章中描述的内容为“方法一。” 如果我按照上面的描述,r 使用“方法 3”。您必须自己决定哪个在您自己的领域中是典型的合适的。