Advertisement
Guest User

Untitled

a guest
Oct 25th, 2016
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.85 KB | None | 0 0
  1. # location-scale t-distrubution functions
  2. # not provided in the standard t-distribution in R
  3. # mu is the location, a is the scale
  4. dt_ls <- function(x, df, mu, a) 1/a * dt((x - mu)/a, df)
  5. pt_ls <- function(x, df, mu, a) pt((x - mu)/a, df)
  6. qt_ls <- function(prob, df, mu, a) qt(prob, df)*a + mu
  7. rt_ls <- function(n, df, mu, a) rt(n,df)*a + mu
  8. studentpdf <- function(x, mu, var, nu) {
  9. c <- exp(log(gamma(nu/2 + 0.5)) - log(gamma(nu/2))) * (nu * pi * var)^(-0.5)
  10. p <- c * (1 + (1 / (nu*var)) * (x-mu)^2)^(-(nu+1/2))
  11. }
  12.  
  13. hazard_func <- function(r, lam) {
  14. odds <- 1/lam * rep(1, r)
  15. return (1/lam)
  16. }
  17.  
  18. obc <- setRefClass("obc",
  19. fields = list(
  20. mu = "numeric",
  21. lambda = "numeric",
  22. alpha = "numeric",
  23. beta = "numeric",
  24. T = "numeric",
  25. R = "data.frame",
  26. maxes = "numeric",
  27. ct = "numeric"
  28. ),
  29. methods = list(
  30. initialize = function(mu0=1, lambda0=lambda, alpha0=1, beta0=1) {
  31. mu <<- mu0
  32. lambda <<- lambda0
  33. alpha <<- alpha0
  34. beta <<- beta0
  35. ct <<- 0
  36.  
  37. T <<- 1000
  38. R <<- as.data.frame(matrix(0, nrow=T+1, ncol=T+1))
  39. R[1,1] <<- 1
  40. maxes <<- numeric(T+1)
  41. },
  42. calculate = function( x ) {
  43. ct <<- ct + 1
  44. pred_post <- dt_ls(x, 2*alpha, mu, beta*(lambda+1)/(alpha*lambda))
  45. H <- hazard_func(ct, lambda)
  46. R[2:(ct+1), ct+1] <<- R[1:ct, ct] * pred_post * (1-H)
  47. R[1, ct+1] <<- sum( R[1:ct, ct] * pred_post * H )
  48. R[,ct+1] <<- R[,ct+1] / sum(R[,ct+1])
  49.  
  50. mu_new <- c(mu[1], (lambda*mu + x) / (lambda + 1))
  51. lambda_new <- c(lambda[1], lambda + 1)
  52. alpha_new <- c(alpha[1], alpha + 0.5)
  53. beta_new <- c(beta[1], beta + (lambda *(x-mu)^2) / (2*(lambda+1)))
  54.  
  55. mu <<- mu_new
  56. lambda <<- lambda_new
  57. alpha <<- alpha_new
  58. beta <<- beta_new
  59. maxes[ct] <<- which(R[,ct] == max(R[,ct]))
  60. }
  61. )
  62. )
  63.  
  64. # data <- c(rnorm(333, 5, .1), rnorm(333, 2, .1), rnorm(334, 8, .1))
  65. # o <- obc$new(mu0 = 5, lambda0=10, alpha0=10, beta0=10)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement