R中矩阵到马尔可夫转移矩阵的转换

R中矩阵到马尔可夫转移矩阵的转换,r,markov-chains,R,Markov Chains,我有一个矩阵mat,其值介于0和1之间(因此可能是概率),如下所示: > t <- c(22, 65, 37, 84, 36, 14, 9, 19, 5, 49) > x <- t/max(t) > mat <- x%*%t(x) 这不是我想要的。我要求每个元素具有不同的值,但我不确定如何做到这一点。任何建议,谢谢 为什么先生成矩阵y,然后再生成矩阵z 你用行和除法的想法是正确的,但我认为问题出在你原来的矩阵中,因为这样做: mat<-matrix(r

我有一个矩阵mat,其值介于0和1之间(因此可能是概率),如下所示:

> t <- c(22, 65, 37, 84, 36, 14, 9, 19, 5, 49)
> x <- t/max(t)
> mat <- x%*%t(x)

这不是我想要的。我要求每个元素具有不同的值,但我不确定如何做到这一点。任何建议,谢谢

为什么先生成矩阵
y
,然后再生成矩阵
z

你用行和除法的想法是正确的,但我认为问题出在你原来的矩阵中,因为这样做:

mat<-matrix(runif(100),10,10)
mat2<-mat/rowSums(mat)
rowSums(mat2)
 [1] 1 1 1 1 1 1 1 1 1 1

mat在
mat
中不能有simmetric矩阵。试试这个:

n <- 10
mat <- matrix(runif(n**2),n)
mat <- mat/rowSums(mat)

n您可以使用
runif
填充矩阵,然后迭代Sinkhorn-Knopf算法(如第3页顶部所述)将收敛到双随机(马尔可夫)矩阵。

您可以使用symmetrix矩阵。试验垫
mat<-matrix(runif(100),10,10)
mat2<-mat/rowSums(mat)
rowSums(mat2)
 [1] 1 1 1 1 1 1 1 1 1 1
n <- 10
mat <- matrix(runif(n**2),n)
mat <- mat/rowSums(mat)