【问题标题】:Different Result from SAS Proc univariate and R quantile functionSAS Proc 单变量和 R 分位数函数的不同结果
【发布时间】:2017-11-17 21:38:39
【问题描述】:

我在 R 中使用函数 quantile 来计算第 90、75、50、25 个百分位数,但后来我的同事使用 SAS proc 单变量进行相同的计算,我们得到了完全不同的结果(例如,来自 R 的第 90 个百分位数是 47.36,但 SAS 的第 90 个百分位是 50.64)。我试图找出原因。有人可以给我一些指导吗?

R代码:

分位数(c(43.55,41.30,39.40,40.93,38.74,39.97,45.38,41.48,45.01,42.03,44.71,43.42,45.83,43.44,37.84,50.64,53.16,45.95),概率=c(0.90, 0.10, 0.75, 0.50, 0.25))

SAS 代码:

    data x;
    input x;
    datalines;
    43.55
    41.30
    39.40
    40.93
    38.74
    39.97
    45.38
    41.48
    45.01
    42.03
    44.71
    43.42
    45.83
    43.44
    37.84
    50.64
    53.16
    45.95

    ;
    run;
    proc univariate data=x noprint ;
    var x;
    output out=new  p90=p90 p10=p10 q3=p75 median=p50 q1=p25 ;
    run;

【问题讨论】:

  • 在 R 中,quantile() 有一个 type= 参数。 (对于什么是分位数,没有一个通用的定义。)尝试type=3(应该与 SAS 定义匹配)。请参阅?quantile 了解不同的定义。

标签: r sas


【解决方案1】:

R 中的默认方法是 7,而 SAS 中的默认方法可能是 empirical distribution function with averaging

如果您在 R 中使用添加选项 type = 1,您将获得与 SAS 中相同的结果。

quantile(c(43.55,41.30,39.40,40.93,38.74,39.97,45.38,41.48,45.01,
           42.03,44.71,43.42,45.83,43.44,37.84,50.64,53.16,45.95),
         prob=c(0.90, 0.10, 0.75, 0.50, 0.25),
         type = 1)
  90%   10%   75%   50%   25% 
50.64 38.74 45.38 43.42 40.93 

【讨论】:

  • 非常感谢!
猜你喜欢
  • 2019-06-02
  • 2015-04-09
  • 2020-07-19
  • 2015-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-29
  • 1970-01-01
相关资源
最近更新 更多