楼主: crazygod
3922 10

[问答] colMeans函数求助 [推广有奖]

  • 2关注
  • 0粉丝

已卖:6份资源

副教授

2%

还不是VIP/贵宾

-

威望
0
论坛币
1334 个
通用积分
23.0119
学术水平
0 点
热心指数
4 点
信用等级
0 点
经验
886 点
帖子
286
精华
0
在线时间
806 小时
注册时间
2005-11-3
最后登录
2025-4-28

楼主
crazygod 在职认证  发表于 2022-5-19 18:06:26 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
# Initialization
rm(list=ls())
library(stochvol)
set.seed(1000) # for replication
options(digits=17)
vt   = read.table('vft2014.txt',sep = '\t')
T    = dim(vt)[1]
N    = dim(vt)[2]

for (i in 1:N){
        if(min(log(vt[,i]^2))== -Inf){
                vt[,i] = vt[,i] + 0.00001 #offset to avoid taking log of zero
        }
}

# Run MCMC algorithm and store draws
S    = 50000
burn = 50000
m    = matrix(0,T+3,N)
g    = matrix(0,3,N)
for (i in 1:N){
        draws  = svsample(vt[,i],draws=S,burnin=burn,quiet=TRUE,thinpara=10,thinlatent=10)
        all    = cbind(draws$para,draws$latent)
        m[,i]  = colMeans(all)
        g[,i]  = geweke.diag(draws$para)$z
        name   = sprintf('svfdraws%d.txt',i)
#        write(t(all),file=name,ncolumn=dim(all)[2])
}

Error in colMeans(all) : 'x'必需为数值



将循环语句改为也不行

for (i in 1:N){

       draws  =svsample(vt[,i],draws=S,burnin=burn,quiet=TRUE,thinpara=10,thinlatent=10)

       all    =cbind(draws$para,draws$latent)

find.numeric=sapply(all, is.numeric)

       m[,i]  = colMeans(all[,find.numeric])

       g[,i]  =geweke.diag(draws$para)$z

       name   =sprintf('svfdraws%d.txt',i)

#     write(t(all),file=name,ncolumn=dim(all)[2])


}



Error in colMeans(all[,find.numeric]) :
  'x'必需是阵列,而且至少得有两个维度


求大神指教


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:colMeans函数 means mean ans LME

沙发
llb_321 在职认证  发表于 2022-5-21 08:11:24
先不用改代码,用str(all)检查all的数据结构和类型,看看svsample的合并结果到底是不是numeric
已有 1 人评分论坛币 收起 理由
cheetahfly + 10 热心帮助其他会员

总评分: 论坛币 + 10   查看全部评分

藤椅
李宜芳 在职认证  发表于 2022-5-31 00:23:16
求问楼主解决问题了吗?怎么解决的呀?{{{(>_<)}}}&#128591;

板凳
吨吨g 发表于 2022-10-10 22:45:46
楼主搞定了吗?我也是同样的问题

报纸
abelus 发表于 2022-10-11 09:42:11
draws  = svsample(vt[,i],draws=S,burnin=burn,quiet=TRUE,thinpara=10,thinlatent=10)
all    = cbind(draws$para, draws$latent)
上面代码中的cbind的参数,draws$para和draws$latent,mcmc.list的数据类型;用cbind后,不是一个matrix或者data.frame这种矩阵形式。
可通过需要,预处理下这两个对象。
比如cbind(draws$para[[1]], draws$latent[[1]])之类的

如果要提取mcmc对象的信息,不妨试一试
summary(draws)这种现成的函数。

地板
abelus 发表于 2022-10-11 14:27:00
for (i in 1:N){
        if(min(log(vt[,i]^2))== -Inf){
                vt[,i] = vt[,i] + 0.00001 #offset to avoid taking log of zero
        }
}

如果vt是各一个矩阵(或似矩阵的类型)
vt[vt < 1e-10] <- 1e-5 + vt[vt < 1e-10]
这种写法一行可以替代,表达更清晰自然点。

7
为吃消得人憔悴 发表于 2022-11-11 17:50:42
改为:
all    = cbind(draws$para[[1]][,-(4:5)],draws$latent[[1]])

8
软柿子w 学生认证  发表于 2023-5-18 17:09:53
吨吨g 发表于 2022-10-10 22:45
楼主搞定了吗?我也是同样的问题
姐妹解决了吗我也是一样的呜呜

9
test_1770 在职认证  发表于 2023-11-2 10:55:29
嘛~
如果你是在使用Measuring Uncertainty: - Kyle Jurado, Sydney Ludvigson and Serena Ng提供的代码时遇到的这个问题,那么你可以试试如下解决方案,我自己试了没问题(弱弱地吐槽一下各程序语言的不向前兼容的问题):

鉴于代码开源时间为2014年9月份,因此
**不可以**使用最新版本的R,
**需要使用**R 3.0左右的版本,

由于3.0版本的r直接通过命令安装package比较困难,

建议手动离线安装3.0版本中的如下packages:
下载地址:https://mirror-hk.koddos.net/CRAN/  (或者用其他的r语言的镜像站)

stochvol_1.0.0.zip
coda_0.17-1.zip
Rcpp_0.11.5.zip

R语言离线安装命令如下(这块如果没看懂,请自己百度):
install.packages("请替换为你的文件夹路径/Rcpp_0.11.5.zip",repos=NULL,type="source")

10
tomegeer 发表于 2023-12-15 16:05:19
test_1770 发表于 2023-11-2 10:55
嘛~
如果你是在使用Measuring Uncertainty: - Kyle Jurado, Sydney Ludvigson and Serena Ng提供的代码时遇 ...
这个可以解决问题

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-10 18:07