0

Я смотрю на соотношение между днем ​​года, когда 5 видов птиц начали линять перья и количество дней, в течение которых эти 5 видов были заняты, чтобы завершить линьку их перьев.Вычислить коэффициент корреляции при загрузке

Я попытался смоделировать свои данные в коде ниже. Для каждого из 5 видов у меня начальный день для 10 особей и продолжительность 10 человек. Для каждого вида я рассчитал средний начальный день и среднюю продолжительность, а затем рассчитал корреляцию между этими 5 видами.

Что я хочу сделать, это загрузить исходную дату и начальную загрузку средней продолжительности для каждого вида. Я хочу повторить это 10000 раз и вычислить коэффициент корреляции после каждого повторения. Затем я хочу извлечь кванты 0.025, 0.5 и 0.975 из 10000 коэффициентов корреляции.

Я дошел до симулирования необработанных данных, но мой код быстро стал беспорядочным, как только я попытался выполнить загрузку. Кто-нибудь может мне с этим помочь?

# 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) 

ответ

2

R позволяет ресэмплировать наборов данных с помощью функции sample. Для загрузки можно просто взять произвольные выборки (с заменой) исходного набора данных, а затем пересчитать статистику для каждой подвыборки. Вы можете сохранить промежуточные результаты в структуре данных, чтобы впоследствии обрабатывать данные.

Ниже приведено возможное примерное решение для вашей конкретной проблемы. Мы берем 10000 подвыборки размером 3 для каждого вида, вычисляем статистику и затем сохраняем результаты в списке или векторе. После загрузки мы можем обработать все данные:

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

Большое спасибо за код, это действительно полезно. Мне интересно, как бы я сделал то же самое с пакетом 'boot'? – luciano

+0

@luciano Я никогда раньше не использовал этот пакет, но здесь есть хороший учебник/пример: http://www.statmethods.net/advstats/bootstrapping.html. В основном вы должны определить свою функцию вычисления корреляции и передать свои данные через boot(). Концептуально говоря, это в основном тот же процесс. –