我需要为R中的数据集执行自举。数据采用包含两个矩阵的列表形式,并具有以下属性:
两个矩阵都是n乘m并且只包含正整数(包括0)。
data <- list(a=matrix(,n,m), b=matrix(,n,m))
许多大理石,比如10000,被分配到每个矩阵中,即10000被分成n * m个部分。换句话说,每个矩阵的所有条目的总和是固定的。
> sum(data$a)
[1] 10000
> sum(data$b)
[1] 10000
我的目标是估计导致潜在概率的参数。我的模型假设2n
个参数,n
表示行数,每个矩阵一个集合。参数以复杂的方式组合,因此必须一起分析两个矩阵。
parameters <- data.frame(a=numeric(n), b=numeric(n))
现在,这是我正在使用的方法:
我定义了一个函数SGen
,它输入一个包含与所有站点相关的概率的矩阵,使用这些概率生成一个数据集并返回它。
SGen <- function(freq) {
#generate sample
...
}
对于非参数自举(我现在想要实现的),我运行一个实验,并通过划分观察到的矩阵计算与每个 ij 元素相关的观测概率10000.我们暂时将其称为freq
。因此,freq
是一个包含两个矩阵的列表。
freq <- list(a=data$a/10000, b=data$b/10000)
freq
传递给SGen
来复制100个样本数据。analyze
,它给出了包含参数的100 n乘2矩阵。虽然该方法有效,但我想在R中使用启动包来完成这项工作。我想这样做,因为我可以使用启动包中的所有功能进行后续分析,我也喜欢以启动类格式存储基本信息的方式。我想使用启动包的另一个重要原因是它提供了一种简单的方法来利用我的计算机的多核功能。那么,请您指导我如何使用boot
作为我的目的?
答案 0 :(得分:0)
您可以通过以下方式使用bootstrap
几乎任何功能(取自?bootstrap
):
# To bootstrap functions of more complex data structures,
# write theta so that its argument x
# is the set of observation numbers
# and simply pass as data to bootstrap the vector 1,2,..n.
# For example, to bootstrap
# the correlation coefficient from a set of 15 data pairs:
xdata <- matrix(rnorm(30),ncol=2)
n <- 15
theta <- function(x,xdata){ cor(xdata[x,1],xdata[x,2]) }
results <- bootstrap(1:n,20,theta,xdata)
theta
是引导功能。
这种方法的唯一问题(我相信)是theta只能返回一个向量(不是一次性的多个值的数据帧/矩阵)。因此,如果您的theta
函数返回的内容不是向量,则可能无效。
boot
包的更新:使用boot
包中的boot
函数,方法类似。它需要data
,数据作为向量,矩阵或数据帧,statistic
,“一个函数,当应用于数据时,返回包含感兴趣的统计量的向量。”对于非参数引导,statistic
函数必须(至少)采用两个参数:原始数据,以及索引,频率或权重的向量。
所以,关键是编写一个函数,对索引给出的数据子集实现步骤1-5,例如:
theta <- function(data, indices) {
## exact subsetting operation depends on the format of data
subset_data = data[indices,]
## perform the calculations in steps 1-5 here on subset_data
}
然后你应该能够像这样打电话给theta
:
boot(data, theta)