T-тест с бутстрапом в R

Я пытаюсь запустить t-тест с начальной загрузкой в ​​R. У меня есть выборка из 50 участников, 39 женщин. У меня есть зависимая переменная d ', и я хочу посмотреть, отличаются ли мужчины и женщины по этой переменной. Поскольку у меня всего 11 участников мужского пола, я хочу использовать t-тест с начальной загрузкой (не лучшая идея, но я видел ее в литературе).

У меня есть база данных под названием data с несколькими переменными. Итак, сначала я извлек два вектора:

dPrimeFemales <- subset(data, Gender == "F", 
                  select=c(dPrime))

dPrimeMales <- subset(data, Gender == "M", 
                        select=c(dPrime))

Затем я попробовал несколько вещей, найденных в Интернете (и здесь). Основываясь на этом сообщении, я попробовал:

set.seed(1315)
    B      <- 1000
    t.vect <- vector(length=B)
    p.vect <- vector(length=B)
    for(i in 1:B){
      boot.c <- sample(dPrimeFemales, size=nrow(dPrimeFemales), replace=T)
      boot.p <- sample(dPrimeMales, size=nrow(dPrimeMales), replace=T)
      ttest  <- t.test(boot.c, boot.p)
      t.vect[i] <- ttest$statistic
      p.vect[i] <- ttest$p.value
    }

Но там сказано:

Error: Must use a vector in `[`, not an object of class matrix.
Call `rlang::last_error()` to see a backtrace

Я также пробовал это: boot.t.test: Bootstrap t- тест

Во-первых, я не мог загрузить функции. Итак, я скопировал и запустил это:

Функция начальной загрузки

Затем я запустил это:

boot.t.test(x = dPrimeFemales, y = dPrimeMales)

Но он говорит следующее:

Error in boot.t.test(x = dPrimeFemales, y = dPrimeMales) : 
  dims [product 1] do not match the length of object [1000]
In addition: There were 50 or more warnings (use warnings() to see the first 50)

Если я использую warnings(), он говорит:

1: In mean.default(x) : argument is not numeric or logical: returning NA
2: In mean.default(y) : argument is not numeric or logical: returning NA
3: In mean.default(c(x, y)) : argument is not numeric or logical: returning NA
4: In mean.default(x) : argument is not numeric or logical: returning NA
5: In mean.default(y) : argument is not numeric or logical: returning NA

Так далее...

Чтобы быть более ясным, я имею в виду что-то вроде загрузочного t-теста в SPSS, например: введите описание изображения здесь

Я думал, это будет намного проще. Любая помощь приветствуется

Спасибо всем за ваше время.

structure(list(dPrime = c(0.60805224661517, 0.430727299295457, 
-0.177380196159658, 0.771422126383253, 0.598621304083563, 0, 
0.167894004788105, -0.336998837042929, 0.0842422708809764, -0.440748778800912, 
0.644261556974516, -0.167303467814258, 0.169695369228671, -0.251545738695235, 
0.0842422708809764, -0.0985252105020469, -0.239508275220057, 
-0.143350050535084, 0.430727299295457, 0.757969499665785, -0.282230896122292, 
-0.271053409572241, -0.090032472207662, -0.090032472207662, 0.524400512708041, 
-0.218695510362827, -0.271053409572241, 1.07035864674857, 0.262833294507352, 
0.421241107923905, -0.0836517339071291, 0.090032472207662, -0.598621304083563, 
-0.356506507919935, 0.474566187745845, 0.336998837042929, 1.35083901409173, 
-0.336998837042929, -0.443021053393661, 0.757969499665785, -0.841621233572914, 
0.167303467814258, 0.167894004788105, 0.090032472207662, -0.177380196159658, 
0.251545738695235, -0.344495842891614, -0.17280082229969, -0.440748778800912, 
0), Gender = c("F", "F", "F", "F", "F", "F", "F", "F", "M", "M", 
"F", "F", "F", "F", "F", "F", "F", "F", "M", "F", "M", "M", "F", 
"F", "F", "F", "F", "F", "F", "F", "M", "F", "F", "F", "M", "F", 
"F", "F", "F", "M", "M", "F", "F", "M", "M", "F", "F", "F", "F", 
"F")), row.names = c(NA, -50L), class = c("tbl_df", "tbl", "data.frame"
))

