斯皮尔曼与帕斯卡尔的关系排名靠前

时间:2015-01-13 21:15:24

标签: pascal freepascal lazarus turbo-pascal

我正在开展一个项目,我需要计算一些数据的spearman等级。目前我的程序可以计算spearmans等级,只要它们没有并列排名。我会使用现有单位,但我需要在字符串网格中显示排名值,以及它们的排名,而不仅仅是Spearmans值本身。我在提出一个解决方案时遇到问题,该解决方案允许对绑定值排名进行平均,以便在存在绑定数据时计算测试。 谢谢你的时间。

here是Spearmans等级

这是我到目前为止的代码,这只对值进行排序和排序,实际的spearmans值是在另一个程序中计算的

type Tspearman = record
                          x : string;
                          y : string;
                          xrank : string;
                          yrank : string;
                          d : string;
                          d2 : string;
                    end;


procedure TForm1.SortRank();
var
  s:string;
  P2, P2plus1,q : single;
   Position_1, Position_2,i: Integer;
   Temporary : TSpearman;
   t:string; 
begin
   for Position_1 := 1 to ListBoxSP.Items.Count-1 do //Length(data) - 1 do
   begin
      for Position_2 := 1 to ListBoxSP.Items.Count-2 do //( Length( data ) - 2 ) do
      begin
           P2 := StrToFloat(data[ Position_2 ].x);
           P2plus1 := StrToFloat(data[ Position_2 + 1 ].x );
         if P2 > P2plus1 then  // ascending                       
         then
         begin
            Temporary := data[ Position_2 ];
            data[ Position_2 ] := data[ Position_2 + 1 ];
            data[ Position_2 + 1 ] := Temporary;
         end;
      end;
   end;
   For i :=1 to ListBoxSP.Items.Count
         do
         begin
           data[i].xrank := IntToStr(i);
         end;
   for Position_1 := 1 to ListBoxSP.Items.Count-1 do //Length(data) - 1 do
   begin
      for Position_2 := 1 to ListBoxSP.Items.Count-2 do //( Length( data ) - 2 ) do
      begin
         P2 := StrToFloat(data[ Position_2 ].y);
         P2plus1 := StrToFloat(data[ Position_2 + 1 ].y );
         if  P2 > P2plus1 then  // ascending
         begin
            Temporary := data[ Position_2 ];
            data[ Position_2 ] := data[ Position_2 + 1 ];
            data[ Position_2 + 1 ] := Temporary;
         end;
      end;
   end;
   For i :=1 to ListBoxSP.Items.Count
         do
         begin
           data[i].yrank := IntToStr(i);
         end;
   For i:=1 to ListBoxSP.Items.Count   //This calculates the d values
         do
         begin
          data[i].d := FloatToStr(StrToFloat(data[i].xrank)-StrToFloat(data[i].yrank));
         end;
   For i:=1 to ListBoxSP.Items.Count
         do
         begin
          data[i].d2 := data[i].d;                     
          q:= sqr(StrToFloat(data[i].d2));               
          data[i].d2 := FloatToStr(q);
         end;
end;

0 个答案:

没有答案