Примените t.test к последовательным элементам вектора в R - PullRequest
1 голос
/ 02 апреля 2020

У меня есть вектор, который состоит из n элементов.

Мне интересно, как эффективно сделать следующее (это, в основном, вычисление с изменением):

  1. Извлечение элементов с индексами от 1 до k

  2. Извлечь элементы с индексами от k + 1 до 2k

  3. выполнить t.test для этих элементов
  4. Извлечь элементы с индексами от 2 до k + 1
  5. Извлечь элементы с индексами k + 2 до 2k + 1
  6. выполнить t.test для этих элементов ...... 7. Повторить до конца вектора.

Мне не нужно видеть значения экстракта, просто получить некоторую статистику (например, [1] $ statisti c).

Я могу сделать это с помощью al oop, но мне интересно как можно сделать это с помощью некоторых функций (например, применить). Всего наилучшего

Ответы [ 2 ]

2 голосов
/ 02 апреля 2020

Из вашего псевдокода неясно, действительно ли вы ожидали, что вектор будет иметь n = 3 * k элементов, но именно так я его запрограммировал.

set.seed(123)
x = rnorm(15)

o = 1:5
k = 5

sapply(o, function(oi){
  x1 = x[oi:(k + oi - 1)]
  x2 = x[(k + oi):(2 * k + oi)]
  t.test(x1, x2)$statistic
})

и результат равен

          t           t           t           t           t 
 0.04435004  1.28433640  1.67879015  0.11191044 -0.19398686 

Можно также разработать некоторые формулы обновления для добавления и вычитания нового элемента для каждой пары векторов в t-тесте, но это, похоже, не стоит усилий.

1 голос
/ 02 апреля 2020

Вы можете использовать sapply, для ясности здесь обернутый в функцию:

multiple_ttest <- function(vec, k)
{
  sapply(seq(length(vec) - 2 * k), function(x){
    t.test(vec[x + 1:k], vec[x + (k + 1):(2 * k)])$statistic
  })
}

multiple_ttest(rnorm(100), 20)
#>          t          t          t          t          t          t          t 
#> -0.6253586 -1.1680595 -1.2979357 -1.1051207 -1.4668645 -0.6156220 -0.2470322 
#>          t          t          t          t          t          t          t 
#> -1.2416802 -0.1763081 -0.1682269 -0.2490938  0.4569783  0.7721602  1.4383522 
#>          t          t          t          t          t          t          t 
#>  1.5530524  2.1523397  2.3221591  2.1876903  1.7248729  1.6149827  1.6919704 
#>          t          t          t          t          t          t          t 
#>  1.9747871  2.3833846  2.2826131  2.2337453  2.2225939  1.6284361  2.2067872 
#>          t          t          t          t          t          t          t 
#>  1.2447557  1.1435925  0.6731618 -0.1737223 -0.5889784 -0.7339752 -1.2202893 
#>          t          t          t          t          t          t          t 
#> -1.4936935 -1.5821069 -1.7795797 -1.6290700 -1.7760278 -1.4223367 -1.5931553 
#>          t          t          t          t          t          t          t 
#> -2.6832755 -2.7733223 -2.7710590 -3.0889778 -2.3604743 -2.3510220 -1.5456745 
#>          t          t          t          t          t          t          t 
#> -1.4098492 -0.5268468 -0.3187017  0.1878282  0.5208563  0.5656160  0.4952028 
#>          t          t          t          t 
#>  0.2005182  0.3769581  0.5093635  0.9358878

Создан в 2020-04-02 пакетом Представить (v0. 3,0)

...