public static double[] NormalizeZScore(this double[] data) { var d = new DenseVector(data); var result = new DenseVector(d.Count); d.CopyTo(result); result = (DenseVector) ((result - d.Mean())/(d.StandardDeviation())); return result.ToArray(); }
public void VarianceRatioTest(double[] data, int lag = 1, TimeSeriesType cor = TimeSeriesType.HOM) { DenseVector x = new DenseVector(data); //Mean double mu = x.Mean(); //Variance for 1st Order Difference double s1 = (x.SubVector(lag, x.Count - lag) - x.SubVector(0, x.Count - 2)).Variance(); double dLag = lag; double varvrt = double.NaN; switch (cor) { case TimeSeriesType.HOM: { varvrt = 2*(2*dLag - 1)*(dLag - 1)/(3*dLag*x.Count); break; } case TimeSeriesType.HET: { varvrt = 0; double sum2 = 0; for (int j = 0; j < lag; j++) { double sum1a = 0; //(x(j+2:n)-x(j+1:n-1)-mu).^2 double sum1b = 0; //(x(2:n-j)-x(1:n-j-1)-mu).^2; double sum1 = sum1a*sum1b; double delta = sum1/(Math.Pow(sum2, 2)); varvrt += 0; //(2*(q(i)-j)/q(i))^2)*delta; } break; } } ZScore = (VRatio - 1)/Math.Sqrt(varvrt); PValue = NormCDF(ZScore); }
public static double Covariance(DenseVector x, DenseVector y) { var cov = new DenseVector(x.Count); double xMean = x.Mean(); double yMean = y.Mean(); if (xMean.Equals(double.NaN) || yMean.Equals(double.NaN)) return double.NaN; for (int i = 0; i < x.Count; i++) { cov[i] = (x[i] - xMean)*(y[i] - yMean); } return ((double) 1/(x.Count - 1))*cov.Sum(); }
public static double Kurtosis(this double[] data) { var d = new DenseVector(data); var num = new DenseVector(d.Count); var denom = new DenseVector(d.Count); d.CopyTo(num); d.CopyTo(denom); for (int i = 0; i < num.Count; i++) { num[i] = Math.Pow(d[i] - d.Mean(), 4); denom[i] = Math.Pow(d[i] - d.Mean(), 2); } return (num.Sum()*num.Count)/(Math.Pow(denom.Sum(), 2)); }
public static double AverageRawReturn(this DenseVector d) { double[] result = RawRateOfReturn(d.ToArray()); var e = new DenseVector(result); return e.Mean(); }