scala.runtime.ScalaRunTime Scala Examples
The following examples show how to use scala.runtime.ScalaRunTime.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
Example 1
Source File: BlockedMultivariateStudentsT.scala From DynaML with Apache License 2.0 | 5 votes |
package io.github.mandar2812.dynaml.probability.distributions import breeze.linalg.DenseVector import breeze.numerics._ import math.Pi import breeze.stats.distributions._ import io.github.mandar2812.dynaml.algebra._ import io.github.mandar2812.dynaml.algebra.PartitionedMatrixOps._ import io.github.mandar2812.dynaml.algebra.PartitionedMatrixSolvers._ import io.github.mandar2812.dynaml.probability.RandomVariable import spire.implicits._ import scala.runtime.ScalaRunTime case class BlockedMultivariateStudentsT( mu: Double, mean: PartitionedVector, covariance: PartitionedPSDMatrix)(implicit rand: RandBasis = Rand) extends AbstractContinuousDistr[PartitionedVector] with Moments[PartitionedVector, PartitionedPSDMatrix] with HasErrorBars[PartitionedVector] { require(mu > 2.0, "Degrees of freedom must be greater than 2.0, for a multivariate t distribution to be defined") private val chisq = new ChiSquared(mu) def draw() = { val w = math.sqrt(mu/chisq.draw()) val nE: Int = if(mean.rowBlocks > 1L) mean(0L to 0L)._data.head._2.length else mean.rows.toInt val z: PartitionedVector = PartitionedVector.rand(mean.rows, nE, RandomVariable(new StudentsT(mu)))*w val m: PartitionedVector = root * z m + mean } private lazy val root: LowerTriPartitionedMatrix = bcholesky(covariance) override def toString() = ScalaRunTime._toString(this) override def unnormalizedLogPdf(t: PartitionedVector) = { val centered: PartitionedVector = t - mean val z: PartitionedVector = root \ centered val slv: PartitionedVector = root.t \ z -0.5*(mu+mean.rows)*log(1.0 + ((slv dot centered) / mu)) } override lazy val logNormalizer = { // determinant of the cholesky decomp is the sqrt of the determinant of the cov matrix // this is the log det of the cholesky decomp val det = bsum(blog(bdiag(root))) ((mean.rows/2) * (log(mu) + log(Pi))) + 0.5*det + lgamma(mu/2.0) - lgamma((mu+mean.rows)/2.0) } def variance = new PartitionedPSDMatrix( covariance._underlyingdata.map(c => (c._1, c._2*(mu/(mu-2.0)))), covariance.rows, covariance.cols, covariance.rowBlocks, covariance.colBlocks) def mode: PartitionedVector = mean //TODO: Check and correct calculation of entropy for Mult Students T lazy val entropy = { bsum(blog(bdiag(root))) + (mean.rows/2.0)*log(mu*Pi) + lbeta(mean.rows/2.0, mu/2.0) - lgamma(mean.rows/2.0) + (digamma((mu+mean.rows)/2.0) - digamma(mu/2.0))*(mu+mean.rows)/2.0 } override def confidenceInterval(s: Double) = { val signFlag = if(s < 0) -1.0 else 1.0 val nE: Int = if(mean.rowBlocks > 1L) mean(0L to 0L)._data.head._2.length else mean.rows.toInt val ones = PartitionedVector.ones(mean.rows, nE) val multiplier = signFlag*s val bar: PartitionedVector = root*(ones*(multiplier*math.sqrt(mu/(mu-2.0)))) (mean - bar, mean + bar) } }
Example 2
Source File: BlockedMultiVariateGaussian.scala From DynaML with Apache License 2.0 | 5 votes |
package io.github.mandar2812.dynaml.probability.distributions import breeze.numerics._ import math.{Pi, log1p} import breeze.stats.distributions.{Moments, Rand, RandBasis} import io.github.mandar2812.dynaml.algebra._ import io.github.mandar2812.dynaml.algebra.PartitionedMatrixOps._ import io.github.mandar2812.dynaml.algebra.PartitionedMatrixSolvers._ import io.github.mandar2812.dynaml.probability.GaussianRV import scala.runtime.ScalaRunTime case class BlockedMultiVariateGaussian( mean: PartitionedVector, covariance: PartitionedPSDMatrix)(implicit rand: RandBasis = Rand) extends AbstractContinuousDistr[PartitionedVector] with Moments[PartitionedVector, PartitionedPSDMatrix] with HasErrorBars[PartitionedVector] { def draw() = { val nE: Int = if(mean.rowBlocks > 1L) mean(0L to 0L)._data.head._2.length else mean.rows.toInt val z: PartitionedVector = PartitionedVector.rand(mean.rows, nE, GaussianRV(0.0, 1.0)) val m: PartitionedVector = root * z m + mean } private lazy val root: LowerTriPartitionedMatrix = bcholesky(covariance) override def toString() = ScalaRunTime._toString(this) override def unnormalizedLogPdf(t: PartitionedVector) = { val centered: PartitionedVector = t - mean val z: PartitionedVector = root \ centered val slv: PartitionedVector = root.t \ z val d: Double = slv dot centered -1.0*d/2.0 } override lazy val logNormalizer = { // determinant of the cholesky decomp is the sqrt of the determinant of the cov matrix // this is the log det of the cholesky decomp val det = bsum(blog(bdiag(root))) mean.rows.toDouble/2 * log(2 * Pi) + 0.5*det } def variance = covariance def mode = mean lazy val entropy = { mean.rows.toDouble * log1p(2 * Pi) + bsum(blog(bdiag(root))) } override def confidenceInterval(s: Double) = { val signFlag = if(s < 0) -1.0 else 1.0 val nE: Int = if(mean.rowBlocks > 1L) mean(0L to 0L)._data.head._2.length else mean.rows.toInt val ones = PartitionedVector.ones(mean.rows, nE) val multiplier = signFlag*s val bar: PartitionedVector = root*(ones*multiplier) (mean - bar, mean + bar) } }
Example 3
Source File: MultivariateStudentsT.scala From DynaML with Apache License 2.0 | 5 votes |
package io.github.mandar2812.dynaml.probability.distributions import breeze.numerics._ import math.Pi import breeze.linalg._ import breeze.stats.distributions._ import org.apache.spark.annotation.Experimental import scala.runtime.ScalaRunTime case class MultivariateStudentsT( mu: Double, mean: DenseVector[Double], covariance : DenseMatrix[Double])(implicit rand: RandBasis = Rand) extends AbstractContinuousDistr[DenseVector[Double]] with Moments[DenseVector[Double], DenseMatrix[Double]] with HasErrorBars[DenseVector[Double]] { assert(mu > 2.0, "Parameter mu in Multivariate Students T must be greater than 2.0") private val chisq = new ChiSquared(mu) def draw() = { val w = math.sqrt(mu/chisq.draw()) val z: DenseVector[Double] = DenseVector.rand(mean.length, rand.gaussian(0.0, 1.0))*w (root * z) += mean } private val root: DenseMatrix[Double] = cholesky(covariance) override def toString() = ScalaRunTime._toString(this) override def unnormalizedLogPdf(t: DenseVector[Double]) = { val centered = t - mean val slv = covariance \ centered -0.5*(mu+mean.length)*log(1.0 + ((slv dot centered) / mu)) } override lazy val logNormalizer = { // determinant of the cholesky decomp is the sqrt of the determinant of the cov matrix // this is the log det of the cholesky decomp val det = sum(log(diag(root))) ((mean.length/2) * (log(mu) + log(Pi))) + 0.5*det + lgamma(mu/2.0) - lgamma((mu+mean.length)/2.0) } def variance = covariance*(mu/(mu-2.0)) def mode = mean //TODO: Check and correct calculation of entropy for Mult Students T @Experimental lazy val entropy = { sum(log(diag(root))) + (mean.length/2.0)*log(mu*Pi) + lbeta(mean.length/2.0, mu/2.0) - lgamma(mean.length/2.0) + (digamma((mu+mean.length)/2.0) - digamma(mu/2.0))*(mu+mean.length)/2.0 } override def confidenceInterval(s: Double) = { val signFlag = if(s < 0) -1.0 else 1.0 val ones = DenseVector.ones[Double](mean.length) val multiplier = signFlag*s val bar: DenseVector[Double] = root*(ones*(multiplier*math.sqrt(mu/(mu-2.0)))) (mean - bar, mean + bar) } }