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())
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)
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())
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]])
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)
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)