2015-07-21 89 views
2

我需要为R的数据集的数据是在包含两个矩阵一个列表的形式,并执行自举具有以下属性:引导中的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 
    
  • 弹珠根据IJ用于弹子,即许多弹子如何结束个元素的亲和力作为基质的IJ个条目取决于与的每一个细胞相关联的概率分布矩阵。
  • 与两个矩阵的元素相关的概率是不同的。

我的目标是估计导致潜在可能性的参数。我的模型假设为2n参数,n为每个矩阵的行数和一组。参数以复杂的方式组合,因此两个矩阵必须一起分析。

parameters <- data.frame(a=numeric(n), b=numeric(n)) 

现在,这是我使用的方法:

  1. 我定义一个函数SGen这需要输入包含所有网站相关联的概率矩阵,利用这些概率生成的数据集和返回它。

    SGen <- function(freq) { 
        #generate sample 
        ... 
    } 
    
  2. 对于非参数引导(这是我想要实现对现在是什么),I进行实验,并通过将所观察到的矩阵与10000计算与每个IJ元件相关联的观测概率。现在让我们称它为freq。所以,freq是一个包含两个矩阵的列表。

    freq <- list(a=data$a/10000, b=data$b/10000) 
    
  3. 接下来,我通过传递freqSGen到复制100个样本数据。
  4. 我将所有重复项传递给另一个预定义的函数analyze,它给出了100 n乘以2个包含参数的矩阵。
  5. 接下来,我计算所有矩阵之间的条目的平均值和sd,以得到一个n乘2的矩阵包含平均值,而另一个包含sd。因此,平均矩阵的第(1,5)个元素的期望值是所有100个重复中第(1,5)个元素的平均值。

虽然这种方法的工作原理,我想在R中使用启动包作为工作。我想这样做,因为那样我就可以在启动包中使用所有的功能,以便以后进行分析,并且我还喜欢重要信息以boot类格式存储的方式。我想使用引导软件包的另一个重要原因是它提供了一种使用我的计算机的多核功能的简单方法。那么,请你指导我如何使用boot达到我的目的?

回答

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) 
+0

'bootstrap'函数是为特定项目开发的。 'bootstrap'的作者推荐的boot包是我正在尝试使用的。 'bootstrap'没有并行处理功能。 [链接] https://cran.r-project.org/web/packages/bootstrap/bootstrap.pdf –

+0

感谢您的答案。我试图做的主要问题是控制'boot'函数生成新样本的方式。从我的阅读中,我认为控制新样本绘制方式的唯一方法是将其作为参数引导。但是我的数据集变得越来越复杂,我正在研究'foreach'包,以便更直接地实现我想要做的事情。 –