我正在研究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)发布于 2015-06-27 19:59:26
R允许您使用sample函数对数据集进行重采样。为了进行引导,您可以对原始数据集进行随机采样(通过替换),然后重新计算每个子样本的统计信息。您可以将中间结果保存在数据结构中,以便在以后处理数据。
下面添加了针对您的特定问题的可能示例解决方案。我们为每个物种提取大小为3的10000个子样本,计算统计数据,然后将结果保存在列表或向量中。在bootstrap之后,我们能够处理所有数据:
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))https://stackoverflow.com/questions/31086399
复制相似问题