【问题标题】:How to match Stata percentile calculation in Excel formula?Excel公式中如何匹配Stata百分位数计算?
【发布时间】:2021-02-05 14:57:26
【问题描述】:

Stata 使用称为 R-2 (https://en.wikipedia.org/wiki/Quantile) 的分位数计算方法,而 Excel 使用带有 percentile.inc 函数的 R-7。我的目标是在 Excel 中找到一个正确的公式,其结果与使用 R-2 方法的 Stata 中的结果相同。

目前,我可以看到 percentile.inc 仅匹配奇数和离散样本的 Stata 结果(我正在处理离散样本)。但是,即使samples shown here 也会出现问题

从概念上讲,在 Excel 中使用 percentile.inc 似乎并不正确,因为它是一种 R-7 方法,即使它与奇数和离散样本的 R-2 方法相匹配。

我的问题是,在 Excel 中正确使用来匹配 Stata 百分位数结果的最简单公式是什么?

【问题讨论】:

  • 要匹配,您需要实际重新创建基本公式,自己进行回归。没有简单的方法。你需要长期坚持。
  • 只是为了兴趣,Stata 中的第零个百分位数会发生什么?在我看来,好像 R-2 会出错并尝试解决“x sub zero”问题?否则,实现起来还不错,因为下标总是整数。

标签: excel stata


【解决方案1】:

因此,对于 N=4,R-2 到 Excel 的相当直译如下所示(假设数据已排序):

=(INDEX(A$2:A$5,CEILING(C2*4,1))+INDEX(A$2:A$5,FLOOR(C2*4+1,1)))/2

如果您尝试输入一个零分位数确实会出错,因此这必须是一个特殊情况,就像分位数 1 一样。我假设 Stata 在这两种情况下给出了集合中的最低和最高值?

包含所有检查的更动态的公式如下所示:

=IFS(OR(C2<0,C2>1),"Out of range",C2=0,A$2,C2=1,INDEX(A:A,COUNT(A:A)+1),TRUE,(INDEX(A$2:INDEX(A:A,COUNT(A:A)+1),CEILING(C2*COUNT(A:A),1))+INDEX(A$2:INDEX(A:A,COUNT(A:A)+1),FLOOR(C2*COUNT(A:A)+1,1)))/2)

虽然您可以使用 Microsoft 365 中的 Let 构造使其更短。

在 VBA 中将其实现为函数可能会很好,它可以对数据进行排序并返回分位数值,或者当然您也可以在 Microsoft 365 公式中进行排序:

=LET(N,COUNT(A:A),sortedRange,SORT(A$2:INDEX(A:A,N+1)),IFS(OR(C2<0,C2>1),"Out of range",C2=0,INDEX(sortedRange,1),C2=1,INDEX(sortedRange,N),TRUE,(INDEX(sortedRange,CEILING(C2*N,1))+INDEX(sortedRange,FLOOR(C2*N+1,1)))/2))

【讨论】:

  • 所以原始公式假设数据集中正好有四个值,所以它只适用于 N=4 的偶数情况。随后的公式计算数据点的数量 - 我已经对您的测试样本中的四组数据进行了测试,它们似乎与 Stata 一致。抱歉,如果不清楚。
  • 为什么Stata中第50个百分位的R-2计算总是和Excel的R-7计算一致?
  • 直观地说,我希望第 50 个百分位数或中位数处于“中间”,即在中间值(奇数)或两个中间值(偶数)之间。维基百科条目en.wikipedia.org/wiki/Quantile 支持这一概念“R-3 和 R-4 不是对称的,因为当 p = 1/2 时它们不给出 h = (N + 1) / 2”,或者换句话说,所有其他 是对称的,并且当 p = 1/2 时确实给出 h = (N + 1) / 2。
猜你喜欢
  • 1970-01-01
  • 2017-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-26
  • 2013-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多