Beispiel #1
0
        public int[] DropoutErrorsStud(double alphaMin, double alphaMax)
        {
            if (alphaMin == -1)
            {
                alphaMin = 0.001f;
            }
            if (alphaMax == -1)
            {
                alphaMax = 0.05f;
            }
            ArrayList listX           = new ArrayList(arrX);
            ArrayList listIndexIgnore = new ArrayList();

            while (true)
            {
                double min = double.MaxValue, max = double.MinValue;
                double sum = 0, sumXPow2 = 0;
                int    indexMin = -1, indexMax = -1;
                for (int i = 0; i < listX.Count; i++)
                {
                    if (listIndexIgnore.BinarySearch(i) >= 0)
                    {
                        continue;
                    }
                    double x = (double)listX[i];
                    if (x < min)
                    {
                        min      = x;
                        indexMin = i;
                    }
                    if (x > max)
                    {
                        max      = x;
                        indexMax = i;
                    }
                    sum      += x;
                    sumXPow2 += x * x;
                }
                int    n = listX.Count - listIndexIgnore.Count;
                double average = sum / n;
                double devStd = sumXPow2 / (n - 1) - (sum / (n - 1)) * (sum / (n - 1));
                double sigmaStd = (double)Math.Sqrt(devStd);
                double tauXMin, tauXMax;
                tauXMin = (double)Math.Abs(min - average) / sigmaStd;
                tauXMax = (double)Math.Abs(max - average) / sigmaStd;
                int    index;
                double tauMax;
                if (tauXMin >= tauXMax)
                {
                    index  = indexMin;
                    tauMax = tauXMin;
                }
                else
                {
                    index  = indexMax;
                    tauMax = tauXMax;
                }

                double tMin    = StatTables.GetStudDistrInv(listX.Count - 2, alphaMin);
                double tMax    = StatTables.GetStudDistrInv(listX.Count - 2, alphaMax);
                double critMin = tMin * (double)Math.Sqrt(listX.Count - 1) /
                                 (double)Math.Sqrt(listX.Count - 2 + tMin * tMin);
                double critMax = tMax * (double)Math.Sqrt(listX.Count - 1) /
                                 (double)Math.Sqrt(listX.Count - 2 + tMin * tMin);
                if (tauMax > critMin)
                {
                    listIndexIgnore.Add(index);
                    listIndexIgnore.Sort();
                }
                else
                {
                    break;
                }
            }
            return((int[])listIndexIgnore.ToArray(typeof(int)));
        }
Beispiel #2
0
        public void CheckHypothesises(double alpha)
        {
            // знач. регр.
            fishRegrTheor = StatTables.GetFishDistrInv(n - 1, n - p - 1, alpha);
            if (fishRegr > fishRegrTheor)
            {
                isRegrRepr = true;
            }
            else
            {
                isRegrRepr = false;
            }

            // знач. коэф. регр.
            studBTheor = StatTables.GetStudDistrInv(n - p - 1, alpha);
            arrIsBRepr = new bool[p + 1];
            for (int i = 0; i < arrIsBRepr.Length; i++)
            {
                if (arrStudB[i] > studBTheor)
                {
                    arrIsBRepr[i] = true;
                }
                else
                {
                    arrIsBRepr[i] = false;
                }
            }

            // знач. коэф. кор.
            studRxyTheor = StatTables.GetStudDistrInv(n - 2, alpha);
            arrIsRxyRepr = new bool[p];
            for (int i = 0; i < arrIsRxyRepr.Length; i++)
            {
                if (arrStudRxy[i] > studRxyTheor)
                {
                    arrIsRxyRepr[i] = true;
                }
                else
                {
                    arrIsRxyRepr[i] = false;
                }
            }

            // знач. множ. коэф. кор.
            studRTheor = StatTables.GetStudDistrInv(n - p - 1, alpha);
            if (studR > studRTheor)
            {
                isRReprStud = true;
            }
            else
            {
                isRReprStud = false;
            }

            fishRTheor = StatTables.GetFishDistrInv(n - p - 1, p, alpha);
            if (fishR > fishRTheor)
            {
                isRReprFish = true;
            }
            else
            {
                isRReprFish = false;
            }
        }
Beispiel #3
0
        public int[] DropoutErrorsStud(double alphaMin, double alphaMax, out string[] arrReason)
        {
            if (alphaMin == -1)
            {
                alphaMin = 0.001f;
            }
            if (alphaMax == -1)
            {
                alphaMax = 0.05f;
            }
            ArrayList     listX           = new ArrayList(arrX);
            ArrayList     listIndexIgnore = new ArrayList();
            List <string> listReason      = new List <string>();

            while (true)
            {
                double min = double.MaxValue, max = double.MinValue;
                double sum = 0, sumXPow2 = 0;
                int    indexMin = -1, indexMax = -1;
                for (int i = 0; i < listX.Count; i++)
                {
                    if (listIndexIgnore.BinarySearch(i) >= 0)
                    {
                        continue;
                    }
                    double x = (double)listX[i];
                    if (x < min)
                    {
                        min      = x;
                        indexMin = i;
                    }
                    if (x > max)
                    {
                        max      = x;
                        indexMax = i;
                    }
                    sum      += x;
                    sumXPow2 += x * x;
                }
                int    n = listX.Count - listIndexIgnore.Count;
                double average = sum / n;
                double devStd = sumXPow2 / (n - 1) - (sum / (n - 1)) * (sum / (n - 1));
                double sigmaStd = (double)Math.Sqrt(devStd);
                double tauXMin, tauXMax;
                tauXMin = (double)Math.Abs(min - average) / sigmaStd;
                tauXMax = (double)Math.Abs(max - average) / sigmaStd;
                int    index;
                double tauMax;
                if (tauXMin >= tauXMax)
                {
                    index  = indexMin;
                    tauMax = tauXMin;
                }
                else
                {
                    index  = indexMax;
                    tauMax = tauXMax;
                }

                double tMin    = StatTables.GetStudDistrInv(listX.Count - 2, alphaMin);
                double tMax    = StatTables.GetStudDistrInv(listX.Count - 2, alphaMax);
                double critMin = tMin * (double)Math.Sqrt(listX.Count - 1) /
                                 (double)Math.Sqrt(listX.Count - 2 + tMin * tMin);
                double critMax = tMax * (double)Math.Sqrt(listX.Count - 1) /
                                 (double)Math.Sqrt(listX.Count - 2 + tMin * tMin);
                if (tauMax > critMin)
                {
                    int i = listIndexIgnore.BinarySearch(index);
                    listIndexIgnore.Insert(~i, index);
                    listReason.Insert(~i, string.Format("Для {0}: tau<SUB>max</SUB> = {1} > {2}",
                                                        Math.Round(arrX[index], 3), Math.Round(tauMax, 3),
                                                        Math.Round(critMin, 3)));
                }
                else
                {
                    break;
                }
            }
            arrReason = listReason.ToArray();
            return((int[])listIndexIgnore.ToArray(typeof(int)));
        }