我有这段代码可以从重复的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个值的每个像元中每个值的转移概率。
先谢谢您, 问候
答案 0 :(得分:0)
假设您的excel工作表中的以下数据从A1
的位置X
开始:
如果要将两个表放在不同的位置,请在宏中使用以下新位置修改以下变量:
startRowNumX, startColNumX, startRowNumP, startColNumP
请注意,矩阵未填充0和1,因为您没有在示例中添加示例数据
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首先搜索矩阵的大小,然后应用过渡。