У меня есть формула R для создания матрицы вероятности перехода, которую я хочу реализовать в Excel - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть этот код для генерации матрицы вероятности перехода из последовательности, повторяющейся от 1 до 12, изображающей продажи.

Как я могу реализовать этот код в Excel, используя формулу

У меня нет опыта работы с VBA, и я попробовал его в Excel, но не смог

x <- e$Range
p <- matrix(nrow = 12, ncol = 12, 0)
for (t in 1:(length(x) - 1)) p[x[t], x[t + 1]] <- p[x[t], x[t + 1]] + 1
for (i in 1:12) p[i, ] <- p[i, ] / sum(p[i, ])
p

Вероятность перехода каждого значения в каждой ячейке из этих 12 значений.

Заранее спасибо, Привет

1 Ответ

0 голосов
/ 10 апреля 2019

Предполагая, что в вашем листе Excel есть следующие данные, начиная с позиции A1 для X:

Если вы хотите разместить две таблицы в разных позициях, измените следующие переменные в макросе с новыми позициями: startRowNumX, startColNumX, startRowNumP, startColNumP

Обратите внимание, что matix заполнен 0 и 1, потому что вы не поместили данные для примера в свой пост

enter image description here Вот способ достичь того, что вы хотите сделать с помощью макроса:

Sub TransitonProbabilityMatrix()
    Dim startRowNumX, startColNumX, startRowNumP, startColNumP, sizeMatrix As Integer
    startRowNumX = 1
    startColNumX = 1
    startRowNumP = 3
    startColNumP = 1

    sizeMatrix = startColNumX
    While (Not IsEmpty(Cells(startRowNumX, sizeMatrix)))
        sizeMatrix = sizeMatrix + 1
    Wend
    sizeMatrix = sizeMatrix - startColNumX

    For i = startColNumX + 1 To startColNumX + sizeMatrix - 2
        Cells(Cells(startRowNumX, i) + startRowNumP, Cells(startRowNumX, i + 1) + startColNumP) = Cells(Cells(startRowNumX, i) + startRowNumP, Cells(startRowNumX, i + 1) + startColNumP) + 1
    Next

    For i = startRowNumP + 1 To startRowNumP + sizeMatrix - 1
        For j = startColNumP + 1 To startColNumP + sizeMatrix - 1
            Cells(i, j) = Cells(i, j) / WorksheetFunction.Sum(ActiveSheet.Range(Cells(i, startColNumP + 1), Cells(i, startColNumP + sizeMatrix)))
        Next
    Next
End Sub

Этот Sub сначала ищет размер матрицы, а после применяет переход.

...