partialDeriv.log.weibull <- function(x, shape, scale){
  yd <- yR <- list()
  y1 <- (1/shape) + (log(x) - log(scale))*(1-(x/scale)^shape)
  y2 <- (-1)*(1/scale) - (shape - 1)/scale + shape*(x^shape)*(scale^(-shape-1))  
  yd <- list(shape=y1, scale=y2)
  
  y1 <- (-1)*(log(x) - log(scale))*((x/scale)^shape)
  y2 <- shape*(x^shape)*(scale^(-shape-1))
  yR <- list(shape=y1, scale=y2)
  
  list(Dlogf=yd, DlogR=yR)
}

partialDeriv.log.exp <- function(x, rate){
  yd <- yR <- list()
  y1 <- (1/rate) - x
  yd <- list(rate=y1)
  
  y1 <- (-1)*x
  yR <- list(rate=y1)
  
  list(Dlogf=yd, DlogR=yR)
}

partialDeriv.log.lnorm <- function(x, meanlog, sdlog){
  yd <- yR <- list()
  y1 <- (log(x)-meanlog)/(sdlog^2)
  y2 <- (-1)*(1/sdlog) + (log(x) - meanlog)^2 * sdlog^(-3)
  yd <- list(meanlog=y1, sdlog=y2)
  
  xsd <- (log(x) - meanlog) / sdlog
  fx <- dnorm(x=xsd)
  Sx <- 1 - plnorm(q=x, meanlog=meanlog, sdlog=sdlog)
  
  y1 <- (1/Sx)*fx*(1/sdlog)
  y2 <- (1/Sx)*fx*xsd*(1/sdlog)
  
  yR <- list(meanlog=y1, sdlog=y2)
  list(Dlogf=yd, DlogR=yR)
}