Как загружать уважаемую информацию внутри субъекта? - программирование
Подтвердить что ты не робот

Как загружать уважаемую информацию внутри субъекта?

Это первый раз, когда я отправляю сообщение на этот форум, и я хочу сказать с самого начала, что я не квалифицированный программист. Поэтому, пожалуйста, дайте мне знать, если вопрос или код неясны!

Я пытаюсь получить 95% -ный доверительный интервал (CI) для взаимодействия (то есть моя тестовая статистика), выполнив загрузку. Я использую пакет "boot". Моя проблема заключается в том, что для каждого пересчета я хотел бы, чтобы рандомизация выполнялась внутри предметов, так что наблюдения от разных предметов не смешивались. Вот код для генерации dataframe, подобный моему. Как вы можете видеть, у меня есть два фактора внутри предмета ( "Num" и "Gram", и меня интересует взаимодействие между ними):

Subject = rep(c("S1","S2","S3","S4"),4)
Num     = rep(c("singular","plural"),8) 
Gram    = rep(c("gram","gram","ungram","ungram"),4)
RT      = c(657,775,678,895,887,235,645,916,930,768,890,1016,590,978,450,920)
data    = data.frame(Subject,Num,Gram,RT) 

Это код, который я использовал для получения значения эмпирического взаимодействия:

summary(lm(RT ~ Num*Gram, data=data))

Как вы можете видеть, взаимодействие между двумя моими факторами составляет -348. Я хочу получить доверительный интервал загрузки для этой статистики, который я могу создать с помощью пакета "boot":

# You need the following packages
install.packages("car") 
install.packages("MASS")
install.packages("boot")
library("car")
library("MASS")
library("boot")

#Function to create the statistic to be boostrapped
boot.huber <- function(data, indices) {
data <- data[indices, ] #select obs. in bootstrap sample
mod <- lm(RT ~ Num*Gram, data=data)
coefficients(mod)       #return coefficient vector
}

#Generate bootstrap estimate
data.boot <- boot(data, boot.huber, 1999)

#Get confidence interval
boot.ci(data.boot, index=4, type=c("norm", "perc", "bca"),conf=0.95) #4 gets the CI for the interaction

Моя проблема заключается в том, что я считаю, что рекомплексы должны генерироваться без смешивания наблюдений отдельных предметов, т.е. для создания новых образцов, наблюдения от субъекта 1 (S1) следует перетасовывать в рамках предмета 1, не смешивая их с наблюдения из предметов 2 и т.д. Я не знаю, как "загрузка" выполняет повторную выборку (я прочитал документацию, но не понимаю, как это работает)

Кто-нибудь знает, как я могу убедиться, что процедура передискретизации, используемая "загрузкой", относится к информации об уровне предмета?

Большое спасибо за вашу помощь/совет!

4b9b3361

Ответ 1

Просто измените свой вызов на boot() следующим образом:

data.boot <- boot(data, boot.huber, 1999, strata=data$Subject)

?boot предоставляет это описание аргумента strata=, который выполняет именно то, что вы просите:

strata: целочисленный вектор или фактор, определяющий страты для          проблемы с несколькими образцами. Это может быть указано для любого          симуляция, но игнорируется, когда "sim =" параметрический ". когда          'Strata предоставляется для непараметрического бутстрапа,          симуляции выполняются в пределах указанных слоев.


Примечание:

Чтобы подтвердить, что он работает по вашему желанию, вы можете вызвать debugonce(boot), выполнить вызов выше и пройти через отладчик до объекта i (в строках которого содержатся индексы, используемые для повторной выборки строк data, чтобы создать каждый повторный выбор бутстрапа), а затем взгляните на него.

debugonce(boot)
data.boot <- boot(data, boot.huber, 1999, strata=data$Subject)
# Browse[2]>
## [Press return 34 times]
# Browse[2]> head(i)
#      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14]
# [1,]    9   10   11   16    9   14   15   16    9     2    15    16     1    10
# [2,]    9   14    7   12    5    6   15    4   13     6    11    16    13     6
# [3,]    5   10   15   16    9    6    3    4    1     2    15    12     5     6
# [4,]    5   10   11    4    9    6   15   16    9    14    11    16     5     2
# [5,]    5   10    3    4    1   10   15   16    9     6     3     8    13    14
# [6,]   13   10    3   12    5   10    3    4    5    14     7    16     5    14
#      [,15] [,16]
# [1,]     7     8
# [2,]    11    16
# [3,]     3    16
# [4,]     3     8
# [5,]     7     8
# [6,]     7    12

(Вы можете ввести Q, чтобы оставить отладчик в любое время.)