/////////////////////////////////// РАСЧЕТЫ /////////////////////////////////////

        //Автоматическая проверка гипотезы
        //Считает критерий, степени свободы, критическое значение
        //и сам сравнивает
        void auto_check(AbstractDistribution distr)
        {
            //Вычисляем значения
            double pirson_vis         = calc_pirson(distr);
            int    degrees_of_freedom = calc_degrees_of_freedom(distr);
            double pirson_crit        = CriticalPirsonCriterion.GetCriticalValue((double)cbAlpha.SelectedItem, degrees_of_freedom);

            //Отображаем значения
            txtPirsonVis.Text        = pirson_vis.ToString("N4");
            txtDegreesOfFreedom.Text = degrees_of_freedom.ToString();
            txtPirsonCrit.Text       = pirson_crit.ToString("N4");

            //Пишемм вывод
            if (pirson_vis < pirson_crit)
            {
                labelResult.Text      = "НЕ ОТВЕРГАЕМ ГИПОТЕЗУ";
                labelResult.ForeColor = Color.Green;
            }
            else
            {
                labelResult.Text      = "ОТВЕРГАЕМ ГИПОТЕЗУ";
                labelResult.ForeColor = Color.Red;
            }
            labelResult.Visible = true;
        }
Ejemplo n.º 2
0
        private void PirsonTableForm_Load(object sender, EventArgs e)
        {
            var table      = CriticalPirsonCriterion.GetTable();
            var sign_level = CriticalPirsonCriterion.GetSignificanceLevel();

            //Отображаем таблицу
            var templ_row = new DataGridViewRow();

            for (int i = 0; i < sign_level.Count + 1; i++)
            {
                templ_row.Cells.Add(new DataGridViewTextBoxCell());
                if (i == 0)
                {
                    gridPirson.Columns.Add("c0", " ");
                }
                else
                {
                    gridPirson.Columns.Add("c" + i, sign_level[i - 1].ToString());
                }
            }

            gridPirson.RowTemplate = templ_row;

            int i_ = 1;

            foreach (var row_ in table)
            {
                var row_index = gridPirson.Rows.Add();
                var row       = gridPirson.Rows[row_index];
                row.Cells["c0"].Value = i_;

                int j = 1;
                foreach (var alpha in row_.Keys)
                {
                    row.Cells["c" + j].Value = row_[alpha];
                    j++;
                }

                i_++;
            }
        }
        AbstractDistribution distr;                     //Распределение, для которого проверяется гипотеза

        /// <summary>
        /// Создает новый объект класса CheckDistributionForm с заданным распределением
        /// </summary>
        /// <param name="distr">Объект распределения</param>
        public CheckDistributionForm(AbstractDistribution distr)
        {
            InitializeComponent();

            //Сохраняем распределение. Отображаем его имя
            this.distr        = distr;
            lblDistrType.Text = distr.Name;


            //Заголовки графиков
            if (distr.DistributionType == DistributionType.DISCRETE)
            {
                graphEmp.GraphPane.Title.Text = "Полигон относительных частот";
            }
            else
            {
                graphEmp.GraphPane.Title.Text = "Гистограмма относительных частот";
            }

            graphTheor.GraphPane.Title.Text = "Теоретическая функция распределения";

            //Отображает полигон относительных частот и график теоретического закона распределения
            //draw_distribution(graphEmp, distr.Distribution);

            draw_emp_graph(graphEmp, distr);
            draw_distribution(graphTheor, distr.GetTheoreticalFreq());

            //Делаем одинаковый масштаб
            double min_1 = graphTheor.GraphPane.YAxis.Scale.Min;
            double min_2 = graphEmp.GraphPane.YAxis.Scale.Min;
            double max_1 = graphTheor.GraphPane.YAxis.Scale.Max;
            double max_2 = graphEmp.GraphPane.YAxis.Scale.Max;

            graphTheor.GraphPane.YAxis.Scale.Min     = Math.Min(min_1, min_2);
            graphEmp.GraphPane.YAxis.Scale.Max       = Math.Max(max_1, max_2);
            graphEmp.GraphPane.YAxis.Scale.MajorStep = graphTheor.GraphPane.YAxis.Scale.MajorStep;
            graphEmp.GraphPane.YAxis.Scale.MinorStep = graphTheor.GraphPane.YAxis.Scale.MinorStep;

            graphTheor.AxisChange();
            graphTheor.Invalidate();

            //Загружает значения уровней значимости в ComboBox
            cbAlpha.DataSource = CriticalPirsonCriterion.GetSignificanceLevel();

            //Отображаем формулу распределения
            pboxFunction.BackgroundImage = distr.Funtion;

            //Отображаем точечные оценки
            //Магия
            foreach (DataGridViewColumn col in gridPointValues.Columns)
            {
                col.DataPropertyName = col.Name;
            }

            var bs = new BindingSource();

            gridPointValues.RowTemplate.Height = 68;
            bs.DataSource = distr.PointValues.Select(x => new { ParamName = x.ParamName, Formula = x.Formula, Value = x.Value }).ToList();
            gridPointValues.DataSource = bs;
            gridPointValues.Columns["Value"].DefaultCellStyle.Format = "N2";


            //Настройка числа знаков после запятой для таблицы расчета
            gridCalcTable.Columns["Pi"].DefaultCellStyle.Format   = "N2";
            gridCalcTable.Columns["ni"].DefaultCellStyle.Format   = "N2";
            gridCalcTable.Columns["sums"].DefaultCellStyle.Format = "N2";
        }