R - 为配对(错误)匹配实现 bootstrap 函数

R - implement bootstrap function for paired (mis)matches

我在 boot 库中实现函数时遇到问题。

我要实现的功能如下

fsyn = function(x) sum( x[1,] == x [2,] )

这是两个序列之间匹配的计数。

我的数据是一组序列如

   id V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1   1  c  a  c  b  c  c  b  d  d   a
2   1  c  d  a  a  c  b  d  a  b   a
3   2  b  d  c  b  b  b  c  d  a   b
4   2  b  a  b  c  b  c  d  b  a   d

关于这些序列的一个重要事实是它们 id 配对

我有兴趣做两件事,第一是 bootstrap id 的匹配数,第二是随机的两个人。

第一个程序可以通过

实现
library(dplyr) 

chid = df$id
# sampling paired sequences # 
wchid = function(chid) which(chid %in% sample(chid, 1))
# the matches function # 
fsyn = function(x) sum( x[1,] == x [2,] ) 
# wrapping the function # 
funcHamC = function(df) df[wchid(chid), -1] %>% fsyn 

df %>% funcHamC

第二个函数可以简单地写成

funcHamR =  function(df) df[sample(df$id, 2), -1] %>% fsyn
df %>% funcHamR

但是,我在 boot 中使用这两个函数时遇到问题。

library(boot)
boot(df, funcHamC, R = 10)
boot(df, funcHamR, R = 10)

这是行不通的。任何想法 ?

数据

df = as.data.frame( t(replicate(20, sample(letters[1:4], 10, T))) ) 
df$id = rep(1:10, 2)
df = df %>% select(id, everything()) %>% arrange(id)

boot 函数需要 statistic 函数的两个参数——第二个参数是指定要选择的样本值的参数。因为您使用自己的方法从数据中随机选择,所以您应该将 sim 参数设置为 'parametric'。这将使用 ran.gen 参数来指定一个函数以从数据中生成随机值。

引用自帮助文件:"If ran.gen is not specified, the default is a function which returns the original data in which case all simulation should be included as part of statistic."

将引导输出保存到变量中——例如 C.bootR.boot,您将在 C.boot$tR.boot$t.

中找到样本
C.boot <- boot(df, statistic=funcHamC, R = 10, sim='parametric')
R.boot <- boot(df, statistic=funcHamR, R = 10, sim='parametric')

然后您可以从生成的值中获取所需的统计信息。