我有一个具有20个不同样本ID的数据表。现在,我想使用固定的ID分布随机减小样本大小,这意味着我想随机绘制,比如说'A'中有7个值,而'B'中有5个值,所以我的data.table有12行而不是20,然后构建我生成的列的平均值。现在,我想通过自举将其重复100次,看看平均值是否有所不同,所以我想对它进行一些统计,例如sd,mean等。
背景是我有一个较小的样本集和一个较大的样本集。我想减少较大的样本集,以评估较小样本集的准确性。我对R相当陌生,感谢您的帮助。谢谢
data <- data.table(Sample = c('A','A','A','A','A','A','A','A','A','A','A','B','B','B','B','B','B','B','B','B','B','B'),
weight=rnorm(1:22),
height=rnorm(1:22))
# I want to draw randomly 7 values out of A and 5 values out of B and than get the mean of this new df and do that whole step 100 times
#to again build the mean over all 100 replicates
set.seed(4561)
new_df <- data %>%
group_by(Sample) %>%
nest() %>%
mutate(n = c(7,5)) %>%
mutate(samp = map2(data, n, sample_n)) %>%
select(Sample, samp) %>%
unnest() %>%
mutate(diff.height.weight = height-weight) %>%
mutate(means = mean(diff.height.weight))%>%
bootstraps(means, times=100)
答案 0 :(得分:0)
我认为您对此太想了。首先,R是基础包和贡献包的广阔范围。相同的函数名称可以并且确实存在于不同的程序包中。您需要告诉我们您使用library()函数加载了哪些软件包,否则我们将在没有大量试验和错误的情况下无法复制您的代码。如果我理解正确,您想从两个样本中随机选择值,将它们组合起来并计算平均值,然后执行100次。首先创建数据:
data <- data.frame(Sample = rep(c('A', 'B'), each=11), weight=rnorm(22),
height=rnorm(22))
data$diff <- data$height - data$weight
str(data)
# 'data.frame': 22 obs. of 4 variables:
# $ Sample: Factor w/ 2 levels "A","B": 1 1 1 1 1 1 1 1 1 1 ...
# $ weight: num 0.5324 -0.0905 0.1565 -0.7373 -0.2013 ...
# $ height: num -0.3654 0.8166 -0.0606 -0.5014 0.9261 ...
# $ diff : num -0.898 0.907 -0.217 0.236 1.127 ...
我只是通过使用数据框来保持简单。 rnorm()函数只需要知道要创建多少个值,就不需要向量。我们也只需计算一次差异,并将它们与其他信息一起存储在数据框中。
现在,我们需要确定哪些值是A,哪些值是B:
rows <- seq_along(data$diff)
a <- rows[data$Sample=="A"]
b <- rows[data$Sample=="B"]
要绘制样本,我们只需从行号中选择:
set.seed(42)
smp <- c(sample(a, 7), sample(b, 5))
# smp <- c(sample(a, 7, replace=TRUE), sample(b, 5, replace=TRUE))
注释掉的行会绘制带有替换的样本,这通常是自举的,因此您可能希望这么做。现在我们计算样本的平均值:
mn <- mean(data$diff[smp])
mn
# [1] -0.05161422
最后,我们执行了100次:
mns <- replicate(100, mean(data$diff[c(sample(a, 7), sample(b, 5))]))
# mns <- replicate(100, mean(data$diff[c(sample(a, 7, replace=TRUE),
sample(b, 5, replace=TRUE))]))
mean(mns)
# [1] 0.2700163
sd(mns)
# [1] 0.2819093
quantile(mns)
# 0% 25% 50% 75% 100%
# -0.41813426 0.09958492 0.26071086 0.45378608 0.94693304