예제 #1
0
    def test_correlation_small_uncertainty(self):
        imt = SA(period=1.5, damping=5)

        cormo = HM2018CorrelationModel(uncertainty_multiplier=0)
        corma = cormo._get_correlation_matrix(self.SITECOL, imt)

        cormo2 = HM2018CorrelationModel(uncertainty_multiplier=1E-30)
        corma2 = cormo2._get_correlation_matrix(self.SITECOL, imt)
        self.assertTrue((corma == corma2).all())
예제 #2
0
    def test_correlation_with_uncertainty(self):
        Nsim = 100000
        cormo = HM2018CorrelationModel(uncertainty_multiplier=1)
        imt = SA(period=3, damping=5)
        
        corma_3d = numpy.zeros((len(self.SITECOL), len(self.SITECOL), Nsim))

        # For each simulation, construct a new correlation matrix
        for isim in range(0, Nsim):
            corma_3d[0:, 0:, isim] = \
                cormo._get_correlation_matrix(self.SITECOL, imt)

        # Mean and Coefficient of Variation (COV) of correlation matrix
        MEANcorMa = corma_3d.mean(2)
        COVcorma = numpy.divide(corma_3d.std(2), MEANcorMa)

        aaae(MEANcorMa,[[1.0000000,    0.3766436,    1.0000000,    0.3766436,],
                     [0.3766436,    1.0000000,    0.3766436,    0.2534904,],
                     [1.0000000,    0.3766436,    1.0000000,    0.3766436,],
                     [0.3766436,    0.2534904,    0.3766436,    1.00000,]], 2)

        aaae(COVcorma,[[0.0000000,    0.4102512,    0.0000000,    0.4102512,],
                     [0.4102512,    0.0000000,    0.4102512,    0.5636907,],
                     [0.0000000,    0.4102512,    0.0000000,    0.4102512,],
                     [0.4102512,    0.5636907,    0.4102512,    0.00000,]], 2)
예제 #3
0
    def test_pga_no_uncertainty(self):
        sa = SA(period=1e-50, damping=5)
        pga = PGA()

        cormo = HM2018CorrelationModel(uncertainty_multiplier=0)
        corma = cormo._get_correlation_matrix(self.SITECOL, sa)
        corma2 = cormo._get_correlation_matrix(self.SITECOL, pga)
        self.assertTrue((corma == corma2).all())
예제 #4
0
    def test_correlation_no_uncertainty(self):
        cormo = HM2018CorrelationModel(uncertainty_multiplier=0)

        imt = SA(period=0.1, damping=5)
        corma = cormo._get_correlation_matrix(self.SITECOL, imt)
        aaae(corma, [[1.0000000, 0.3981537, 1.0000000, 0.3981537],
                     [0.3981537, 1.0000000, 0.3981537, 0.2596809],
                     [1.0000000, 0.3981537, 1.0000000, 0.3981537],
                     [0.3981537, 0.2596809, 0.3981537, 1.0000000]])

        imt = SA(period=0.5, damping=5)
        corma = cormo._get_correlation_matrix(self.SITECOL, imt)
        aaae(corma, [[1.0000000, 0.3809173, 1.0000000, 0.3809173],
                     [0.3809173, 1.0000000, 0.3809173, 0.2433886],
                     [1.0000000, 0.3809173, 1.0000000, 0.3809173],
                     [0.3809173, 0.2433886, 0.3809173, 1.0000000]])

        imt = SA(period=1, damping=5)
        corma = cormo._get_correlation_matrix(self.SITECOL, imt)
        aaae(corma, [[1.0000000, 0.3906193, 1.0000000, 0.3906193],
                     [0.3906193, 1.0000000, 0.3906193, 0.2525181],
                     [1.0000000, 0.3906193, 1.0000000, 0.3906193],
                     [0.3906193, 0.2525181, 0.3906193, 1.0000000]])

        imt = SA(period=2, damping=5)
        corma = cormo._get_correlation_matrix(self.SITECOL, imt)
        aaae(corma, [[1.0000000, 0.4011851, 1.0000000, 0.4011851],
                     [0.4011851, 1.0000000, 0.4011851, 0.2625807],
                     [1.0000000, 0.4011851, 1.0000000, 0.4011851],
                     [0.4011851, 0.2625807, 0.4011851, 1.0000000]])

        imt = SA(period=4, damping=5)
        corma = cormo._get_correlation_matrix(self.SITECOL, imt)
        aaae(corma, [[1.0000000, 0.3522765, 1.0000000, 0.3522765],
                     [0.3522765, 1.0000000, 0.3522765, 0.2170695],
                     [1.0000000, 0.3522765, 1.0000000, 0.3522765],
                     [0.3522765, 0.2170695, 0.3522765, 1.0000000]])

        imt = SA(period=6, damping=5)
        corma = cormo._get_correlation_matrix(self.SITECOL, imt)
        aaae(corma, [[1.0000000, 0.3159779, 1.0000000, 0.3159779],
                     [0.3159779, 1.0000000, 0.3159779, 0.1851206],
                     [1.0000000, 0.3159779, 1.0000000, 0.3159779],
                     [0.3159779, 0.1851206, 0.3159779, 1.0000000]])
예제 #5
0
    def test_with_uncertainty(self):
        numpy.random.seed(1)
        Nsim = 100000
        imt = SA(period=3.0, damping=5)
        stddev_intra = numpy.array([0.3, 0.6, 0.9])
        cormo = HM2018CorrelationModel(uncertainty_multiplier=1)

        intra_residuals_sampled = numpy.random.multivariate_normal(
            numpy.zeros(3), numpy.diag(stddev_intra ** 2), Nsim).\
            transpose(1, 0)

        intra_residuals_correlated = cormo.apply_correlation(
            self.SITECOL, imt, intra_residuals_sampled, stddev_intra)

        inferred_corrcoef = numpy.corrcoef(intra_residuals_correlated)
        mean = intra_residuals_correlated.mean(1)
        std = intra_residuals_correlated.std(1)

        aaae(numpy.squeeze(numpy.asarray(mean)), numpy.zeros(3), 2)
        aaae(numpy.squeeze(numpy.asarray(std)), stddev_intra, 2)
        aaae(inferred_corrcoef, [[1., 0.3807, 0.5066], [0.3807, 1., 0.3075],
                                 [0.5066, 0.3075, 1.]], 2)
예제 #6
0
    def test_no_uncertainty(self):
        numpy.random.seed(1)
        Nsim = 100000
        imt = SA(period=2.0, damping=5)
        stddev_intra = numpy.array([0.5, 0.6, 0.7])
        cormo = HM2018CorrelationModel(uncertainty_multiplier=0)

        intra_residuals_sampled = numpy.random.multivariate_normal(
            numpy.zeros(3), numpy.diag(stddev_intra ** 2), Nsim).\
            transpose(1, 0)

        intra_residuals_correlated = cormo.apply_correlation(
            self.SITECOL, imt, intra_residuals_sampled, stddev_intra)

        inferred_corrcoef = numpy.corrcoef(intra_residuals_correlated)
        mean = intra_residuals_correlated.mean(1)
        std = intra_residuals_correlated.std(1)

        aaae(numpy.squeeze(numpy.asarray(mean)), numpy.zeros(3), 2)
        aaae(numpy.squeeze(numpy.asarray(std)), stddev_intra, 2)

        actual_corrcoef = cormo._get_correlation_matrix(self.SITECOL, imt)
        aaae(inferred_corrcoef, actual_corrcoef, 2)