如何在一个数据帧中汇总许多随机样本的计算?

时间:2014-02-10 17:50:12

标签: r

在R中,我想自动对动物的家庭范围区域进行渐近线分析。 我们的想法是以图形方式显示您收集足够的家畜范围观察动物的点以稳定 - 即达到渐近线。为此,我需要在增加样本量的情况下采集数据集的许多随机样本,以生成带有误差条的曲线。

这是我想要自动化的程序:假设数据集有n个观察值(下面的数据集中n = 10;典型的更像是n = 100)。 对于从5到n的每个整数x,从数据集中取x个随机点(替换)并计算100次的归属范围大小。输出数据帧应为100行和n-5列,每列包含归属范围估计。

数据集的一小部分样本(10行)如下所示:

a<- c(189007.8, 1997503,    9.0)
b<- c(189008.9, 1997521,    7.0)
c<- c(189013.6, 1997521,    8.0)
d<- c(189013.4, 1997513,    8.0)
e<- c(189026.4, 1997509,    12.0)
f<- c(189038.5, 1997527,    7.5)
g<- c(189024.1, 1997520,    8.0)
h<- c(189017.5, 1997498,    5.5)
i<- c(189040.6, 1997501,    7.0)
j<- c(189014.6, 1997488,    10.0)
dataset<-data.frame(rbind(a,b,c,d,e,f,g,h,i,j))
colnames(dataset)<-c("X","Y","Z")

这就是我计算家庭范围大小(即Vol95)

的方法
library("ks")
library("KernSmooth")
Ha <- Hpi(dataset)
minX<-min(dataset$X)-25
minY<-min(dataset$Y)-25
minZ<-0
maxX<-max(dataset$X)+25
maxY<-max(dataset$Y)+25
maxZ<-max(dataset$Z)+5
fhata <- kde(x=dataset, H=Ha, gridsize=151, binned=FALSE, xmin=c(minX,minY,minZ),
             xmax=c(maxX,maxY,maxZ))
Vol95<-contourSizes(fhata, cont=95)

我想自动执行此过程,以消除繁琐的复制和粘贴。我怀疑这涉及到一个嵌套的for循环,但我太过于编程新手才能使它工作。帮助赞赏。

1 个答案:

答案 0 :(得分:1)

# Data
dataset = structure(
  list(X = c(189007.8, 189008.9, 189013.6, 189013.4, 189026.4, 189038.5, 189024.1, 189017.5, 189040.6, 189014.6), 
    Y = c(1997503, 1997521, 1997521, 1997513, 1997509, 1997527, 1997520, 1997498, 1997501, 1997488), 
    Z = c(9, 7, 8, 8, 12, 7.5, 8, 5.5, 7, 10)), 
  .Names = c("X", "Y", "Z"), 
  row.names = c("a", "b", "c", "d", "e", "f", "g", "h", "i", "j"), 
  class = "data.frame")

# Processing
set.seed(0)
Vol95 = matrix(0, nrow=100, ncol=nrow(dataset)-4)
for (x in 5:nrow(dataset)) {
  for (k in 1:nrow(Vol95)) {
    rows <- sample.int(nrow(dataset), x) 
    Ha <- Hpi(dataset[rows,])
    fhata <- kde(x=dataset[rows,], H=Ha, gridsize=151, binned=FALSE)
    Vol95[k,x-4] <- contourSizes(fhata, cont=95)
  }
}