如何计算大样本的Rousseeuw和Croux(1993)Qn规模估计量?


13

令因此对于这样的非常短的样本,可以计算得出从找到成对差分的第阶静态: { 1 3 6 2 7 5 } ķQn=Cn.{|XiXj|;i<j}(k){1,3,6,2,7,5}k

    7 6 5 3 2 1
1   6 5 4 2 1
2   5 4 3 1
3   4 3 2
5   2 1
6   1
7

h = [n / 2] + 1 = 4

k = h(h-1)/ 2 = 8

因此,Qn=Cn.2

显然,对于包含80,000条记录的大型样本,我们需要非常大的内存。

无论如何,是否要在1D空间而不是2D空间中计算?Qn

尽管我无法完全理解答案的链接ftp://ftp.win.ua.ac.be/pub/preprints/92/Timeff92.pdf


1
好的,答案是稍后将要阅读的家伙的答案:如果您只想为数据计算稳健的比例估算器,请执行以下操作:1-安装R的最新版本2-安装robustbase软件包3-准备就绪!但是,如果要在此环境之外开发代码,则需要使用加权高中位数来最大程度地减少Sn或Qn所需的计算。
K-

1
该论文的链接不起作用。适当的参考(甚至最好是引用最相关的信息)可以帮助我们找到信息;从目前的情况来看,链接死掉是没有用的(经常发生)。
Glen_b-恢复莫妮卡

2
应该不是k = h选择2 = h(h-1)/ 2 = 6吗?但是,它不会改变最终结果。
老虎

为什么Qn = Cn * 2,为什么2?它是如何计算的?
lidox '18

Answers:


15

更新:问题的症结在于,为了达到时间复杂性,需要以的顺序存储。O(nlog(n))O(n)


不,是在所有选择元素的时间复杂度的理论下限(请参阅(1))可能的。O(nlog(n))k t h n n 1 kthn(n1)2|xixj|:1i<jn

您可以得到空间,但是只能通过在时间天真的检查所有组合来获得。O(1)xixjO(n2)

好消息是,您可以使用比例估算器(有关包的函数,请参见(2)和(3)以获得改进的版本和一些时序比较) 。单变量估计量是比例的两步(即重新加权)估计量。它具有95%的高斯效率,50%的故障点以及时间和空间的复杂性(另外,它可以很容易地实现“在线”使用,将重复使用的计算成本减少了一半-尽管您将必须深入研究代码以实现此选项,这非常简单)。ττ ø Ñ Ô 1 scaleTau2()RrobustbaseτO(n)O(1)R

  1. 带有排序列的GN Frederickson和DB Johnson在X + Y和矩阵中进行选择和排序的复杂性,《计算机与系统科学杂志》第24卷,第2期,1982年4月,第197-208页。
  2. Yohai,V.和Zamar,R.(1988)。通过最小化有效规模来对回归进行高分解点估计。美国统计协会杂志83 406–413。
  3. Maronna R.和Zamar R.(2002)。高维数据集的位置和离散度的可靠估计。技术计量学44307–317

编辑使用此

  1. 启动R(它是免费的,可以从这里下载)
  2. 通过键入以下命令安装软件包:
install.packages("robustbase")
  1. 通过键入以下命令加载软件包:
library("robustbase")
  1. 加载数据文件并运行功能:
mydatavector <- read.table("address to my file in text format", header=T)
scaleTau2(mydatavector)

2
@ user603:您所指的tau。顺便说一句,如果它具有如此高的统计和计算效率以及故障点,为什么它并不广泛?
石英

2
a)您可以在线计算疯狂和中位数。从那里计算Tau很简单。b)故障不是稳健的,并且在存在异常值的情况下,Tau具有严重的偏差。您可以在Qn论文的
user603 2013年


1
根据本文的@ user603,偏差曲线告诉我们由于给定的污染分数,估计量可以改变多少。在我的模拟示例中,和有偏差(正态分布+极高/极低值的20%),并且偏差水平是可比较的。可能是我出了点问题,但是和似乎都遇到了相同的问题。QnSnSnQn
德国人Demidov

