Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.05.14;
Скачать: [xml.tar.bz2];

Вниз

Ранжирование выборок   Найти похожие ветки 

 
Mikhail ©   (2006-04-24 15:08) [0]

Доброго времени суток!
Вопрос такой: есть статистическая выборка, состоящая из n чисел. Как проранжировать эти числа от меньшего к большему?


 
Palladin ©   (2006-04-24 15:09) [1]

Отсортировать чтоли?


 
Mikhail ©   (2006-04-25 13:54) [2]

Да нет, отсортировать - это 1 строчка кода. Нужно именно проранжировать. есть например числа 3, 5, 6, 7, 6, 12, 20, 10. Нужно каждому из них присвоить определённый ранг, чтобы получилось:
3 - 1
5 - 2
6 - 3,5 (так как есть ещё одна 6, если б их было 3, то ранг у каждой был бы 4)
6 - 3,5
7 - 5 (так как 4 уже занята как и 3)
10 - 6
12 - 7
20 - 8
Вот именно это и требуется. Просто занимаюсь реализацией статистических критериев Вилкоксона и Пейджа. Столкнулся с проблемкой.


 
balepa ©   (2006-04-25 14:25) [3]

Сначала отсортируй, а дальше подумай вроде легко.
Одно из первых что пришло на ум. Можно взять 1 число из отсортированного массива поискать есть ли оно далее. Потом ставь ранги(не понял как их считать так что извиняйте) и т.д.


 
MBo ©   (2006-04-25 14:28) [4]

Да вроде нет особых трудностей:


procedure RangeSortedArray(const A: array of Integer; var Rng: array of Single);
var
 Cur, Last: Integer;

 procedure FillRange;
 var
   j: Integer;
   r: Single;
 begin
   r := (Cur + Last + 1) / 2;
   for j := Last to Cur - 1 do
     Rng[j] := r;
 end;

begin
 Last := 0;
 for Cur := 1 to High(A) do begin
   if A[Cur] <> A[Cur - 1] then begin
     FillRange;
     Last := Cur;
   end;
 end;
 Cur := High(A) + 1;
 if Last <> Cur - 1 then
   FillRange;
end;

procedure TForm11.Button3Click(Sender: TObject);
var
 i, N: integer;
 Rng: array of Single;
 A: array of Integer;
begin
 N := 10;
 Memo1.Clear;
 SetLength(Rng, N);
 SetLength(A, N);
 Randomize;
 A[0] := Random(3);
 for i := 1 to High(A) do
   A[i] := A[i - 1] + Random(2);
 RangeSortedArray(A, Rng);
 for i := 0 to High(Rng) do
   Memo1.Lines.Add(Format("%d   %f", [A[i], Rng[i]]));
end;


 
balepa ©   (2006-04-25 14:30) [5]

Потом берешь следующее число из массива после последнего повтора предыдущего числа. Так что нужно запоминать индексы элементов для повторов текущего числа и индекс последнего повтора текущего числа.

Что-то типа этого.


 
Mikhail ©   (2006-04-25 14:31) [6]

Считать их так. У тебя есть числа 1 3 3 5
1 - 1(всё понятно)
3 - есть 2 раза, вроде ранги должны быть 2 и 3, но число то одно и то же, поэтому берем посередине, то есть 2,5. Если б было 3 тройки, то ранги должны были бы быть 2,3,4, но опять же берём посередине и получаем 3, причем все три ранга (2,3,4) уже заняты, т.е.
5 - 4


 
MBo ©   (2006-04-25 14:31) [7]

Пардон, строчка в конце
if Last <> Cur - 1 then
не нужна



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.05.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.01 c
1-1144056863
misha_gr
2006-04-03 13:34
2006.05.14
Вопрос про ресурсы и про курсор (мышиный)


15-1145288708
TUser
2006-04-17 19:45
2006.05.14
Защита от паразита


2-1146065265
tio
2006-04-26 19:27
2006.05.14
AddIndex


15-1145462574
Piter
2006-04-19 20:02
2006.05.14
Нужна программка, которая максимально нагружает диск :)


2-1145789779
sysop
2006-04-23 14:56
2006.05.14
Выравнивание строки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский