Bootstrap CI 用于数据框中列的几个变量
Bootstrap CI for several variables of column in dataframe
我想 bootstrap 置信区间来自 data.frame
的比例。我想在我的一个专栏中获得变量的结果。
我已经成功地为向量执行了 bootstrap,但不知道如何从这里将它扩展到 data.frame
。
设置阈值为 10 并查看数据中小于 10 的比例的简化示例。
矢量解:
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
执行相同的操作。
如果可能的话,我想 return "summarized" data.frame
中的结果,列 (x, sample, proportion, 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
您可以使用 dplyr
中的 group_by
和 summarise
来获得所需的结果。请参阅下面的代码。
# 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))
我想 bootstrap 置信区间来自 data.frame
的比例。我想在我的一个专栏中获得变量的结果。
我已经成功地为向量执行了 bootstrap,但不知道如何从这里将它扩展到 data.frame
。
设置阈值为 10 并查看数据中小于 10 的比例的简化示例。
矢量解:
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
执行相同的操作。
如果可能的话,我想 return "summarized" data.frame
中的结果,列 (x, sample, proportion, 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
您可以使用 dplyr
中的 group_by
和 summarise
来获得所需的结果。请参阅下面的代码。
# 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))