如果状态空间大小超过27,则R封装VLMC死亡

如果状态空间大小超过27,则R封装VLMC死亡,r,markov-chains,R,Markov Chains,我使用VLMC来拟合一些马尔可夫模型,当字母表大小达到28时,它就消失了。 我认为这是因为默认情况下使用了字母表中的单个字母,但它的行为与“code1char=FALSE”相同。对于我来说,真实数据和这个假例子都是如此 library(VLMC) # works fine ins <- sample(seq(1,27,1),50000,replace=T) vlmc(ins, dump = 1,threshold.gen = 2, debug = TRUE) #core dump in

我使用VLMC来拟合一些马尔可夫模型,当字母表大小达到28时,它就消失了。 我认为这是因为默认情况下使用了字母表中的单个字母,但它的行为与“code1char=FALSE”相同。对于我来说,真实数据和这个假例子都是如此

library(VLMC)

# works fine
ins <- sample(seq(1,27,1),50000,replace=T)
vlmc(ins, dump = 1,threshold.gen = 2, debug = TRUE)

#core dump
ins <- sample(seq(1,28,1),50000,replace=T)
vlmc(ins, dump = 1,threshold.gen = 2, debug = TRUE)
库(VLMC)
#很好
ins作为VLMC的维护者,
我可以告诉你,VLMC最长的待办事项之一是提高目前内置的26个限制,因为最大字母表大小应该提高

当然,对于较大的字母表,我不会给出错误消息,而是将内容传递给C,并且不在那里进行检查,这是一个错误。 VLMC的下一个版本将不再为此设置seg.fault

然而,我还不确定我是否会有时间允许一个相当大的字母表。。。。 当然我很乐意接受补丁。。。这是免费的开源软件

致以最良好的祝愿,
Martin Maechler,苏黎世联邦理工大学[/P]听起来像是一封电子邮件给<代码>维护者(VLMC)(假设这不是在函数中记录的)。R版本2.150(2012-03-30)版权(C)2012统计计算基础ISBN 3-900051-07- 0平台:如果你仔细看,X86Y64-APPL-DARWIN 93.0/X86Y64(64位),您将看到| X |=27也不太合适。目前的上限实际上是26。我们看到的信很少。。但是,是的,几年后,我同意这是太懒惰的编程((“没有人会使用更大的状态空间”…多么愚蠢的希望!))谢谢!天真地说,这似乎是一个小小的改变。好吧,正如我私下给你写的那样,非常小的变化只会增加最大大小(并消耗内存,因此小字母表的速度)。真正的解决办法是多做点工作。再次感谢马丁。我会考虑一下的。我的第一个想法是提供一个开关,它可以执行“哑”操作,并将最大大小增加到用户指定的级别。当使用该选项时,可能会有大量关于小字母的性能影响的警告。
library(VLMC)

sc <- 10
amp <- 13
x <- round(amp*sin(seq(0,2*sc*pi,0.01)))
x <- amp + x + rpois(NROW(x),1)
length(table(x))
length(x)

vlmc(x, dump = 1,threshold.gen = 2, debug = TRUE)

vlmc: Alpha = 'abcdefghijklmnopqrstuvwxyzNANANANANA' ; |X| = 31
vlmc: ctl.dump =  4 11 
vlmc: n = |data| = 6284, cutoff{prune} = 21.8865, threshold{gen} = 2
vlmc: |alphabet| = 31, alphabet = abcdefghijklmnopqrstuvwxyzNA
generating... 
*** caught segfault ***
  address 0x0, cause 'memory not mapped'

Traceback:
  1: .C("vlmc_p", data = Data, n = n, threshold.gen = as.integer(threshold.gen),     cutoff.prune = as.double(cutoff.prune), alpha.len = as.integer(alpha.len),     alpha = as.character(Alpha), debug = as.integer(as.logical(debug)),     dump.flags = as.integer(c(dump, ctl.dump)), size = integer(4),     PACKAGE = "VLMC")
2: vlmc(x, dump = 1, threshold.gen = 2, debug = TRUE)