楼主: redaring
8757 21

[程序分享] 请教gamma分布的问题 [推广有奖]

  • 0关注
  • 0粉丝

硕士生

21%

还不是VIP/贵宾

-

威望
0
论坛币
48 个
通用积分
0.0600
学术水平
0 点
热心指数
1 点
信用等级
0 点
经验
4910 点
帖子
102
精华
0
在线时间
123 小时
注册时间
2009-11-22
最后登录
2018-2-15

楼主
redaring 发表于 2010-5-19 23:50:53 |AI写论文
20论坛币
请教高人一个gamma分布的问题

var1,var2,var3,var4,var5
1001,1991,1,1,10
1001,1992,1,1,9
1001,1993,1,1,11
1001,1994,1,1,12
1001,1995,1,1,8
1001,1996,1,1,6
1001,1997,1,1,7
1001,1998,1,1,10
1001,1999,1,1,9
1001,2001,1,1,11
1001,2003,1,1,7
2201,1991,1,2,9
2201,1992,1,2,9
2201,1993,1,2,10
2201,1994,1,2,12
2201,1995,1,2,8
2201,1996,1,2,11
2201,1997,1,2,7
2201,1998,1,2,10
2201,1999,1,2,9
2201,2001,1,2,11
2201,2003,1,1,7

这样的数据集,先是by var1 var3 var4 var5排序,当var1 var3 var4相等时,将var5 拟合gamma分布,我想求拟合后95%和5%上的那个值。从上面举例的数据集,期望是求得var1=1001 var3=1 var4=1 时,var5拟合后求得的一个95%和5%的值,var1=2201 var3=1 var4=2 时,var5拟合后求得的一个95%和5%的值。

不知道说明白了没,试了一些方法都没求得,由于对sas不熟悉,所以请教各位,谢谢!

关键词:gamma GAM 请教高人 VaR 数据集 请教 gamma

沙发
crackman 发表于 2010-5-20 01:37:48
不明白

藤椅
redaring 发表于 2010-5-20 08:26:12
[em29][em29][em29][em29]

板凳
redaring 发表于 2010-5-20 10:53:36
我试过用这个函数,但是不对,哪位大侠知道,望指点一下
data b;
set a
lo=gaminv(.05,var5);
run;

报纸
xiaosanmao 发表于 2010-5-20 11:57:10
制衡发动,容我三思。。

data raw;
infile 'd:\x.txt' dlm=',';
input var1 var2 var3 var4 var5 ;
cards;
;run;
proc sort data=raw nodupkey dupout=dupdata;by var1  var3 var4 ;run;
proc means data=dupdata mean std    ;    class VAR1;                                    
    var VAR5;                                                                                                                                          
output out=tmp  mean=mean  std=std   ;                                                                                                                          
run;     
data t;set tmp;
if var1 ne . ;  a=mean/std;
keep var1 a;
run;
data t;set t; p05=gaminv(0.05,a);p95=gaminv(0.95,a);drop a;run;
data final;merge dupdata t;if p05 ne . or p95 ne .;run;

地板
redaring 发表于 2010-5-20 15:29:42
非常感谢 xiaosanmao ,程序是可运行的。不过出来的结果还不是我想要的。

我想要的结果是 var5 这一序列拟合 gamma 分布后,95%和5%上的那个值。
假设 var1=1001 and var3=1 and var4=1 时,var5升序排列,  var5这一序列数最后一个var5=12(概率=97%) ,倒数第二个var5=11(概率=94%),我想求的是 概率=95% 时的那个值,即 var5=?

期待大侠指导!万分感谢!

7
xiaosanmao 发表于 2010-5-20 16:56:41
redaring 发表于 2010-5-20 15:29
非常感谢 xiaosanmao ,程序是可运行的。不过出来的结果还不是我想要的。

我想要的结果是 var5 这一序列拟合 gamma 分布后,95%和5%上的那个值。
假设 var1=1001 and var3=1 and var4=1 时,var5升序排列,  var5这一序列数最后一个var5=12(概率=97%) ,倒数第二个var5=11(概率=94%),我想求的是 概率=95% 时的那个值,即 var5=?

期待大侠指导!万分感谢!
首先,var5那列既然是gamma分布就肯定不是平均分布,你那个97%,94%是怎么算出来的呢?
再次,我还是真不知道你是什么意思?不就是个分位点么?
按照你的意思,95% 在94%和97%之间,所以95%分位肯定是在11和12之间喽?
我算的不是在11和12之间所以你认为是错的啦。
不过你这样的认为好像是想当然哈。
最后这个不是普通的插值吧,否则用manlab得了

8
hongxx 发表于 2010-5-20 17:18:18
首先,你应该对你要分别处理的数据分组,创建var6用于指示那些数据是同一组的,
然后sort var6就行了,不用去sort var1 var2之类的。
用proc univariate过程分组拟合gamma分布,会返回拟合的alpha、beta参数,
调用gaminv返回你需要的分位数,因为gaminv默认的分布是只有一个参数alpha的gmama分布,没有尺度参数。
所以你得把返回的分位数调整为alpha、beta参数的gamma分位数。

9
redaring 发表于 2010-5-20 18:11:15
呵呵,那个97%和94%我是为了举例随便说的,并不是计算出来的。
也正如你说的,就是计算分位点上的值。
我是用我的数据进行计算的,并不是帖子上的这些。为了方便讨论,我把用于计算的数据放上来,还有运行的程序和结果。

proc sort data=t nodupkey dupout=dupdata;
by usaf mo da  ;
run;
proc means data=dupdata mean std    ;
class usaf mo da;                                    
    var max;                                                                                                                                          
output out=t1  mean=mean  std=std   ;                                                                                                                          
run;     
data t2;
set t1;
if usaf ne . and mo ne . and da ne . ;  
a=mean/std;
keep usaf mo da a;
run;
data t3;
set t2;
p05=gaminv(0.05,a);
p95=gaminv(0.95,a);
run;

结果:
result.jpg

原数据中,当usaf=10010 mo=1 da=1 时,max排列后最大值是37.4,最小值是1. 从计算结果看p05=0.96   p95=6.71.  如果直接用proc univariate 计算的95%分位数的值是36.9,5%分位数上的是12.2。如果这个计算gamma分布的方法正确,我不太明白为什么会差这么远,希望大侠指点。非常感谢!

用proc univariate 计算结果如下:
result2.jpg

以下是用于计算的数据集:t.txt

10
redaring 发表于 2010-5-20 18:20:32
8# hongxx

感谢hongxx!
我的数据太多,如果分组的话,要分360000组,所以,是不是sort var3 var4 还比较实际点呢(其实我自己也不确定)。
你的意见我正在尝试。可是我是sas菜鸟,如果你能帮忙写成程序,我会感激不尽的,谢谢!

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

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