Вычислить значение p для t — статистики, используя student_t_distribution

#c #c 11

#c #c 11

Вопрос:

Я хотел вычислить p-значения t-статистики для двухфакторного теста с уровнем значимости 5%. И я хотел сделать это со стандартной библиотекой. Мне было интересно, возможно ли это с помощью модуля student_t_distribution from < random > . В настоящее время мой код выглядит следующим образом

 #include <iostream>

int main(){
    double t_stat = 0.0267; // t-statistic
    double alpha_los = 0.05; // level of significance
    double dof = 30; // degrees of freedom
    // calculate P > |t| and compare with alpha_los
    return 0;
}
  

Спасибо

Комментарии:

1. cplusplus.com/reference/random/student_t_distribution Также есть пример использования

2. @В отличие от , который используется для генерации случайных чисел, а не для вычисления p-значения t-статистики.

3. Извините, я виноват. С помощью <random> вы можете просто выбирать данные.

4. boost.org/doc/libs/1_49_0/libs/math/doc/sf_and_dist/html / … можете вычислить cdf, тогда легко получить значение p.

Ответ №1:

<random> Заголовок просто предоставляет вам возможность получать случайные числа из разных распределений.

Если вы можете использовать boost, вы можете сделать следующее:

 #include <boost/math/distributions/students_t.hpp>

int main() {
    double t_stat = 0.0267; // t-statistic
    double alpha_los = 0.05; // level of significance
    double dof = 30; // degrees of freedom
    boost::math::students_t dist(dof);

    double P_x_greater_t = 1.0 - boost::math::cdf(dist, t_stat);
    double P_x_smaller_negative_t = boost::math::cdf(dist, -t_stat);

    if(P_x_greater_t   P_x_smaller_negative_t < alpha_los) {
        
    } else {
        
    }
}