0 / 0 / 0
Регистрация: 15.06.2017
Сообщений: 1
1

U-критерий Манна-Уитни

15.06.2017, 11:17. Показов 2359. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет! Попытался реализовать U-критерий Манна-Уитни. Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#include <iostream>
#include <ctime>
 
using namespace std;
 
int main() {
    setlocale(LC_ALL , "");
    cout << "Критерий Манна-Уитни.";
    //int x[6] = { 15, 23, 25, 26, 28, 29 };
    //int y[8] = { 12, 14, 18, 20, 22, 24, 27, 30 };
                      /*7  8  9  10 11 12 13 14 15 16 17 18*/
    int u[18][12] = { { 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7 },               //В данной таблице представлены критические значения 
        /*4*/         { 3445678910, 11, 11, 12 },   //критерия U-Манна-Уитни для уровня значимости 0,05
        /*5*/         { 5678911, 12, 13, 14, 15, 17, 18 },
        /*6*/         { 6810, 11, 13, 14, 16, 17, 19, 21, 22, 24 },
        /*7*/         { 810, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30 },
        /*8*/         { 10, 13, 15, 17, 19, 22, 24, 26, 29, 31, 34, 36 },
        /*9*/         { 12, 15, 17, 20, 23, 26, 28, 30, 34, 37, 39, 42 },
        /*10*/        { 14, 17, 20, 23, 26, 29, 33, 36, 39, 42, 45, 48 },
        /*11*/        { 16, 19, 23, 26, 30, 33, 37, 40, 44, 48, 51, 55 },
        /*12*/        { 18, 22, 26, 29, 33, 37, 41, 45, 49, 53, 57, 61 },
        /*13*/        { 20, 24, 28, 33, 37, 41, 45, 50, 54, 59, 63, 67 },
        /*14*/        { 22, 26, 31, 36, 40, 45, 50, 55, 59, 64, 67, 74 },
        /*15*/        { 24, 29, 34, 39, 44, 49, 54, 59, 64, 70, 75, 80 },
        /*16*/        { 26, 31, 37, 42, 47, 53, 59, 64, 70, 75, 81, 86 },
        /*17*/        { 28, 34, 39, 45, 51, 57, 63, 67, 75, 81, 87, 93 },
        /*18*/        { 30, 36, 42, 48, 55, 61, 67, 74, 80, 86, 93, 99 },
        /*19*/        { 32, 38, 45, 52, 58, 65, 72, 78, 85, 92, 99, 106 },
        /*20*/        { 34, 41, 48, 55, 62, 69, 76, 83, 90, 98, 105, 112 }
                    };
    int n1, n2;
    cout << "\nВведите количество значений первой выборки n1: ";
    cin >> n1;
    cout << "\nВведите количество значений второй выборки n2: ";
    cin >> n2;
    
    int* x = new int[n1];
    srand(time(0));
    for (int i(0); i < n1; i++)
        x[i] = rand() % 1 + 99;
    
    int* y = new int[n1];
    srand(time(0));
    for (int i(0); i < n2; i++)
        y[i] = rand() % 1 + 99;
    
    int *ind1 = new int[n1];
    int *ind2 = new int[n2];
    
    int m(0), sum1(0), sum2(0), nx;
    
    if (n1 > 2 && n2 > 6) {
        
        int** xy = new int*[2];
        for (int i(0); i < 2; i++)
            xy[i] = new int[n1 + n2];
        
        for (int i(0); i < n1 + n2; i++)
            xy[0][i] = i + 1;
        for (int i(0); i < n2; i++)
            xy[1][i] = y[i];
        for (int i(n2); i < n1 + n2; i++)
            xy[1][i] = x[i - n2];
        
        for (int i(1); i < n1 + n2; i++)
            for (int j(i); j > 0 && xy[1][j - 1] > xy[1][j]; j--)
                swap(xy[1][j], xy[1][j - 1]);
        
        for (int i(0); i < n1 + n2; i++)
            cout << xy[0][i] << " ";
 
        for (int i(0); i < n1 + n2; i++)
            for (int j(0); j < n1; j++)
                if (xy[1][i] == x[j]) {
                    m++;
                    ind1[m - 1] = i + 1;
                    sum1 += ind1[m - 1];
                }
        m = 0;
        for (int i(0); i < n1 + n2; i++)
            for (int j(0); j < n2; j++)
                if (xy[1][i] == y[j]) {
                    m++;
                    ind2[m - 1] = i + 1;
                    sum2 += ind2[m - 1];
                }
 
        if (sum2 > sum1) {
            sum1 = sum2;
            nx = n2;
        }
        else
            nx = n1;
 
        int U = n1*n2 + nx*(nx + 1) / 2 - sum1;
        cout << "\nЗначение U-критерия Манна-Уитни: " << U;
        cout << "\nКритическое значение критерия для данных n1 и n2: " << u[n1 - 3][n2 - 8];
        if (U > u[n1 - 3][n2 - 8])
            cout << "\nНулевая гипотеза об однородности двух выборок принимается.";
        else
            cout << "\nНулевая гипотеза об однородности двух выборок отвергается.";
        for (int j(0); j < n1 + n2; j++)
            delete[] xy[j];
        delete[] xy;
    }
    else
        cout << "\nНеверно заданы значения!";
 
    delete[] x;
    delete[] y;
    system("pause");
    return 0;
}
Столкнулся с проблемой. После ввода размерностей массивов x и y выдает следующее сообщение:
Вызвано исключение по адресу 0x0000000077173290 (ntdll.dll) в Mann-Whitney.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0x00000BF293245318.

Можете подсказать, где я накосячил?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.06.2017, 11:17
Ответы с готовыми решениями:

Критерий Манна-Уитни для больших выборок
Доброго времени суток, Поверхностному чтение гугла говорит, что критерий манна-уитни для выборок &gt;...

Программа расчета критерия u манна-уитни
привет всем! очень срочно нужна &quot;математическая программа Манна-Уитни SPSS&quot; скиньте , пожалуйста, ...

Критерии устойчивости САУ. Логарифмический критерий и критерий Найквиста
Добрый день. Возникла такая проблема: не могу точно определиться с устойчивостью/неустойчивостью...

След Матрицы Гелл-Манна
Такая вот задача. Tr(TaTbTcTaTb). Голову уже себе сломал. Подскажите что и как.

1
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
15.06.2017, 11:27 2
C++
1
2
3
int* y = new int[n1];  // <- здесь нужно скорее всего n2
srand(time(0));
for (int i(0); i < n2; i++) // <- исходя из этого цикла
P.S. rand() % 1 равен 0
1
15.06.2017, 11:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.06.2017, 11:27
Помогаю со студенческими работами здесь

Какой критерий, Какой критерий проверки ХД
Привет всем , поскольку ремонт ХД ,дело добровольное, в других мастеров професиональное, хотелось...

Критерий Сильвестра
Помогите реализовать критерий Сильвестра (положительная определенность матрицы)

критерий Коши
помогите, пожалуйста, доказать фундаментальность за критерием Коши вот такой последовательности...

Критерий согласия
Здравствуйте. Дано распределение случайной величины Y=X2,Х представлен 200 случайными двузначными...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru