运行PYMC3时在R中出现网状故障

运行PYMC3时在R中出现网状故障,r,R,作为学习更多关于贝叶斯建模/学习使用网状软件包的一个强制功能,我一直在尝试复制R(原文)中的“黑客的贝叶斯方法”练习。然而,当尝试运行MCMC时,我得到了一个TypeError,但是我对PYMC3或Networkite不够熟悉,不知道错误发生在哪里。我在下面列出了我的问题的重复: Reprex 库(网状) 图书馆(readr) py_call_impl(可调用,dots$args,dots$keywords)中的pm错误:TypeError:“float”对象不能解释为整数 #> #>详细回

作为学习更多关于贝叶斯建模/学习使用网状软件包的一个强制功能,我一直在尝试复制R(原文)中的“黑客的贝叶斯方法”练习。然而,当尝试运行MCMC时,我得到了一个TypeError,但是我对PYMC3或Networkite不够熟悉,不知道错误发生在哪里。我在下面列出了我的问题的重复:

Reprex

库(网状)
图书馆(readr)
py_call_impl(可调用,dots$args,dots$keywords)中的pm错误:TypeError:“float”对象不能解释为整数
#> 
#>详细回溯:
#>文件“C:\Users\Josh\miniconda3\lib\site packages\pymc3\sampling.py”,第439行,在示例中
#>跟踪=\u mp\u样本(**样本参数)
#>文件“C:\Users\Josh\miniconda3\lib\site packages\pymc3\sampling.py”,第979行,在\u mp\u sample中
#>战略设置(绘制+调整、idx+链、步骤统计\u数据类型)
#>文件“C:\Users\Josh\miniconda3\lib\site packages\pymc3\backends\ndarray.py”,第199行,在安装程序中
#>dtype=self.var\u dtypes[varname])
由(v0.3.0)于2020年4月27日创建

sessionInfo()
#>R版本4.0.0(2020-04-24)
#>平台:x86_64-w64-mingw32/x64(64位)
#>在以下环境下运行:Windows 10 x64(内部版本18363)
#> 
#>矩阵乘积:默认值
#> 
#>区域设置:
#>[1]LC_COLLATE=英语_美国1252
#>[2]LC_CTYPE=英语_美国1252
#>[3]信用证金额=英国/美国1252
#>[4]LC_NUMERIC=C
#>[5]LC_时间=英语_美国1252
#> 
#>附加基本包:
#>[1]统计图形设备GRUTILS数据集方法库
#> 
#>其他随附包裹:
#>[1]readr_1.3.1网状结构_1.15
#> 
#>通过命名空间加载(未附加):
#>[1]Rcpp_1.0.4.6 knitr_1.28 Magritr_1.5 hms_0.5.3
#>[5]晶格_0.20-41 R6_2.4.1 rlang_0.4.5 fansi_0.4.1
#>[9]stringr_1.4.0 highr_0.8工具_4.0.0网格_4.0.0
#>[13]xfun_0.13 cli_2.0.2 htmltools_0.4.0省略号_0.3.0
#>[17]资产负债表0.2.1 yaml 2.2.1摘要0.6.25 TIBLE 3.0.0
#>[21]生命周期_0.2.0蜡笔_1.3.4矩阵_1.2-18 vctrs_0.2.4
#>[25]卷曲度\u 4.3胶水\u 1.4.0评估\u 0.14标记\u 2.1
#>[29]stringi_1.4.6支柱_1.4.3编译器_4.0.0 jsonlite_1.6.1
#>[33]pkgconfig_2.0.3

我也很感兴趣,面临着同样的问题。在您的情况下,我甚至尝试替换以下行:
count\u data=np$array(txtdata$X1,dtype='int')

但它仍然返回相同的错误

即使我将所有整数变量替换为实际整数,它仍然会将错误返回给我。例如,代码如下:

model = pm$Model()

with(model, {
  alpha = 1.0 / np$mean(c(13L, 24L, 8L, 24L, 7L, 35L, 14L, 11L))
  
  #Define the Two lambda parameters with hyperparameter alpha
  lambda_1 = pm$Exponential("lambda_1", alpha)
  lambda_2 = pm$Exponential("lambda_2", alpha)
  
  #Set Priors for Tau as a Uniform Variable
  tau = pm$DiscreteUniform("tau", lower=0, upper= 7L) #n_count_data - 1)
  
  #Create an Array of Different Switch Point Varaibles
  idx = np$arange(8L) # n_count_data) # Index
  #Create new random variable lambda with our checkpoint
  
  lambda_ = pm$math$switch(tt$gt(tau, idx), lambda_1, lambda_2)
  
  #Observation combines the lambda variable with the actual data
  observation = pm$Poisson("obs", lambda_, observed=c(13L, 24L, 8L, 24L, 7L, 35L, 14L, 11L))
  
  step = pm$Metropolis()
  trace_tm = pm$sample(10000, tune=5000,step=step)
  
})
这让我相信这可能与网状结构如何在numpy阵列之间来回转换有关

编辑: 当我更改代码以使用函数networkite::np_array添加所有内容时,问题现在切换到维度而不是数据类型(float vs int):

count_data = np_array(txtdata$X1, dtype = 'int')
n_count_data = length(count_data)

model = pm$Model()

with(model, {
  alpha = 1.0 / np$mean(count_data)
  
  #Define the Two lambda parameters with hyperparameter alpha
  lambda_1 = pm$Exponential("lambda_1", alpha)
  lambda_2 = pm$Exponential("lambda_2", alpha)
  
  #Set Priors for Tau as a Uniform Variable
  tau = pm$DiscreteUniform("tau", lower=0, upper= np_array(n_count_data - 1, dtype = 'int'))
  
  #Create an Array of Different Switch Point Varaibles
  idx = np_array(np$arange(n_count_data), dtype = 'int') # Index
  #Create new random variable lambda with our checkpoint
  
  lambda_ = pm$math$switch(tt$gt(tau, idx), lambda_1, lambda_2)
  
  #Observation combines the lambda variable with the actual data
  observation = pm$Poisson("obs", lambda_, observed=count_data)
  
  step = pm$Metropolis()
  trace_tm = pm$sample(10000, tune=5000,step=step)
  
})