Форум: "Начинающим";
Текущий архив: 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