none
Как использовать класс StatisticFormula ? RRS feed

  • Вопрос

  • Необходимо произвести математические вычисления с использованием распределения Стьюдента (t-распределение). Наткнулся на пространство имен System.Web.UI.DataVisualization.Charting, класс StatisticFormula и метод TDistribution, который делает то, что мне нужно. Но использовать не получается, не понимаю как определить конструктор: StatisticFormula obj_Statistic = new StatisticFormula(); << Выдает ошибку. (...has no constructors defined) Как правильно использовать класс и определять конструктор? В msdn нет подробного описания и примеров...
    • Перемещено Abolmasov Dmitry 3 августа 2011 г. 11:52 (От:Настольные ПК)
    22 июля 2011 г. 15:10

Ответы

  • Покопался в своих исходниках, вот нашел функцию. Считает двух-хвостовое распределение стьюдента, результат - совпадает с экселевским:

     

      static double Stud(double stat, double df)
      {
       double p = 0;
       if (stat > 0d)
       {
        p = 1 - 0.5 * ibetaf.incompletebeta(df / 2, 0.5, df / (df + stat * stat));
       }
       else
       {
        p = 0.5 * ibetaf.incompletebeta(df / 2, 0.5, df / (df + stat * stat));
       }
    
       return 2 * Math.Min(p, 1 - p);
      }
    

    Где ibetaf.incompletebeta - бета функция из Alglib.

     


    • Помечено в качестве ответа Muravey89 24 июля 2011 г. 8:01
    24 июля 2011 г. 5:57
    Отвечающий

Все ответы

  • StatisticFormula не имеет публичного конструктора, и может применятся только вместе с графиком. А график - не лучшее место для мат вычислений.

    Лучше воспользуйтесь какой нибудь мат библиотекой.

    22 июля 2011 г. 15:47
    Отвечающий
  • Ясно, а можете посоветовать библиотеку со статистическими функциями? Я нашел alglib, но в ней функция t-распределения возвращает отличные значения от тех, которые возвращает функция СТЬЮДРАСП в excel-е...  

    22 июля 2011 г. 18:12
  • Смотря какой сложности вычисления вам требуются. Для сложных вычислений я применяю язык R (используя враппер под C#). Но если вам нужно просто посчитать простейшие статистики - alglib вполне подойдет. А что касается несовпадения - что-то сомневаюсь. Либо там речь идет о разных статистиках, либо может в одном случае выдается one-tail, а в другом - two-tail распределение. Они отличаются ровно в два раза.

    23 июля 2011 г. 5:18
    Отвечающий
  • Да, про хвосты в курсе. При 0 или 1 на входе возвращаются одинаковые значения, при других значениях есть отличия и они значительные... Пока не разобрался.
    23 июля 2011 г. 22:15
  • Покопался в своих исходниках, вот нашел функцию. Считает двух-хвостовое распределение стьюдента, результат - совпадает с экселевским:

     

      static double Stud(double stat, double df)
      {
       double p = 0;
       if (stat > 0d)
       {
        p = 1 - 0.5 * ibetaf.incompletebeta(df / 2, 0.5, df / (df + stat * stat));
       }
       else
       {
        p = 0.5 * ibetaf.incompletebeta(df / 2, 0.5, df / (df + stat * stat));
       }
    
       return 2 * Math.Min(p, 1 - p);
      }
    

    Где ibetaf.incompletebeta - бета функция из Alglib.

     


    • Помечено в качестве ответа Muravey89 24 июля 2011 г. 8:01
    24 июля 2011 г. 5:57
    Отвечающий
  • Спасибо огромное, теперь все правильно считает!
    24 июля 2011 г. 8:01
  • Привет, а не мог бы ты еще найти в своих исходниках обратную функцию. Что бы получить значение t-критерия  Стьюдента по вероятности P при количестве наблюдений N. Спасибо.
    1 октября 2011 г. 8:47
  • Сорри, такого нет, не было надобности в такой функции.
    1 октября 2011 г. 12:51
    Отвечающий