Главная страница
    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.011 c
2-1145690851
$$$nick$$$
2006-04-22 11:27
2006.05.14
Помогите решить задачу.


15-1145206429
geserx
2006-04-16 20:53
2006.05.14
Работа с e--mail на Delphi


15-1145276830
Nic
2006-04-17 16:27
2006.05.14
Часики =)


15-1145271726
Tirael
2006-04-17 15:02
2006.05.14
как прочитать файл открытый другой прогой эксклюзивно?


1-1144235102
Arm79
2006-04-05 15:05
2006.05.14
Call Stack в RunTime





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский