# reproduce the classical matching framework
lab <- c(1:10, 51:60, 101:110)
iris.rec <- iris[lab, c(1:3,5)] # recipient data.frame
iris.don <- iris[-lab, c(1:2,4:5)] # recipient data.frame
# Now iris.rec and iris.don have the variables
# "Sepal.Length", "Sepal.Width" and "Species"
# in common.
# "Petal.Length" is available only in iris.rec
# "Petal.Width" is available only in iris.don
# find a donor in the subset of closest donors using cut.don="rot";
# the distance is computed using "Sepal.Length" and "Sepal.Width"
out.NND.1 <- RANDwNND.hotdeck(data.rec=iris.rec, data.don=iris.don,
match.vars=c("Sepal.Length", "Sepal.Width") )
# create the synthetic (or fused) data.frame:
# fill in "Petal.Width" in iris.rec
fused.1 <- create.fused(data.rec=iris.rec, data.don=iris.don,
mtc.ids=out.NND.1$mtc.ids, z.vars="Petal.Width")
# find a donor in the subset of closest donors using cut.don="rot";
# the distance is computed using "Sepal.Length" and "Sepal.Width"
# "Species" is used to form donation classes
out.NND.2 <- RANDwNND.hotdeck(data.rec=iris.rec, data.don=iris.don,
match.vars=c("Sepal.Length", "Sepal.Width") , don.class="Species")
# as before, but with a different criteria to reduce the no. of donors:
# the first half (k=0.5) of the closest available donors is retained,
# then a donor is chosen at random among them
out.NND.3 <- RANDwNND.hotdeck(data.rec=iris.rec, data.don=iris.don,
don.class="Species", match.vars=c("Sepal.Length", "Sepal.Width"),
cut.don="span", k=0.5 )
# as before, but the subset of closest donors is formed by considering
# only the first k=5 closest donors
out.NND.4 <- RANDwNND.hotdeck(data.rec=iris.rec, data.don=iris.don,
don.class="Species", match.vars=c("Sepal.Length", "Sepal.Width"),
cut.don="exact", k=5 )
# as before, but the subset of closest donors is formed by considering
# the donors whose distance (Gower) is less or equal to k=0.33
out.NND.5 <- RANDwNND.hotdeck(data.rec=iris.rec, data.don=iris.don,
don.class="Species", match.vars=c("Sepal.Length", "Sepal.Width"),
dist.fun="Gower", cut.don="k.dist", k=0.33 )
# Example of Imputation of missing values
# introducing missing vales in iris
ir.mat <- iris
miss <- rbinom(nrow(iris), 1, 0.3)
ir.mat[miss==1,"Sepal.Length"] <- NA
iris.rec <- ir.mat[miss==1,-1]
iris.don <- ir.mat[miss==0,]
#search for NND donors
imp.NND <- RANDwNND.hotdeck(data.rec=iris.rec, data.don=iris.don,
match.vars=c("Sepal.Width","Petal.Length", "Petal.Width"),
don.class="Species")
# imputing missing values
iris.rec.imp <- create.fused(data.rec=iris.rec, data.don=iris.don,
mtc.ids=imp.NND$mtc.ids, z.vars="Sepal.Length")
# rebuild the imputed data.frame
final <- rbind(iris.rec.imp, iris.don)Run the code above in your browser using DataLab