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