楼主: elephann
3918 19

[有偿编程] 编程求助!! [推广有奖]

  • 1关注
  • 7粉丝

巫师

已卖:1465份资源

学科带头人

19%

还不是VIP/贵宾

-

威望
0
论坛币
15938 个
通用积分
58.0460
学术水平
54 点
热心指数
50 点
信用等级
30 点
经验
36783 点
帖子
1184
精华
0
在线时间
2177 小时
注册时间
2004-12-31
最后登录
2025-12-26

楼主
elephann 发表于 2011-7-5 03:14:02 |AI写论文
100论坛币
我现在有三个数据框,其中tvwr和tvw是对应的,都有1347个序列,bench只有一个序列。
我现在打算从tvwr这个数据框中随机抽取2个序列(不重复,抽取10000次)与对应tvw序列运算得到一个序列,再减去bench序列,对结果求方差;累加方差,求平均方差;但输入R后总显示错误,求大家帮帮忙!我的程序是
tevq<-function(z)
{
k<-0;
yy<-0;
x<-round(runif(z,1,1374),digit=0);
y<-round(runif(z,x,1374),digit=0);
for(i in 1:z)
{
yy<-yy+var((tvwr[,x]+tvwr[,y])/(tvw[,x]+tvw[,y])-bench[,1],na.rm=T);
k<-k+1
};
if (k>10000) break
};
(tev[2]<-yy/(z-1))

公式中yy<-后的x、y均有指标[ i ],不知咋一提交就没了!

问题是:1 随机数设置似乎不能满足不重复的要求,有无好的解决办法?
              2 即使不能满足随机数要求,上面程序仍然无法运行,到底有什么错误呢?

论坛币仅为表达感激,会选择能给出解答的朋友,但凡提出良好建议的朋友也都会评分答谢!!欢迎大家畅所欲言!!

关键词:Ben 数据框 求平均 均方差 求助
独立精神,自由意志!

沙发
hyu9910 在职认证  发表于 2011-7-5 09:37:29
这句话“if (k>10000) break”,应该在某个循环中吗?

藤椅
elephann 发表于 2011-7-5 10:26:32
2# hyu9910 这个我用来控制循环次数, 我希望抽样10000次,所以加了这个语句!似乎没问题.
独立精神,自由意志!

板凳
epoh 发表于 2011-7-5 18:18:57
先了解一下
甚么是(不重复,抽取10000次)
你要随机数不重复
底下x,y,都不会重复
A=seq(1:1374)
x=sample(A,1374,replace = FALSE)
y=sample(A,1374,replace = FALSE)

##########
z=5
A=seq(1:z)
x=sample(A,z,replace = FALSE)
y=sample(A,z,replace = FALSE)
tvwr=cbind(rnorm(50),rnorm(50),rnorm(50),rnorm(50),rnorm(50))
tvw=cbind(rnorm(50,1,3),rnorm(50,1,3),rnorm(50,1,3),rnorm(50,1,3),rnorm(50,1,3))
bench=cbind(rnorm(50),rnorm(50))
for(i in 1:z){
yy<-yy+var((tvwr[,x]+tvwr[,y])/(tvw[,x]+tvw[,y])-bench[,1],na.rm=T)}
yy= 97.32098

其他的等弄清楚再修改.
tev[2]  ??
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
elephann + 1 + 1 + 1 鼓励积极发帖讨论

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

报纸
elephann 发表于 2011-7-5 19:21:18
4# epoh

我这个基本数据集是tvwr,我想从中任意取n(n=1,2,。。。。1347)个做成组合,并计算组合相关变量,最理想当然是全部可能的组合,但是choose(1347,3)结果就是inf,所以我考虑随机抽样的方法!准备对任意n个数据系列的组合抽样10000个,如果能生成10000个n维向量最好(n=1和n=1347例外),这个我自己没有把办法。所以我考虑单独生成随机数,再构建组合,问题是怎样控制不出现,比如第一、二个随机数都是一样的情形(也要考虑排除比如n个中有r个相同——这样就不是n个序列的组合)?此外怎样排除两个组合都一样,比如n1次是(a,b),n2次也是(a,b)(这个要求是否必要有待考虑)?
tev[2]是我设置的一个1347维的向量,希望把n=1到n=1347都放进去便于后续分析!对于tev[2]我就是将10000个组合都计算后加入,再求其平均值。
另外,我设置z时并不能肯定所产生的随机数正好能构建10000个组合,所以又用k来进行控制, 可能也不尽恰当.初学这个软件,还很生疏:)
独立精神,自由意志!

地板
epoh 发表于 2011-7-5 20:29:39
我刚试了
在MATLAB产生10000 x 1374 matrix
Y = rand(10000,1374);
文件大小约99.1 Mb
楼主是否可改用matlab

否则依楼主要求
条件句要相当多约束
这会影响效率甚多

7
elephann 发表于 2011-7-5 20:40:16
4# epoh
刚才想到个生成向量的办法:
set.seed(456)
x=round(runif(10000,1,1347));
y=round(runif(100000,1,1347));
for(i in 1:10000)
{
if(x>=y,
x=round(runif(1,1,1347)),
y=round(runif(1,x,1347)))
};
z=cbind(x,y)
{ }中的x、y均有指标[ i ];用x>=y作判别是因为组合可以这样来排,比如combn(5,2),如下:

> combn(5,2)
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,]    1    1    1    1    2    2    2    3    3     4
[2,]    2    3    4    5    3    4    5    4    5     5

但上面这段语句似乎有什么问题! 显示有问题!:)
独立精神,自由意志!

8
elephann 发表于 2011-7-5 20:45:17
6# epoh
谢谢费心! 我不懂matlab,R也仅仅入手一个月左右,呵呵,见笑!!暂容我考虑考虑吧!!
独立精神,自由意志!

9
epoh 发表于 2011-7-5 21:19:54
大概了解你的想法
先用小数目n=100
你先看看

n=100
k=1
mat=matrix(NA,4950,2)
for(i in 1:(n-1)){
for(j in (i+1):n){
   mat[k,1]=i
   mat[k,2]=j
k=k+1
}
}
mat
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
elephann + 1 + 1 + 1 鼓励积极发帖讨论

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

10
elephann 发表于 2011-7-5 21:41:26
9# epoh
你这方法很巧妙! 这样构造矩阵的方法我还没见过!! 不过,疑问是:这样构造的是所有可能的组合,对于n和k比较小,这还可以,反之呢,则就不行了!我前面考虑过给找出所有可能组合的集合,再整个计算或者抽样,但即使combn(1347,3)已经是一个大小为4.5G的矢量,无法继续运算了!这我才考虑的随机抽样方法。
> choose(1347,200)
[1] 1.652051e+244
> choose(1347,500)
[1] Inf

> combn(1347,3)
错误: 无法分配大小为4.5 Gb的矢量
此外: 警告信息:
1: In matrix(r, nrow = len.r, ncol = count) :
  Reached total allocation of 3956Mb: see help(memory.size)
2: In matrix(r, nrow = len.r, ncol = count) :
  Reached total allocation of 3956Mb: see help(memory.size)
3: In matrix(r, nrow = len.r, ncol = count) :
  Reached total allocation of 3956Mb: see help(memory.size)
4: In matrix(r, nrow = len.r, ncol = count) :
  Reached total allocation of 3956Mb: see help(memory.size)
独立精神,自由意志!

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-27 06:33