2014-03-26 5 views
0

Xt = матрица (1:30, ncol = 3) где t - период времени. Я пытаюсь суммировать от t = 1 до 10 решить (t (Xt)% *% Xt)/n). , и я использовал этот код, как показано ниже. 'Суммирование матрицы временных рядов по r

B_hat_T=matrix(NA,p,n)
for (j in 1:n) { if (j>=p) B_hat_T[,j]<-solve((t(xt[1:j,])%*%xt[1:j,])/n)}

Но это не работает. Вы не знаете, как это исправить? спасибо

ответ

0

Ваш код не очень ясен, что вы пытаетесь сделать (что такое n? P?), Но две вещи выпрыгивают из меня. Во-первых, в вашем коде вы используете xt, но в тексте вы используете Xt. Это разные вещи. Кроме того, xt, как вы определили его во введении, точно сингулярно --- вы не можете инвертировать его, используя solve. Потенциально по теме, используя %*% и solve, вероятно, не являются наиболее устойчивыми с точки зрения политики способами, которые делают эту оценку, если это действительно то, что вы пытаетесь сделать.

Во-вторых, если вы сделаете xt несингулярное

xt <- matrix(rnorm(30), ncol = 3) 

, а затем запустить

solve((t(xt[1:5, ]) %*% xt[1:5, ])/30) 

результатом является матрица размера 3x3. Вы не можете назначить это одной строке матрицы при попытке с помощью B_hat_T[l j].

Наконец, если вы пытаетесь просто получить столбцы суммы матрицы х для строк с 1 по к, что-то вроде этого:

xt <- matrix(1:30, ncol = 3) 
k <- 5 
apply(xt[1:k, ], 2, sum) 

возвращает вектор сумм столбцов xt для строк от 1 до k (в данном случае 5). Это «путь R» для этого. for и if займет намного больше времени и больше памяти для выполнения.

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