Exemplo n.º 1
0
def selective_correlation(sizes, n, correlations, mean, variance):
    correlation = Correlation()
    for size in sizes:
        for rho in correlations:
            correlation_pearson_sample = []
            correlation_square_sample = []
            correlation_spearman_sample = []
            for _ in range(0, n):
                x, y = correlation.multivariate_normal(mean, variance, rho,
                                                       size)
                correlation_pearson_sample.append(
                    Correlation.pearson_correlation(x, y))
                correlation_square_sample.append(
                    Correlation.square_correlation(x, y))
            correlation_spearman_sample.append(
                Correlation.spearman_correlation(x, y))
            print_correlations([
                correlation_pearson_sample, correlation_spearman_sample,
                correlation_square_sample
            ], size, rho)
    for size in sizes:
        correlation_pearson_sample = []
        correlation_square_sample = []
        correlation_spearman_sample = []
        for _ in range(0, n):
            x, y = correlation.mixed_multivariate_normal(size)
            correlation_pearson_sample.append(
                Correlation.pearson_correlation(x, y))
            correlation_square_sample.append(
                Correlation.square_correlation(x, y))
            correlation_spearman_sample.append(
                Correlation.spearman_correlation(x, y))
        print_correlations([
            correlation_pearson_sample, correlation_spearman_sample,
            correlation_square_sample
        ], size, -1)
Exemplo n.º 2
0
    def plot(self):
        correlation = Correlation()

        pearson = correlation.pearson_correlation(self.x, self.y)
        mean_x = Correlation.mean(self.x)
        mean_y = Correlation.mean(self.y)
        variance_x = np.sqrt(Correlation.variance(self.x))
        variance_y = np.sqrt(Correlation.variance(self.y))
        ell_radius_x = np.sqrt(1 + pearson)
        ell_radius_y = np.sqrt(1 - pearson)
        alpha = 1 / 2 * np.arctan(
            (2 * pearson * variance_x * variance_y) /
            (variance_x * variance_x - variance_y * variance_y))

        alpha = alpha if alpha > 0 else alpha + np.pi / 2

        scale_x = 3 * variance_x
        scale_y = 3 * variance_y
        ellipse = Elp((mean_x, mean_y),
                      2 * ell_radius_x * scale_x,
                      2 * ell_radius_y * scale_y,
                      np.degrees(alpha),
                      facecolor='none',
                      edgecolor='red')
        fig, ax = plt.subplots()

        ax.add_artist(ellipse)
        plt.plot(self.x, self.y, 'o')
        plt.xlim(-4, 4)
        plt.ylim(-4, 4)
        plt.xlabel('x')
        plt.ylabel('y')
        plt.title('Size = ' + str(self.size) + ', rho = ' + str(self.rho))
        plt.savefig('images/' + 'Ellipse' + str(self.size) + 'r' +
                    str(self.rho) + '.png')
        plt.show()
        return