You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用netdiffuseR拟合Bass模型报错:'language'无法转为double类型

问题:使用netdiffuseR拟合Bass模型时出现类型转换错误

运行代码时出现如下错误:

Error in storage.mode(temp) <- "double" : 
  'language' object cannot be coerced to type 'double

复现代码

library(netdiffuseR)

# 示例数据框
test_data <- data.frame(Time=c(2007,2008,2009,2010,2011,2012,2013,2014,2015,2016),
                        dat=c(5054,12221,22468,34817,51670,70800,94736,123650,159982,206830))

# 尝试拟合Bass模型
test_fit <- fitbass(dat ~ Time, data = test_data)

环境信息

> sessionInfo()
R version 4.2.2 (2022-10-31 ucrt)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 22621)

Matrix products: default

locale:
[1] LC_COLLATE=English_United States.utf8  LC_CTYPE=English_United States.utf8    LC_MONETARY=English_United States.utf8
[4] LC_NUMERIC=C                           LC_TIME=English_United States.utf8    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] netdiffuseR_1.22.5

loaded via a namespace (and not attached):
 [1] Rcpp_1.0.9            sna_2.7               pillar_1.8.1          compiler_4.2.2        tools_4.2.2           bit_4.0.5            
 [7] boot_1.3-28           MatchIt_4.5.0         lifecycle_1.0.3       tibble_3.1.8          lattice_0.20-45       viridisLite_0.4.1    
[13] pkgconfig_2.0.3       rlang_1.0.6           Matrix_1.5-3          igraph_1.3.5          DBI_1.1.3             cli_3.4.1            
[19] rstudioapi_0.14       parallel_4.2.2        SparseM_1.81          coda_0.19-4           withr_2.5.0           generics_0.1.3       
[25] vctrs_0.5.1           hms_1.1.2             networkDynamic_0.11.2 bit64_4.0.5           grid_4.2.2            tidyselect_1.2.0     
[31] glue_1.6.2            R6_2.5.1              fansi_1.0.3           vroom_1.6.0           tzdb_0.3.0            magrittr_2.0.3       
[37] backports_1.4.1       ellipsis_0.3.2        MASS_7.3-58.1         assertthat_0.2.1      utf8_1.2.2            network_1.18.0       
[43] crayon_1.5.2          statnet.common_4.7.0 

解答

问题出在fitbass函数的调用方式错误,它不支持dat ~ Time这种公式语法,需要直接传入累计采用量的向量,以及从0开始计数的时间索引。另外你的dat列是年度新增采用数,而Bass模型需要的是累计采用数,这也是必须修正的点。

修正步骤及代码:

library(netdiffuseR)

# 示例数据框
test_data <- data.frame(Time=c(2007,2008,2009,2010,2011,2012,2013,2014,2015,2016),
                        dat=c(5054,12221,22468,34817,51670,70800,94736,123650,159982,206830))

# 1. 计算累计采用数
test_data$cum_dat <- cumsum(test_data$dat)

# 2. 创建从0开始的时间索引(Bass模型默认时间起点为0)
test_data$t <- 0:(nrow(test_data)-1)

# 3. 正确拟合Bass模型
test_fit <- fitbass(test_data$cum_dat, t = test_data$t)

# 查看拟合结果
summary(test_fit)

关键说明

  • fitbass的第一个参数必须是累计采用量的数值向量,不支持公式传入形式
  • t参数需要是从0开始的连续时间索引,不能直接使用原始年份数值
  • 如果你的数据已经是累计采用量,可以跳过第一步的cumsum计算

内容的提问来源于stack exchange,提问作者Obed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 01:35:24