Я пытаюсь выполнить иерархическую загрузку, чтобы получить некоторые примерные средства из большого набора данных с вложенной структурой данных.
У меня есть набор данных, аналогичный этому:
ball <- c(1:13)
box <- c('1', '1', '1', '1', '2', '2', '2',
'3', '3', '3', '3', '3', '3')
triangles <- c(1,0,1,3,1,1,2,2,0,1,1,0,4)
df <- data.frame(cbind(ball, box, triangles))
df
--
ball box triangles
1 1 1
2 1 0
3 1 1
4 1 3
5 2 1
6 2 1
7 2 2
8 3 2
9 3 0
10 3 1
11 3 1
12 3 0
13 3 4
И идея состоит в том, что есть три коробки, каждая с количеством шаров в них.На каждом шаре есть несколько треугольников, так что он выглядит примерно так:
Моя цель здесь - с помощью начальной загрузки оценить среднее количество треугольников на каждоммяч, контролируя, в каком ящике находится шарик.
Я хочу, чтобы симуляция производила выборку с заменами 10 000 раз из ящиков, каждый раз случайным образом вытаскивая ящик, а затем случайным образом отбирая шарики n раз с заменой, гдеn - количество шаров в коробке (т. е. если выбрана коробка 1, то симуляция случайным образом выберет эти четыре шара четыре раза, получая любое количество ответов, например, шар 1, шар 1, шар 3, шар4).
Я хочу, чтобы он затем вычислил среднее число треугольников на выбранных шариках, сохранил это значение и затем сэмплировал новый прямоугольник, повторив таким образом процесс.
До сих пор я пытался использовать метод rsample (описанный здесь: https://www.r -bloggers.com / bootstrapping-clustertered-data / ) примерно так:
#we need to sample groups aka boxes from
#the dataframe so use list-columns in
#tibbles
library(tidyverse)
library(tibble)
library(rsample)
Test <- df %>% nest(-box)
head(Test)
#now use bootstraps on this new tibble to
#sample by ID
set.seed(002)
testbs <- bootstraps(Test, times = 10)
testbs
#let's look at one of the bootstrap
#samples
as_tibble(testbs$splits[[1]]) %>% head()
#we can unnest the tibble and assess the
#averages by box
bs_avgtri<- map(testbs$splits,
~as_tibble(.) %>% unnest() %>%
group_by(box) %>%
summarize(mean_tri =
mean(triangles))) %>%
bind_rows(.id = 'boots')
bs_avgtri
Однако, я думаю, что это неправильно из-за того, как я вкладываю данные.Кроме того, результаты, которые я получаю, не имеют смысла, часто отображая несколько уровней начальной загрузки.Поэтому я склонен думать, что все идет не так, но я также не уверен, как на самом деле разобраться в том, что делают разные функции.
Я также знаю, что подход, который я заимствую, на самом деле не предназначен для того, что я делаю, я пытаюсь придумать способ сделать это, и я не думаю, что это делает то, что я делаюМне нужно это сделать.
Единственный другой способ, которым я могу подумать, это написать пару вложенных в циклы, но я не силен с циклами for в R, и я уверен, что есть лучшеепуть.
Если у кого-нибудь есть понимание этого, я был бы очень очень благодарен !!!!