首页 文章

通过自举计算相关系数

提问于
浏览
0

我正在研究5种鸟类开始蜕皮的日子与这5种鸟类完成羽毛蜕皮所需的天数之间的相关性 .

我试图在下面的代码中模拟我的数据 . 对于5个物种中的每一个,我有10个人的开始日和10个人的持续时间 . 对于每个物种,我计算了平均开始日和平均持续时间,然后计算了这5个物种之间的相关性 .

我想做的是引导平均开始日期并引导每个物种的平均持续时间 . 我想重复这10,000次,并在每次重复后计算相关系数 . 然后,我想提取10,000相关系数的0.025,0.5和0.975分位数 .

我得到了模拟原始数据的能力,但是一旦我尝试引导,我的代码很快变得混乱 . 谁能帮我这个?

# speciesXX_start_day is the day of the year that 10 individuals of birds started moulting their feathers
# speciesXX_duration is the number of days that each individuals bird took to complete the moulting of its feathers
species1_start_day <- as.integer(rnorm(10, 10, 2))
species1_duration <- as.integer(rnorm(10, 100, 2))

species2_start_day <- as.integer(rnorm(10, 20, 2))
species2_duration <- as.integer(rnorm(10, 101, 2))

species3_start_day <- as.integer(rnorm(10, 30, 2))
species3_duration <- as.integer(rnorm(10, 102, 2))

species4_start_day <- as.integer(rnorm(10, 40, 2))
species4_duration <- as.integer(rnorm(10, 103, 2))

species5_start_day <- as.integer(rnorm(10, 50, 2))
species5_duration <- as.integer(rnorm(10, 104, 2))

start_dates <- list(species1_start_day, species2_start_day, species3_start_day, species4_start_day, species5_start_day)
start_duration <- list(species1_duration, species2_duration, species3_duration, species4_duration, species5_duration)

library(plyr)

# mean start date for each of the 5 species
starts_mean <- laply(start_dates, mean)

# mean duration for each of the 5 species
durations_mean <- laply(start_duration, mean)

# correlation between start date and duration
cor(starts_mean, durations_mean)

1 回答

  • 2

    R允许您使用 sample 函数重新采样数据集 . 为了引导您,您可以随机获取原始数据集的样本(替换),然后重新计算每个子样本的统计数据 . 您可以将中间结果保存在数据结构中,以便以后可以处理数据 .

    下面添加了针对您的特定问题的可能示例解决方案 . 我们为每个物种采用大小为3的10000个子样本,计算统计数据,然后将结果保存在列表或向量中 . 在引导之后,我们能够处理所有数据:

    nrSamples = 10000;
    listOfMeanStart = list(nrSamples)
    listOfMeanDuration = list(nrSamples)
    correlations <- vector(mode="numeric", length=nrSamples)
    
    for(i in seq(1,nrSamples))
    {
      sampleStartDate = sapply(start_dates,sample,size=3,replace=TRUE)
      sampleDurations = sapply(start_duration,sample,size=3,replace=TRUE)
    
      listOfMeans[[i]] <- apply(sampleStartDate,2,mean) 
      listOfMeanDuration[[i]] <- apply(sampleDurations,2,mean)
      correlations[i] <- cor(listOfMeans[[i]], listOfMeanDuration[[i]])
    }
    
    quantile(correlations,c(0.025,.5,0.975))
    

相关问题