我有一个R公式,用于制作要在Excel中实现的转移概率矩阵

时间:2019-04-10 13:43:18

标签: r excel vba excel-formula markov-chains

我有这段代码可以从重复的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 :(得分:0)

假设您的excel工作表中的以下数据从A1的位置X开始:

  

如果要将两个表放在不同的位置,请在宏中使用以下新位置修改以下变量:startRowNumX, startColNumX, startRowNumP, startColNumP

     

请注意,矩阵未填充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首先搜索矩阵的大小,然后应用过渡。