2016-02-02 4 views
0

Я относительно новый в R, и я пытаюсь построить функцию, которая будет проходить через столбцы в импортированной таблице и создавать вывод, который состоит из средств и 95% доверительных интервалов. В идеале должно быть возможно загружать столбцы с разными размерами выборки, но сначала я хотел бы, чтобы работа итерации работала. У меня есть что-то вроде работы, но я не могу получить все это. Это то, что код выглядит, с данными выборки и вывод включает:Загрузите несколько столбцов с помощью R

#cdata<-read.csv(file.choose(),header=T)#read data from selected file, works, commented out because data is provided below 
#cdata #check imported data 

#Sample Data 
# WALL NRPK CISC WHSC LKWH YLPR 
#1 21 8 1 2 2 5 
#2 57 9 3 1 0 1 
#3 45 6 9 1 2 0 
#4 17 10 2 0 3 0 
#5 33 2 4 0 0 0 
#6 41 4 13 1 0 0 
#7 21 4 7 1 0 0 
#8 32 7 1 7 6 0 
#9  9 7 0 5 1 0 
#10 9 4 1 0 0 0 

x<-cdata[,c("WALL","NRPK","LKWH","YLPR")] #only select relevant species 

i<-nrow(x) #count number of rows for bootstrapping 
g<-ncol(x) #count number of columns for iteration 

#build bootstrapping function, this works for the first column but doesn't iterate 

bootfun <- function(bootdata, reps) { 

    boot <- function(bootdata){ 

    s1=sample(bootdata, size=i, replace=TRUE) 
    ms1=mean(s1) 
    return(ms1) 

    } # a single bootstrap 

    bootrep <- replicate(n=reps, boot(bootdata)) 

    return(bootrep) 

} #replicates bootstrap of "bootdata" "reps" number of times and outputs vector of results 

cvr1 <- bootfun(x$YLPR,50000) #have unsuccessfully tried iterating the location various ways (i.e. x[i]) 
cvrquantile<-quantile(cvr1,c(0.025,0.975)) 
cvrmean<-mean(cvr1) 
vec<-c(cvrmean,cvrquantile) #puts results into a suitable form for output 
vecr<-sapply(vec,round,1) #rounds results 
vecr 

     2.5% 97.5% 
28.5 19.4 38.1 

#apply(x[1:g],2,bootfun) ##doesn't work in this case 

#desired output: 

#Species Mean LowerCI UpperCI 
#WALL  28.5 19.4  38.1 
#NRPK  6.1 4.6 7.6 
#YLPR  0.6 0.0 1.6 

Я также попытался это с помощью пакета загрузки, и он прекрасно работает перебирать средства, но я не могу получить его сделать то же самое с доверительными интервалами. «Обычный» код выше также имеет то преимущество, что вы можете легко получить результаты начальной загрузки, которые могут быть использованы для других вычислений. Для полноты картины здесь код загрузки:

#Bootstrapping using boot package 
library(boot) 
#data<-read.csv(file.choose(),header=TRUE) #read data from selected file 
#x<-data[,c("WALL","NRPK","LKWH","YLPR")] #only select relevant columns 
#x #check data 

#Sample Data 

# WALL NRPK LKWH YLPR 
#1 21 8 2 5 
#2 57 9 0 1 
#3 45 6 2 0 
#4 17 10 3 0 
#5 33 2 0 0 
#6 41 4 0 0 
#7 21 4 0 0 
#8 32 7 6 0 
#9  9 7 1 0 
#10 9 4 0 0 

i<-nrow(x) #count number of rows for resampling 
g<-ncol(x) #count number of columns to step through with bootstrapping 
boot.mean<-function(x,i){boot.mean<-mean(x[i])} #bootstrapping function to get the mean 

z<-boot(x, boot.mean,R=50000) #bootstrapping function, uses mean and number of reps 
boot.ci(z,type="perc") #derive 95% confidence intervals 
apply(x[1:g],2, boot.mean) #bootstrap all columns 

#output: 
#WALL NRPK LKWH YLPR 
#28.5 6.1 1.4 0.6 

Я прошел через все ресурсы, которые я могу найти и не могу показаться, чтобы все заработало. То, что я хотел бы для вывода, было бы загрузочным средством со связанными доверительными интервалами для каждого столбца. Благодаря!

+0

Что вы имеете в виду, когда вы говорите, выходной сигнал, который состоит из ** средств и доверительных интервалов **? Вы имеете в виду, что вы хотите, чтобы средняя, ​​0.025 и 0.975 процентили вычисленной статистики? –

+0

Кроме того, для 50k повторяется * n столбцов, вы, вероятно, захотите использовать 'boot :: boot', поскольку он обеспечивает интеграцию с пакетом' parallel' –

+0

Когда я говорю вывод, я имею в виду, что я хотел бы, чтобы результаты отображались в таблицу, которая состоит из имени столбца для каждого столбца, загрузочных средств и соответствующих доверительных интервалов. Благодарим вас за советы по загрузке :: boot. – JK101

ответ

0

Примечание: apply(x[1:g],2, boot.mean) #bootstrap all columns не выполняет загрузку. Вы просто вычисляете среднее значение для каждого столбца.

Для начальной загрузки среднего и доверительного интервала, попробуйте следующее:

apply(x,2,function(y){ 
    b<-boot(y,boot.mean,R=50000); 
    c(mean(b$t),boot.ci(b,type="perc", conf=0.95)$percent[4:5]) 
}) 
+0

Это прекрасно работает. Я по-прежнему получаю некоторые нечетные ошибки в моем коде (а не ваши), но то, что вы предоставили, дает точные результаты, которые я искал. Спасибо огромное! :) – JK101

Смежные вопросы