2014-01-20 1 views
2

Я отправляю этот вопрос, который ссылается на статистическую проблему, однако проблема у меня есть с кодом.Использовать длину и целое число (0) для проверки условного выражения

У меня есть расчет вектора и автокорреляции ниже, для значений доверительных интервалов 95%. (Существует только одно значащее значение при t + 1) Package Quantmod.

x<-c(1,1,3,8,5,2,4,3,1,1,0,5,1,1,3,4,6,7,8,9,4,2,1) 
a<-acf(x) 
b<-a[[1]] 
c<-(b[2:length(b)]) 
posssignificance_level<-qnorm((1+0.95)/2)/sqrt(sum(!is.na(x))) 
posssignificance_level 
negsignificance_level<- -posssignificance_level 
negsignificance_level 
poscorr<-which(posssignificance_level<c) 
negcorr<-which(negsignificance_level>c) 
poscorr 
negcorr 

Я хотел бы проинструктировать отставать, если есть любое существенное значение выше/ниже 95% доверительного интервала либо в poscorr или negcorr или обоих. Я попытался использовать нижеприведенные выражения без успеха. (Я использую длину (poscorr == 0 и length (negcorr == 0), так как длина результирующего вектора равна 0, когда автокорреляция отсутствует. Результат для negcorr равен «целое число (0)»).

posautorrelation <- if(length(poscorr==0)) Lag(x,0) else Lag(x,poscorr) 
negautorrelation <- if(length(negcorr==0)) Lag(x,0) else Lag(x,negcorr) 
Error en `colnames<-`(`*tmp*`, value = "Lag.") : 
la longitud de 'dimnames' [2] no es igual a la extensión del arreglo 
Error durante el wrapup: no se puede abrir la conexión 

Я также пытаюсь

posautorrelation <- if((poscorr==integer(0)) Lag(x,0) else Lag(x,poscorr) 
Error: inesperado símbolo in "posautorrelation <- if(length(poscorr==integer(0)) Lag" 
Error durante el wrapup: no se puede abrir la conexión 

negautorrelation <- if((negcorr==integer(0)) Lag(x,0) else Lag(x,negcorr) 
Error: inesperado símbolo in "negautorrelation <- if(length(negcorr==integer(0)) Lag" 
Error durante el wrapup: no se puede abrir la conexión 

Я хотел бы знать, как я мог бы проинструктировать последние два выражения, чтобы получить две версии х. один с отставанием и один без какого-либо значения автокорреляционной с 0 лаг с использованием результат negcorr integer (0).

ответ

2

В первой части объясняется, почему which(...) expressi на возвращений integer(0)

print(negsignificance_level) 
# [1] -0.4086807 

min(c) 
# [1] -0.3432622 

which(negsignificance_level > c) 
# integer(0) 

Это я считаю, что ответ на ваш вопрос:

if length(object) == then expression1 else expression2 

posautorrelation <- if(length(poscorr) == 0) Lag(x,0) else Lag(x, poscorr) 
posautorrelation 
# [1] NA 1 1 3 8 5 2 4 3 1 1 0 5 1 1 3 4 6 7 8 9 4 2 

negautorrelation <- if(length(negcorr) == 0) Lag(x,0) else Lag(x, negcorr) 
# [1] 1 1 3 8 5 2 4 3 1 1 0 5 1 1 3 4 6 7 8 9 4 2 1 
+1

'length' может (по некоторым проблемам) вернуться в два раза. Следовательно, было бы лучше сделать 'if (isTRUE (all.equal (length (poscorr), 0)))' для учета случаев, когда они используются на длинном векторе. –

+1

благодарит за решение и добавил комментарий – Barnaby

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