我正在使用StatMatch库中的NND.hotdeck,并发现在相同的数据上运行它会产生不同的结果。这是一些示范代码:
library(StatMatch);
lab <- c(1:15, 51:65, 101:115);
iris.rec <- iris[lab, c(1:3,5)];
iris.don <- iris[-lab, c(1:2,4:5)];
a <- NND.hotdeck(data.rec=iris.rec, data.don=iris.don, match.vars=c("Sepal.Length", "Sepal.Width") );
b <- NND.hotdeck(data.rec=iris.rec, data.don=iris.don, match.vars=c("Sepal.Length", "Sepal.Width") );
View(a$mtc.ids)
View(b$mtc.ids)
两个网格大多相同,但存在差异。我希望它们是一样的。
如何关闭此随机化?我没有发现这种行为的引用,更不用说禁用它了。
答案 0 :(得分:1)
我对包不熟悉,但我确信它在某处使用随机值。
您可以在每次通话前使用set.seed
设置随机种子。
set.seed(1234)
a <- NND.hotdeck(data.rec=iris.rec, data.don=iris.don, match.vars=c("Sepal.Length", "Sepal.Width"))
set.seed(1234)
b <- NND.hotdeck(data.rec=iris.rec, data.don=iris.don, match.vars=c("Sepal.Length", "Sepal.Width"))
您可以检查两个输出是否相同:
all.equal(a, b)
这可能不是一个非常优雅的解决方案,它并没有真正关闭随机化,但它确实有效。
干杯,
亚历