楼主: suoluosi11
1804 5

[问答] 一段简单的R程序请高手看看错误在哪? [推广有奖]

  • 1关注
  • 3粉丝

已卖:11份资源

博士生

24%

还不是VIP/贵宾

-

威望
0
论坛币
401 个
通用积分
0
学术水平
3 点
热心指数
8 点
信用等级
4 点
经验
7405 点
帖子
292
精华
0
在线时间
211 小时
注册时间
2011-12-7
最后登录
2023-5-11

楼主
suoluosi11 发表于 2014-3-8 20:50:22 |AI写论文
300论坛币
> s<-runif(300,0.001,0.008)
> a0=1:300;#s[i]索赔记录为0的次数
> a1=1:300;#s[i]索赔记录为1的次数
> a2=1:300;#s[i]索赔记录为2的次数
> a3=1:300;#s[i]索赔记录超过2的次数
> b0=0;
> b1=0;
> b2=0;
> b3=0;
> c0=0;#索赔记录为0的总次数
> c1=0;#索赔记录为1的总次数
> c2=0;#索赔记录为2的总次数
> c3=0;#索赔记录超过2的总次数
> for(i in 1:300)
+ {
+ y<-rpois(20000,s[i]);
+ a0[i]<-sum(y==0);#索赔次数为0的相关数据
+ b0<-b0+s[i]*a0[i];
+ c0<-c0+a0[i];
+ a1[i]<-sum(y==1);#索赔次数为1的相关数据
+ b1<-b1+s[i]*a1[i];
+ c1<-c1+a1[i];
+ a2[i]<-sum(y==2);#索赔次数为2的相关数据
+ b2<-b2+s[i]*a2[i];
+ c2<-c2+a2[i];
+ a3[i]<-sum(y>2);#索赔次数超过2的相关数据
+ b3<-b3+s[i]*a3[i];
+ c3<-c3+a3[i];
+ }
> mean0<-b0/c0;
> mean1<-b1/c1;
> mean2<-b2/c2;
> mean3<-b3/c3;
> st0=0;
> st1=0;
> st2=0;
> st3=0;
> for(i in 1:300)
+ {
+ st0<-st0+a0[i]*(s[i]-mean0)^2;
+ st1<-st1+a1[i]*(s[i]-mean1)^2;
+ st2<-st2+a2[i]*(s[i]-mean2)^2;
+ st3<-st3+a3[i]*(s[i]-mean3)^2;
+ }
> std0=st0/c0;
> std1=st1/c1;
> std2=st2/c2;
> std3=st3/c3;
> bata0=mean0/std0;
> arfa0=mean0*bata0;
> bata1=mean1/std1;
> arfa1=mean1*bata1;
> bata2=mean2/std2;
> arfa2=mean2*bata2;
> bata3=mean3/std3;
> arfa3=mean3*bata3;
bata3、arfa3,R软件运行显示为NaN,求高手解惑和改正,本人不甚感激!

最佳答案

陈宝林 查看完整内容

是在不好意思,刚刚电脑卡了,不仅图没传上去,还回复了两遍。。。图片改为附件方式上传吧。。。
关键词:R程序 Bata mean BAT FA3 程序

沙发
陈宝林 发表于 2014-3-8 20:50:23
是在不好意思,刚刚电脑卡了,不仅图没传上去,还回复了两遍。。。图片改为附件方式上传吧。。。

30000.jpg (89.92 KB)

样本为30000时各变量取值

样本为30000时各变量取值

300.jpg (84.22 KB)

样本为300时各变量的取值

样本为300时各变量的取值

已有 1 人评分论坛币 收起 理由
admin_kefu + 50 热心帮助其他会员

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

藤椅
陈宝林 发表于 2014-3-9 01:07:23
建议你使用rstudio软件进行调试,按ctrl+enter可以逐行调试,同时在右侧还会显示各个变量取值的变化,实际上beta3和alfa3缺失是因为b3和c3为0(有图有真相),具体的原因是由于两个分布的参数你给的都很小,所以最终在泊松分布的随机数中取3的概率非常小,以至于好几次实验都没有取到3(具体可以通过泊松分布的性质严格证明,此处省略)。。。。所以,为了使小概率事件发生,一个方法是大幅度增加样本数目,我把样本数从300增加到30000之后,奇迹出现了!见图(不过运行有点慢,别急)

板凳
陈宝林 发表于 2014-3-9 01:12:19
建议你使用rstudio软件进行调试,此软件非常之好,按ctrl+enter可以逐行调试,同时在右侧还会显示各个变量取值的变化。实际上beta3和alfa3缺失是因为b3和c3为0(有图有真相),具体的原因是由于两个分布的参数你给的都很小,所以最终在泊松分布的随机数中取3的概率非常小,以至于好几次实验都没有取到3(具体可以通过泊松分布的性质严格证明,此处省略)。。。。所以,为了使小概率事件发生,一个方法是大幅度增加样本数目,我把样本数从300增加到30000之后,奇迹出现了!见图(不过运行有点慢,别急)
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
一刹春 + 5 + 5 + 5 精彩帖子

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

报纸
nuomin 发表于 2014-3-9 17:39:17
之所以bata3会出现NaN值是因为mean3值是NaN,可追溯到b3和c3。最后,是因为y中没有大于2的值引起的。
如果加入一行代码在如下位置:
  1. y<-rpois(20000,s[i]);
  2. y[c(1,3,5,7)] <- 3 #我加的测试代码
复制代码
最后的结果如下
  1. > bata3
  2. [1] 1189.004
  3. > arfa3
  4. [1] 5.65086
  5. >
复制代码
问题可以解决了
已有 1 人评分论坛币 收起 理由
admin_kefu + 100 热心帮助其他会员

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

地板
suoluosi11 发表于 2014-3-12 17:10:32
多谢各位的热心帮忙,不好意思,最近有点忙,确认晚了。

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

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