楼主: dxystata
4620 30

[问答] 如何计算得到呢? [推广有奖]

21
新人2012 发表于 2013-1-5 15:52:56
jingju11 发表于 2013-1-5 15:38
不否认你的说法,如果你的统计量在这里指的是S.不但固定,而且和N 是否大于20无关.如果你值得是PVALUE,
在 ...
算了,不说了!再说又要去翻书求证了,浪费时间!

22
jingju11 发表于 2013-1-5 16:02:31
jingju11 发表于 2013-1-5 15:13
我承认你的结果. 但是小数存在"FUZZ"的问题. (1)使用ROUND =.01 在PROC UNIVARIATE STATEMENT.
(2) DIFF ...
呵.还是小数的问题,因为我也曾经为此困扰过,所以做进一步的阐述,因为这种现象,或许一些人并没有认真注意过.利用STATA的原始数据做以下处理:
20247 ;
20248 data have;
20249 input x1 x2;
20250 diff0 =x1-x2;
20251 diff1 =round(x1-x2, .0001);
20252 if diff0 =diff1 then same =1;
20253 else same =0;
20254 put @5 x1= @15 x2= @25 diff0= @40 diff1= @55 same=;

20258 cards;
x1=50.7 x2=60 diff0=-9.3 diff1=-9.3 same=0
x1=3.3 x2=3.3 diff0=0 diff1=0 same=1
x1=28.8 x2=30 diff0=-1.2 diff1=-1.2 same=0
x1=46.2 x2=43.2 diff0=3 diff1=3 same=1
x1=1.2 x2=2.2 diff0=-1 diff1=-1 same=0
x1=25.5 x2=27.5 diff0=-2 diff1=-2 same=1
x1=2.9 x2=4.9 diff0=-2 diff1=-2 same=0
x1=5.4 x2=5 diff0=0.4 diff1=0.4 same=0
x1=3.8 x2=3.2 diff0=0.6 diff1=0.6 same=0
x1=1 x2=4 diff0=-3 diff1=-3 same=1
NOTE: The data set WORK.HAVE has 10 observations and 5 variables.
NOTE: DATA statement used (Total process time):
real time 0.00 seconds
cpu time 0.00 seconds
 
20269 ;

SAME =1 >>>DIFF0 = DIFF1; SAME =0 >>>DIFF0 ^= DIFF1
因为在这里的X是一位(或者是看起来是)小数.所以其两两的差值应该也是一位小数.DIFF1在万分位上圆整,理应不改变差值.但是,6/10的SAME=0,说明6个DIFF0 ^=DIFF1.这也就说明了某些小数的真实值不是看起来的哪个值.如我以前提到的0.3^=0.3.
京剧

23
jingju11 发表于 2013-1-5 16:13:05
新人2012 发表于 2013-1-5 15:52
算了,不说了!再说又要去翻书求证了,浪费时间!
我可能误解你的意思了.在这里,大家都试图去猜测SAS如何计算当N<=20的P VALUE.我的意思是在这里没有现成的可以套用的公式.
仅此而已.京剧

24
jingju11 发表于 2013-1-5 16:29:20
dxystata 发表于 2013-1-5 15:32
谢谢京剧兄,能否把你的算法写详细点呢!
比如有10个数(DIFF). 其中的两个(A & B)>0.
先求10个数的RANKS. 设R = RANK(A) + RANK(B).
基于这10个RANK,做不同的组合,包含单个,两两组合,直到10在一起的组合.总共应该是2**10个组合.
对每个组合判断其和是否<=R.记数出所有的满足此条件的组合数.=R1.这是单边的个数.
对于双边来讲,就是P VALUE = 2*P1/2**10.
注意在开始记数R1的时候.从1开始,因为空集合自动满足<=R 的条件.
如果R很大,超过总RANK值的一半,那就把条件转化成<= TOTAL RANK- R.
大概如此.
京剧

25
dxystata 发表于 2013-1-5 17:21:38
jingju11 发表于 2013-1-5 16:29
比如有10个数(DIFF). 其中的两个(A & B)>0.
先求10个数的RANKS. 设R = RANK(A) + RANK(B).
基于这10个RANK,做不同的组合,包含单个,两两组合,直到10在一起的组合.总共应该是2**10个组合.
对每个组合判断其和是否<=R.记数出所有的满足此条件的组合数.=R1.这是单边的个数.
对于双边来讲,就是P VALUE = 2*P1/2**10.
注意在开始记数R1的时候.从1开始,因为空集合自动满足<=R 的条件.
如果R很大,超过总RANK值的一半,那就把条件转化成<= TOTAL RANK- R.
大概如此.
于这10个RANK,做不同的组合,包含单个,两两组合,直到10在一起的组合.总共应该是2**10个组合.
注意在开始记数R1的时候.从1开始,因为空集合自动满足<=R 的条件.

比如2个rank(为1 2) 做不同的组合 1, 2, 1 2三种组合加上空共4种组合
比如2个rank(为1.5 1.5) 做不同的组合 1.5, 1.5, 1.5 1.5三种组合加上空共4种组合
不知这样理解对不对,
谢谢!


26
dxystata 发表于 2013-1-5 17:38:05
rc = allcomb(i,&k,of num[*]);
这句能否解释一下呢, 谢谢!

27
ichliebeyxl 发表于 2013-1-5 22:45:24
200金币好难赚哪

28
新人2012 发表于 2013-1-5 23:55:53
jingju11 发表于 2013-1-5 16:13
我可能误解你的意思了.在这里,大家都试图去猜测SAS如何计算当N
是我误会了楼主的意思。以后还请多指教!

29
dxystata 发表于 2013-1-7 08:21:43
jingju11 发表于 2013-1-5 15:13
我承认你的结果. 但是小数存在"FUZZ"的问题. (1)使用ROUND =.01 在PROC UNIVARIATE STATEMENT.
(2) DIFF = FUZZ(X1-X2) (3) DIFF =ROUND(X1-X2, .0001)
你将得到不同的结果--这是CLEAN的结果.
一个简单的例子:
DIFF=0.2-0.1 =0.1 但是有时侯0.2-0.1=0.10000000009
在RANK的过程中,两个"理应"同样的DIFF被赋予不同的RANK.
这就是问题的所在.
解决的方案如我给出的三种.京剧
谢谢!

30
hs4601 发表于 2013-12-15 16:13:44

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

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