После этого вопроса: Transition matrixR: добавить недостающие строки не используется для контура
Мы используем его установки:
#Please use the setup in the following **EDIT** section.
#df = data.frame(cusip = paste("A", 1:10, sep = ""), xt = c(1,2,3,2,3,5,2,4,5,1), xt1 = c(1,4,2,1,1,4,2,2,2,5))
cusip xt xt1
1 A1 1 1
2 A2 2 4
3 A3 3 2
4 A4 2 1
5 A5 3 1
6 A6 5 4
7 A7 2 2
8 A8 4 2
9 A9 5 2
10 A10 1 5
Согласно ответам на этот пост, мы можем получить матрицу перехода следующим образом:
res <- with(df, table(xt, xt1)) ## table() to form transition matrix
res/rowSums(res) ## /rowSums() to normalize by row
# xt1
# xt 1 2 4 5
# 1 0.5000000 0.0000000 0.0000000 0.5000000
# 2 0.3333333 0.3333333 0.3333333 0.0000000
# 3 0.5000000 0.5000000 0.0000000 0.0000000
# 4 0.0000000 1.0000000 0.0000000 0.0000000
# 5 0.0000000 0.5000000 0.5000000 0.0000000
Мы замечаем, что нет колонки 3, потому что в момент времени t + 1 нет состояния 3. Однако в математике матрица перехода должна быть квадратной. Для этой ситуации нам все еще нужен столбец 3, где [3,3] = 1 и другие элементы = 0 (правило для любого отсутствующего столбца n или отсутствующей строки n, мы устанавливаем [n, n] = 1 и другие элементы в этой строке/колонке = 0), которая выглядит следующим образом:
# xt1
# xt 1 2 3 4 5
# 1 0.5000000 0.0000000 0.0000000 0.0000000 0.5000000
# 2 0.3333333 0.3333333 0.0000000 0.3333333 0.0000000
# 3 0.5000000 0.5000000 1.0000000 0.0000000 0.0000000
# 4 0.0000000 1.0000000 0.0000000 0.0000000 0.0000000
# 5 0.0000000 0.5000000 0.0000000 0.5000000 0.0000000
Могу ли я достичь этого, не нажимая беспорядочный цикл? Спасибо.
EDIT: Пожалуйста, используйте этот набор данных вместо:
df = data.frame(cusip = paste("A", 1:10, sep = ""), xt = c(2,2,3,2,3,5,2,4,5,4), xt1 = c(1,4,2,1,1,4,2,3,2,5))
cusip xt xt1
1 A1 2 1
2 A2 2 4
3 A3 3 2
4 A4 2 1
5 A5 3 1
6 A6 5 4
7 A7 2 2
8 A8 4 3
9 A9 5 2
10 A10 4 5
теперь мы имеем матрицу перехода следующим образом:
res <- with(df, table(xt, xt1))
res/rowSums(res)
xt1
xt 1 2 3 4 5
2 0.50 0.25 0.00 0.25 0.00
3 0.50 0.50 0.00 0.00 0.00
4 0.00 0.00 0.50 0.00 0.50
5 0.00 0.50 0.00 0.50 0.00
Обратите внимание, что строка 1 отсутствует. Теперь я хочу новую строку 1, в которой [1,1] = 1 и другие элементы = 0 (так что эта строка суммируется до 1). Получить что-то вроде:
xt1
xt 1 2 3 4 5
1 1.00 0.00 0.00 0.00 0.00
2 0.50 0.25 0.00 0.25 0.00
3 0.50 0.50 0.00 0.00 0.00
4 0.00 0.00 0.50 0.00 0.50
5 0.00 0.50 0.00 0.50 0.00
Как я могу достичь этого (добавьте недостающую строку)?
Ваши 'xt' и' xt1' должны быть факторами с соответствующими «уровнями», тогда 'table' будет включать в себя даже отсутствующие уровни, а построение матрицы будет hunky-dory (или почти так). Эти вопросы и ответы могут быть полезны: http://stackoverflow.com/questions/1617061/including-missing-values-in-table-results-in-r – Frank
@frank. Проблема заключается в том, что 'xt1' не имеет уровня 3, который является состоянием 3, в 'df', но нам все равно нужно принять это во внимание, поэтому мне нужен столбец 3. – Natalia
@Natalia frank означает, что это' с (df, table (xt, factor (xt1, levels = 1: 5))) ', хотя было бы лучше определить коэффициент/уровни в кадре данных – rawr