person Glu    schedule 09.09.2019    source источник
comment
Я не понимаю, что именно вы собираетесь запускать. Какая статистика?   -  person Roland    schedule 09.09.2019
comment
Можете ли вы поделиться структурой data? Где именно ошибка?   -  person Roman Luštrik    schedule 09.09.2019
comment
Да, t-статистика. Попробую выложить данные (пробую) ...   -  person Glu    schedule 09.09.2019
comment
Вы можете получить образец данных здесь: filehosting.org/file /details/820987/data.Rda (не знаю, есть ли лучший способ поделиться этим здесь). Кроме того, я попытался прояснить, что я имею в виду, добавив изображение анализа, которого я пытаюсь достичь, выполняемого в SPSS.   -  person Glu    schedule 09.09.2019


Ответы (1)


Вот пример использования этой функции с смоделированными данными, где вы ожидаете, что p-значение будет близко к 1. Нет необходимости заранее подбирать его подмножество и создавать промежуточные объекты.

set.seed(0)
df <- data.frame(gender = sample(c('M', 'F'), size=50, replace=T),
                 measure = runif(n=50))

boot.t.test(df[df$gender=='M', 'measure'], df[df$gender=='F', 'measure'], reps=1000)

Bootstrap Two Sample t-test


t = -0.186, p-value = 0.859
Alternative hypothesis: true difference in means is not equal to 0

$mu0 
[1] 0

$statistic
[1] -0.1863362

$alternative
[1] "two.sided"

$p.value
[1] 0.859
person Bill O'Brien    schedule 09.09.2019
comment
Привет, Билл, это выглядит великолепно, но не могли бы вы сказать, какие пакеты вам нужны? Поскольку я пробовал нечто подобное (я думаю), но получаю: Ошибка в boot.t.test (df [data $ Gender == M, measure], df [data $ Gender ==: не удалось найти функцию boot.t. test Очевидно, что мне не хватает какого-то пакета или библиотеки - person Glu; 09.09.2019
comment
Мне не удалось установить пакет tpepler / nonpar (rdrr.io/github/tpepler/nonpar/src/R/boot.t.test.R), поэтому я просто скопировал и вставил функцию в свою рабочую область. Не идеально, но достаточно, чтобы проверить это. - person Bill O'Brien; 09.09.2019
comment
Извините, я просто пробовал то, что вы предложили. Итак, вот что я пробовал: set.seed (0) boot.t.test (data [data $ Gender == 'M', 'dPrime'], data [data $ Gender == 'F', 'dPrime' ], reps = 1000) Я получаю эту ошибку: Ошибка в boot.t.test (data [data $ Gender == M, dPrime], data [data $ Gender ==: dims [product 1] не соответствует длине object [1000] Кроме того: было 50 или более предупреждений (используйте warnings (), чтобы увидеть первые 50). Это похоже на то, что я получал раньше (см. мой первоначальный пост) - person Glu; 09.09.2019
comment
Кстати, если я попробую ваш пример, он сработает. Я действительно не понимаю, почему это не работает с моими данными. - person Glu; 09.09.2019
comment
Не могу ответить, потому что filehosting.org заблокирован на моем рабочем месте. Если вы используете dput () для публикации своих данных в вопросе выше, я буду рад помочь вам в дальнейшем. Когда вы запускаете data [data $ Gender == 'M', 'dPrime'], возвращает ли он числовой вектор ожидаемой длины? - person Bill O'Brien; 09.09.2019
comment
Хорошо, я только что попробовал. Я создал новый набор данных только с dPrime и Gender, чтобы не передавать какую-либо личную информацию ... если я выполню то, что вы предложили, я получу tubbke 11x1, чего я и ожидал. dPrime для 11 мужчин. Кстати, еще раз спасибо, я очень признателен. - person Glu; 09.09.2019
comment
Думаю, я нашел проблему. Я не могу в это поверить: похоже, мои данные на самом деле не были data.frame. Если я наберу str (data), он вернет: Классы «tbl_df», «tbl» и «data.frame»: 50 набл. 27 переменных. Если я конвертирую в data.frame, то есть: dataAsDb = as.data.frame (data), то: boot.t.test (dataAsDb [dataAsDb $ Gender == 'M', 'dPrime'], dataAsDb [dataAsDb $ Gender == 'F', 'dPrime'], reps = 1000) работает ... - person Glu; 09.09.2019