2015-02-11 33 views
1

我想从data.frame的引导比例的置信区间。我想在我的一列中获得变量的结果。 我已经设法为一个矢量执行bootstrap,但不知道如何从这里扩展到data.frame。 一个简化示例,设置阈值为10,并查看数据中小于10的比例。数据框中列的几个变量的自举CI

向量解:

library(boot) 

vec <- abs(rnorm(1000)*10) #generate example vector 

data_to_tb <- vec 

tb <- function(data) { 
    sum(data < 10, na.rm = FALSE)/length(data) #function for generating the proportion 
} 

tb(data_to_tb) 

boot.out <- boot(data = data_to_tb, function(u,i) tb(u[i]), R = 999) 
quantile(boot.out$t, c(.025,.975)) 

,从这里我想为包含两列的data.frame这样做。 我想如果可能的返回结果在“总结” data.frame,与列(X,样品,比例,CI):

x n proportion CI 

A xx xx   xx 
B xx xx   xx 
C xx xx   xx 

会比较好,如果可以使用dplyr包。 这是我的数据的简化示例:

实施例:

dataframe <- data.frame(x = sample(c("A","B","C"),100,replace = TRUE), vec =abs(rnorm(100)*10)) 

head(dataframe) 
## x  vec 
## 1 B 0.06735163 
## 2 C 0.48612358 
## 3 B 2.34190635 
## 4 C 0.36393262 
## 5 A 7.99762969 
## 6 B 1.43293330 

回答

5

可以使用从dplyrgroup_bysummarise以实现期望的结果。请参阅下面的代码。

# load required package 
require(dplyr) 
# function to calculate the confidence interval 
CIfun <- function(v, probs = c(.025, .975)) { 
    quantile(boot(data = v, function(u,i) tb(u[i]), R = 999)$t, probs) 
} 
# using summarise from dplyr 
dataframe %>% group_by(x) %>% 
    summarise(n = n(), 
      proportion = tb(vec), 
      `2.5%` = CIfun(vec, .025), 
      `97.5%`= CIfun(vec, .975)) 
+0

好,就像我想要的一样工作,谢谢... – jonas 2015-02-11 08:26:35

+0

@shadow我在网上找到的最简单的例子。非常感谢,它可以用我的数据集处理。 – Docconcoct 2016-04-17 17:07:46

相关问题