R/imr.R

Defines functions imr

Documented in imr

#'  Imputation Rate IMR
#'
#' The imputation rate measures the proportion of changed items in a data set.
#' @author Beat Hulliger - Juan Berdugo
#' @param bij (optional): A matrix containing the structurally missingness indicators. bij can be calculated using the function \code{\link[sdap]{smind}}. If the argument bij is missing, the indicator irr is calculated without considering a misingness indicators matrix.
#' @param gij (mandatory): A matrix containing the imputation indicators for a given dataframe. gij can be calculated using the function \code{\link[sdap]{impind}}.
#' @param obsi (optional): A vector with the observations to to be processed. If the argument obs is missing, all observations are processed.
#' @param varj (optional): A vector with the variables (column numbers) to be considered for the calculation. If the argument varj is missing, all variables are considered for the indicator.
#' @param weight (optional): A vector of weights to be considered when calculating the indicator. If no weight vector is given as an argument, the indicator is calculated without considering different weights.
#' @return A list with the following elements: variables (variables), observations (observations), Number of imputations detected (imputations), Indicator IMR (imr).
#' @export


imr <- function(bij,gij,obsi=1:nrow(gij),varj=1:ncol(gij),weight)

{

  #obsi <- 1:nrow(gij)
  #varj <- var.rent

  n <- length(obsi)
  p <- length(varj)

  if (missing(weight)) weight <- rep(1,n)

  #Check existence of gij

  if (missing(gij)) {
    cat("Missing gij!\n")
    break
  }

  #Check existence of bij

  if (missing(bij)) {
    cat("Missing bij!\n")
    break
  }

  #store the size of bij and gij

  sizebij <- dim(bij)
  sizegij <- dim(gij)


  #check if the sizes of bij and gij match


  if (identical(sizebij,sizegij)==FALSE)
    {
    print("The sizes of bij and gij do not match. Please recalculate bij and/or gij.")
    break
    }

  # Calculate denominator of the function. If it is zero, return zero and break.
  if (length(varj)==1)
  {
    denominator <- weighted.mean((1-bij[obsi,varj]),w=weight)
  }else
  {
    denominator <- weighted.mean(apply((1-bij[obsi,varj]),1,sum),w=weight)
  }

  if(denominator==0)
  {
    imr.value <- 0
    return(imr.value)
    break
  }

  # Calculate IMR.
  if(length(varj)==1)
  {
    imr.value <- weighted.mean(((1-bij[obsi,varj])*gij[obsi,varj]),w=weight)
  }else
  {
    imr.value <- weighted.mean(apply(((1-bij[obsi,varj])*gij[obsi,varj]),1,sum),w=weight)
  }

  imr.value <- imr.value / denominator


  imrlist<- list(variables = varj, observations = obsi, imputations=sum(gij[obsi,varj]), imr=imr.value )

  return(imrlist)



  }

Try the sdap package in your browser

Any scripts or data that you put into this service are public.

sdap documentation built on May 2, 2019, 6:52 p.m.