Як обчислити шкалу оцінювання шкали Руссо і Крю (1993) для великих зразків?


13

Нехай тому для дуже короткого зразка типу його можна обчислити від знаходження го порядку статичного парних відмінностей: { 1 , 3 , 6 , 2 , 7 , 5 } kQn=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-встановіть пакет надійної бази 3-готовий до запуску! але якщо ви розробляєте код поза цим середовищем, вам потрібно використовувати зважені високі медіани, щоб мінімізувати необхідні обчислення для Sn або Qn.
К-1,

1
Посилання на папір не працює. Власне посилання (ще краще, з цитатою найбільш релевантної інформації) допомогло б нам знайти інформацію; на даний момент це марно, коли посилання вмирає (як це часто буває).
Glen_b -Встановіть Моніку

2
чи не повинно бути k = h вибирати 2 = h (h-1) / 2 = 6 ? Однак це не змінює кінцевого результату.
тигр

чому Qn = Cn * 2, чому 2? як це було розраховано?
лідокс

Відповіді:


15

Оновлення: Суть проблеми полягає в тому, що для досягнення часової складності потрібно в порядку зберігання .О(нжурнал(н))О(н)


Ні, - нижня теоретична межа часової складності (див. (1)) вибору елемента серед усіх можливо .О(нжурнал(н))k t h n ( n - 1 )ктгодн(н-1)2|хi-хj|:1i<jн

Ви можете отримати простір , але лише наївно перевіривши всі комбінації в часі .О(1)хi-хjО(н2)

Хороша новина полягає в тому, що ви можете використовувати оцінювач масштабу (див. (2) та (3) для вдосконаленої версії та деякі порівняння часу), реалізований у функції в пакеті . Уніваріантний оцінювач - це двоетапний (тобто повторно зважений) оцінювач масштабу. Він має 95-відсоткову ефективність Гаусса, 50-відсоткову точку розбиття, а також складність часу та простору (плюс це можна легко зробити "в Інтернеті", знищивши половину обчислювальних витрат при повторному використанні - хоча ви доведеться викопати код, щоб реалізувати цю опцію, це зробити досить просто).ττ O ( n ) O ( 1 )scaleTau2()RrobustbaseτО(н)О(1)R

  1. Складність вибору та ранжирування у X + Y та матриць із відсортованими колонками GN Frederickson and DB Johnson, Journal of Computer and System Sciences том 24, випуск 2, квітень 1982, стор 197-208.
  2. Йохай, В. і Замар, Р. (1988). Високі оцінки точки регресу за рахунок мінімізації ефективної шкали. Журнал Американської статистичної асоціації 83 406–413.
  3. Maronna, R. and Zamar, R. (2002). Надійні оцінки місця розташування та дисперсії для великомірних наборів даних. Технометрія 44 307–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: тау, на який ви посилалися. Btw, чому він не поширений, якщо він має таку хорошу статистичну та обчислювальну ефективність та точку розбиття?
Кварц

2
а) ви можете обчислити божевільних і медіанів в Інтернеті . Звідси обчислити Тау неважливо. б) поломка не є надійною, і у Тау є жахливий упередженість у присутності людей, що переживають люди. Ви можете знайти більше аргументів проти цього у розділі 5 статті Qn
user603

1
@ user603 Ви маєте на увазі цей документ? wis.kuleuven.be/stat/robust/papers/publications-1994/…
німецький Демидов

1
QнSнSнQн

1
τ

0

(Дуже коротка відповідь) Текст для коментування говорить

уникайте відповідей на запитання в коментарях.

Qн

EDIT

Qн

{хi}i=1Nн<N{хi}i=т-н+1тQнN-н+1Qн{Qнi}i=1N-н+1

Qнi|Qнi-1 О(нжурнал(н))Qнi

Qн{хi}i=1NО(н2)


Хоча ви не повинні відповідати в коментарях, ви також не повинні публікувати коментарі як відповіді, і якщо ваша відповідь є лише посиланням, це не відповідь (але може бути коментарем). Якщо ви хочете, щоб це була відповідь, а не коментар, ваша відповідь якось повинна містити відповідну інформацію, наприклад, цитату із належним чином посилань або власне пояснення важливих деталей. Якщо можете, будь ласка, надайте необхідні реквізити; або я можу перетворити це на коментар для вас.
Glen_b -Встановіть Моніку

@Glen_b: продовжуйте та конвертуйте. Дякую за роз’яснення.
серв-інк

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.