1
@ user603很抱歉,大小为100的样本看不到这种效果。使用大样本量时,我清楚地看到了问题。它们都有很大的偏见,但是具有最大的偏见。τ
德国人Demidov

0

(答案很简短)要发表评论的文字说

避免回答评论中的问题。

事情就这样了:关于在线算法的一篇论文似乎运行得很好: 在线应用 EstimatorQn

编辑

(由用户user603)。在这篇文章中链接的算法是一个移动的窗口版本的版本。Qn

给定一个大样本分成宽度时间窗口,我们可以将应用于每个时间窗口产生值。表示这些值{xi}i=1Nn<N{xi}i=tn+1tQnNn+1Qn{Qni}i=1Nn+1

这里引用的算法允许以比从头计算所需的最坏情况更低的平均成本获得。 O n log n Q i nQni|Qni1 O(nlog(n))Qni

但是,该算法不能用于计算完整原始样本的。它还需要维护一个缓冲区,缓冲区的大小可以与一样大(尽管通常要小得多)。 { x i } N i = 1 O n 2Qn{xi}i=1NO(n2)


虽然您不应该在评论中回答,但也不应发布评论作为答案,并且如果您的答案只是一个链接,则它不是答案(但可能是评论)。如果您希望它是一个答案而不是评论,则您的答案应以某种方式包含相关信息,例如来自正确引用的链接的引号,或您自己对重要细节的解释。如果可以,请提供必要的详细信息;或者,我可以将其转换为您的评论。
Glen_b-恢复莫妮卡

@Glen_b:继续转换。谢谢你的澄清。
serv-inc

1
@ user603也许您可以(如我评论中的链接所示)将基本信息编辑为上述答案-到目前为止,它不在SE网络准则中。
Glen_b-恢复莫妮卡

没问题,我会的!(但现在真的很晚了)
user603

@ user603谢谢;我现在将其留在此处
Glen_b-恢复莫妮卡

0

这是我的Qn工具

我正在用C编程,结果是这样的:

void bubbleSort(double *datos, int N)
{
 for (int j=0; j<N-1 ;j++)     
  for (int i=j+1; i<N; i++)    
   if (datos[i]<datos[j])      
   {
    double tmp=datos[i];
    datos[i]=datos[j];
    datos[j]=tmp;
   }
}

double  fFactorial(long N)    
{
 double factorial=1.0;

 for (long i=1; i<=N; ++i)
  factorial*=(double)i;

 return factorial;  
}

double fQ_n(double *datos, int N)  // Rousseeuw's and Croux (1993) Qn scale estimator
{
 bubbleSort(datos, N);

 int m=(int)((fFactorial((long)N))/(fFactorial(2)*fFactorial((long)N-2)));

 double D[m];
 //double Cn=2.2219;      //not used now :) constant value https://www.itl.nist.gov/div898/software/dataplot/refman2/auxillar/qn_scale.htm

 int k=(int)((fFactorial((long)N/2+1))/(fFactorial(2)*fFactorial((long)N/2+1-2)));

 int y=0;

 for (int i=0; i<N; i++)
  for (int j=N-1; j>=0; j--)
   if (i<j)
   {
    D[y]=abs(datos[i]-datos[j]);
    y++;
   }

 bubbleSort(D, m);

 return D[k-1];
}

int main(int argc, char **argv)    
{
 double datos[6]={1,2,3,5,6,7};
 int N=6;

 // Priting in terminal the final solution
 printf("\n==[Results] ========================================\n\n");

 printf(" Q_n=%0.3f\n",fQ_n(datos,N));

 return 0;
}

1
尽管实现常常与实质性问题混在一起,但我们应该是一个提供有关统计信息,机器学习等信息的网站,而不是代码。也可以提供代码,但是对于那些不太了解该语言以识别并从代码中提取答案的人,请在文本中详细说明您的实质性答案。
gung-恢复莫妮卡

这是幼稚为O(n ** 2)算法〜
user603
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.