2015-07-21 66 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'包,以便更直接地實現我想要做的事情。 –