【问题标题】:Markov chains in RR中的马尔可夫链
【发布时间】:2015-11-15 17:30:05
【问题描述】:

我在 R 中使用 markovchain 包和函数

mc<-markovchainFit(data)

我有一个概率矩阵mc$estimate,我想对概率进行四舍五入。我怎么做?

另一个问题:如何将该矩阵写入文本文件或 Excel?

我有这样的矩阵:

 mc$estimate
MLE Fit 
 A  22 - dimensional discrete Markov Chain with following states 
 A B C D E F G H I J K L M N O P Q R S T Y Z 
 The transition matrix   (by rows)  is defined as follows 
            A           B           C           D           E           F
A 0.468053492 0.008172363 0.028974740 0.014858841 0.023031204 0.063150074
B 0.003191489 0.590425532 0.020212766 0.019148936 0.011702128 0.102127660
C 0.004054198 0.001707031 0.817134322 0.015896725 0.004374267 0.017497066
D 0.004519774 0.006214689 0.052824859 0.505367232 0.024011299 0.035310734
E 0.005132930 0.001710977 0.005396157 0.010002632 0.698078442 0.068570676
F 0.001155435 0.001386522 0.002195326 0.001675381 0.007683642 0.903347873
G 0.004933473 0.002690985 0.014800419 0.012856929 0.020032890 0.073105098
H 0.005486028 0.004114521 0.016629522 0.022458426 0.035487742 0.053317332
I 0.007445734 0.002271580 0.020570419 0.021327612 0.031423523 0.028899546
J 0.011885111 0.003796633 0.024430505 0.021294156 0.015351601 0.056949488
K 0.008743754 0.001784440 0.022127052 0.026945039 0.021234832 0.070663812
L 0.003227759 0.003026024 0.012507565 0.014726649 0.016743998 0.052854549
M 0.007148954 0.002560819 0.013551003 0.014511310 0.015258216 0.067008109
N 0.010998878 0.002918070 0.018406285 0.025140292 0.029405163 0.073400673
O 0.003787879 0.001578283 0.003787879 0.008207071 0.006313131 0.067866162
P 0.000000000 0.000000000 0.000000000 0.007518797 0.000000000 0.007518797
Q 0.005144695 0.004501608 0.003215434 0.012861736 0.013504823 0.052733119
R 0.009460298 0.003566998 0.022797767 0.024193548 0.015973945 0.095068238

我会舍入 2 个小数,然后写入 Excel 或文本文件。怎么可能?

【问题讨论】:

  • 在此处查看舍入 stat.ethz.ch/R-manual/R-devel/library/base/html/Round.html 。为了保存,您需要将模型输出保存为数据框,然后使用“write.csv”命令。
  • 那行不通。它说:数学函数的非数字参数
  • 您必须确保将其应用于正确的事物。你必须提供更多关于你在做什么的信息。
  • 欢迎来到 SO。首先你应该阅读here关于如何提出一个好问题;一个好的问题有更好的变化需要解决,你会得到帮助。另一方面,阅读this 也不错。它解释了如何在 R 中创建一个可重现的示例。帮助用户通过为您的数据提供所需的输出以及您迄今为止尝试过的事情来帮助您。
  • 我添加更多信息。我的原始数据在文本文件中,它是一个列表字母。

标签: r data-modeling markov-chains


【解决方案1】:

mc$estimate 是以下类型的 S4 类,

# [1] "markovchain"
# attr(,"package")
# [1] "markovchain"

通过使用str,您可以查看该对象有哪些可以打印/圆形的槽,

str(mc)
# Formal class 'markovchain' [package "markovchain"] with 4 slots
#   ..@ states          : chr -----
#   ..@ byrow           : logi TRUE
#   ..@ transitionMatrix: num -----
#   .. ..- attr(*, "dimnames")=List of 2
#   .. .. ..$ : chr [1:x] ----
#   .. .. ..$ : chr [1:x] ----
#   ..@ name            : chr "MLE Fit"

由于您没有提供数据,因此您的输出会有所不同。但是您可能会看到插槽transitionMatrix 看起来像一个矩阵。让我们检查一下,

 class(mc$estimate@transitionMatrix)
 # [1] "matrix"

瞧!我们可以轻松地对矩阵进行四舍五入,

print(round(mc$estimate@transitionMatrix, digits=2))

并存储它,

write.csv(mc$esimate@transitionMatrix, file = "transition_matrix.csv", row.names = FALSE)

希望对你有帮助

【讨论】:

  • 我在 write.csv 处收到“is.data.frame(x) 中的错误:尝试从没有插槽的基本类(“NULL”)对象获取插槽“transitionMatrix” ()
  • 你使用的是什么包版本?
【解决方案2】:

这是write.csv 行中estimatemc$ 之后的错字

write.csv(mc$estimate@transitionMatrix, file = "transition_matrix.csv", row.names = FALSE)

一旦修复它就可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-15
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    • 2019-09-13
    • 1970-01-01
    • 2019-09-14
    相关资源
    最近更新 更多