Вычисление t-критерия с применением (по строкам) возвращает данные, по существу, постоянные

#r

Вопрос:

Я пытаюсь использовать t-тест только с двумя значениями:

1 и. n

Это работает:

 a <- c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
     8.97, 8.97, 8.97, 8.97, 8.97, 8.97, 8.97, 8.97, 8.97, 8.97, 8.97, 8.97, 8.97, 8.97, 8.97)
 

или

 a <- rep(c(1, 8.97), each = 15)
 

и:

 t.test(x = a, mu = 2.33, alternative = "greater")

    One Sample t-test

data:  a
t = 3.5879, df = 29, p-value = 0.0006046
alternative hypothesis: true mean is greater than 2.33
95 percent confidence interval:
 3.727653      Inf
sample estimates:
mean of x 
    4.985 
 

Верно, но:

 variavel <- seq(from = 1, to = 9, by = .01)

df <- data.frame(fix1 = 1, fix2 = 1, fix3 = 1, fix4 = 1, fix5 = 1, fix6 = 1, fix7 = 1, fix8 = 1, fix9 = 1, fix10 = 1, fix11 = 1, fix12 = 1, fix13 = 1, fix14 = 1, fix15 = 1, 
               ge1 = variavel, ge2 = variavel, ge3 = variavel, ge4 = variavel, ge5 = variavel, ge6 = variavel, ge7 = variavel, ge8 = variavel, ge9 = variavel, ge10 = variavel, ge11 = variavel, ge12 = variavel, ge13 = variavel, ge14 = variavel, ge15 = variavel
               )
 

Когда я перейду к расчету теста для каждой строки и получу p-value ,

 apply(X = df, MARGIN = 1, FUN = function(x) {
  t.test(x = x, mu = 2.33, alternative = "greater")$p.value
})    
 

это дает мне ошибку:

Ошибка в t.тест.по умолчанию(x = x, mu = 2,33) : данные по существу постоянны

Что происходит?

Ответ №1:

Ваша первая строка инвариантна, и поскольку это ошибка, остальные данные никогда не проверяются.

 table(unlist(df[1,]))
#  1 
# 30 
 

У вас есть два варианта:

  1. Опустите строку 1 в своих расчетах:
     head(apply(X = df[-1,], MARGIN = 1, FUN = function(x) {
      t.test(x = x, mu = 2.33, alternative = "greater")$p.value
    }))
    # 2 3 4 5 6 7 
    # 1 1 1 1 1 1 
     
  2. Поймай его внутри петли:
     head(apply(X = df, MARGIN = 1, FUN = function(x) {
      tryCatch(t.test(x = x, mu = 2.33, alternative = "greater")$p.value, 
               error = function(e) NA_real_)
    }))
    # [1] NA  1  1  1  1  1