2013-03-27 2 views
3

Я получил эту ошибку для моего кодаОшибка использования t.test() в R - не хватает «у» наблюдения

Error in t.test.default(dat$Value, x[[i]][[2]]) : 
    not enough 'y' observations 

Я думаю, что причина, я получил эту ошибку, потому что я делаю т. test для данных, которые имеют только одно значение (поэтому не было бы среднего или sd) и данных, которые имеют 20 значений. Есть ли способ, которым я могу обойти это. Есть ли способ, которым я могу игнорировать данные, t имеет достаточно y наблюдений ??? как если цикл может работать ... Просьба помочь

Так что мой код, который делает t.test является

t<- lapply(1:length(x), function(i) t.test(dat$Value,x[[i]][[2]])) 

где х представляет собой данные в виде порезов, подобной

cut: [3:8) 
     Number Value 
3  15  8 
4  16  7 
5  17  6 
6  19  2.3 
this data goes on 
cut:[9:14) 
     Number Value 
7  21  15 
cut:[13:18) etc 
     Number Value 
8  22  49 
9  23  15 
10 24  13 

Как я могу игнорировать «разрезы», которые имеют только 1 значение в них, как пример выше, где в «cut [9:14]» есть только одно значение ....

ответ

3

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

Это, вероятно, самая простая модификация, хотя я не могу проверить это, как вы не предоставили образцы данных (вы могли бы dput ваши данные на ваш вопрос):

t<- lapply(1:length(x), function(i){ 
    if(length(x[[i]][[2]])>1){ 
     t.test(dat$Value,x[[i]][[2]]) 
    } else "Only one observation in subset" #or NA or something else 
    }) 

Другим вариантом был бы изменить индексы которые используются в lapply:

ind<-which(sapply(x,function(i) length(i[[2]])>1)) 
t<- lapply(ind, function(i) t.test(dat$Value,x[[i]][[2]])) 

Вот пример первого случая с искусственными данными:

x<-list(a=cbind(1:5,rnorm(5)),b=cbind(1,rnorm(1)),c=cbind(1:3,rnorm(3))) 
y<-rnorm(20) 

t<- lapply(1:length(x), function(i){ 
    if(length(x[[i]][,2])>1){ #note the indexing x[[i]][,2] 
     t.test(y,x[[i]][,2]) 
    } else "Only one observation in subset" 
    }) 

t 
[[1]] 

     Welch Two Sample t-test 

data: y and x[[i]][, 2] 
t = -0.4695, df = 16.019, p-value = 0.645 
alternative hypothesis: true difference in means is not equal to 0 
95 percent confidence interval: 
-1.2143180 0.7739393 
sample estimates: 
mean of x mean of y 
0.1863028 0.4064921 


[[2]] 
[1] "Only one observation in subset" 

[[3]] 

     Welch Two Sample t-test 

data: y and x[[i]][, 2] 
t = -0.6213, df = 3.081, p-value = 0.5774 
alternative hypothesis: true difference in means is not equal to 0 
95 percent confidence interval: 
-3.013287 2.016666 
sample estimates: 
mean of x mean of y 
0.1863028 0.6846135 


     Welch Two Sample t-test 

data: y and x[[i]][, 2] 
t = 5.2969, df = 10.261, p-value = 0.0003202 
alternative hypothesis: true difference in means is not equal to 0 
95 percent confidence interval: 
3.068071 7.496963 
sample estimates: 
mean of x mean of y 
5.5000000 0.2174829 
+0

Я отредактировал свой вопрос и добавил некоторые данные ..... Я попробовал, что вы дали мне, но я получаю ошибки, такие как Ошибка: неожиданный '{' in 't <- lapply (1: length (x), function (i) {if (length (x [[i]] [[2]]> 1) {" –

+0

К сожалению, в коде отсутствует одна скобка, я исправил код, теперь должен работать. –

Смежные вопросы