楼主: lnlhckao123
5474 32

[问答] 请教R*C列联表双向有序属性不同的线性趋势的SAS程序 [推广有奖]

21
lnlhckao123 发表于 2010-12-4 22:27:01 |只看作者 |坛友微信交流群
首先非常感谢pophoo,不过我还有一个问题请教,要是我的数据(R*C) 为其它形式,比如为5*8,这个程序该怎么变,还有下面这个程序中的  kf=71.4325;  表示什么意思?当然最重要的是R*C形式如果变了,这些 取值会变吗?    恳请高手指点!           b=0.40534;
                                                 sb=0.04479; ;                                                         
   r=4;
    c=4;
    kf=71.4325;
    b=0.40534;
    sb=0.04479;
即使在人大经济论坛这个网络世界,我仍以真诚为基础与我的好友进行交往!

使用道具

22
lnlhckao123 发表于 2010-12-4 22:28:51 |只看作者 |坛友微信交流群
首先非常感谢pophoo,不过我还有一个问题请教,要是我的数据(R*C) 为其它形式,比如为5*8,这个程序该怎么变,还有下面这个程序中的  kf=71.4325;  b=0.40534;  sb=0.04479表示什么意思?当然最重要的是R*C形式如果变了,这些 取值会变吗?    恳请高手指点!           
   r=4;
    c=4;
    kf=71.4325;
    b=0.40534;
    sb=0.04479;
即使在人大经济论坛这个网络世界,我仍以真诚为基础与我的好友进行交往!

使用道具

23
lnlhckao123 发表于 2010-12-4 22:30:10 |只看作者 |坛友微信交流群
首先非常感谢pophoo,不过我还有一个问题请教,要是我的数据(R*C) 为其它形式,比如为5*8,这个程序该怎么变,还有下面这个程序中的  kf=71.4325; b=0.40534; sb=0.04479; ;  表示什么意思?当然最重要的是R*C形式如果变了,这些 取值会变吗?恳请高手指点!            
                                                                                                                  
   r=4;
    c=4;
    kf=71.4325;
    b=0.40534;
    sb=0.04479;
即使在人大经济论坛这个网络世界,我仍以真诚为基础与我的好友进行交往!

使用道具

24
lnlhckao123 发表于 2010-12-4 22:31:21 |只看作者 |坛友微信交流群
首先非常感谢pophoo,不过我还有一个问题请教,要是我的数据(R*C) 为其它形式,比如为5*8,这个程序该怎么变,还有下面这个程序中的  kf=71.4325; b=0.40534; sb=0.04479; ;  表示什么意思?当然最重要的是R*C形式如果变了,这些 取值会变吗?恳请高手指点!
即使在人大经济论坛这个网络世界,我仍以真诚为基础与我的好友进行交往!

使用道具

25
lnlhckao123 发表于 2010-12-4 22:34:10 |只看作者 |坛友微信交流群
我说的取值是否会变,是指  kf=71.4325; b=0.40534;      sb=0.04479;这些程序里的值,
即使在人大经济论坛这个网络世界,我仍以真诚为基础与我的好友进行交往!

使用道具

26
lnlhckao123 发表于 2010-12-4 22:35:34 |只看作者 |坛友微信交流群
请教版主我后来在这一主题下再回复其它内容,怎么回复不上去?
即使在人大经济论坛这个网络世界,我仍以真诚为基础与我的好友进行交往!

使用道具

27
lnlhckao123 发表于 2010-12-5 01:09:26 |只看作者 |坛友微信交流群
谢谢8楼,我现在搞定了,不过要说明一下,8楼用自变量的标准误当做回归系数的标准差,这一点是不对的,导致结果的线性回归分量和偏离线性回归分量结果的错误,本人经过努力,在二楼的基础上写出很粗糙,但结果正确的SAS程序(这是我本人第一次按照书上公式在别人SAS程序的基础上写出的第一个程序),但是我还是非常感谢二楼,故我将他的答案设为最佳答案,请大家仔细看程序:
DATA abc;                     
    DO x=1,2,3,4;
         DO y=1,2,3,4;
              INPUT f @@;
              OUTPUT;
         END;  
    END;
CARDS;
70 22  4  2
27 24  9  3
16 23 13  7
9  20 15 14
;
PROC FREQ data=abc;
    WEIGHT f;
    TABLES y*x / CHISQ;
RUN;
PROC REG data=abc;
    FREQ f;
    MODEL y=x;
RUN;
quit;

data bb1;
input y  c@@;
cards ;
1     122
2     89
3     41
4     26
;
run;
proc univariate data=bb1;
var y;
freq   c;
run;

data bb2;
input x  c@@;
cards ;
1     98
2     63
3     59
4     58
;
run;
proc univariate data=bb2;
var x;
freq   c;
run;
data  bb3;
vb=0.95297769/(1.32733813*278);
run;
proc print data=bb3;
var vb ;
run;

DATA a;
    r=4;
    c=4;
    kf=71.4325;
    b=0.40534;
    dff=(r-1)*(c-1);
    dfr=1;
    dfb=dff-dfr;
    vb=0.00258;
    kr=ROUND(b*b/vb, 0.001);
    kb=kf-kr;
    pr=1-PROBCHI(kr,dfr);
    pr=ROUND(pr, 0.0001);
    IF pr<0.0001 THEN pr=0.0001;
    pb=1-PROBCHI(kb,dfb);
    pb=ROUND(pb, 0.0001);
    IF pb<0.0001 THEN pb=0.0001;
    FILE PRINT;
    PUT #2 @10 'line  CHISQ-R' @30 'line  P-R'
        #2 @60 'nonline  CHISQ-B' @80 'nonline P-B'
        #3 @15 kr @33 pr
        #3 @65 kb @83 pb;
RUN;
即使在人大经济论坛这个网络世界,我仍以真诚为基础与我的好友进行交往!

使用道具

28
lnlhckao123 发表于 2010-12-5 01:10:33 |只看作者 |坛友微信交流群
说错了,是在二楼的基础上写出的第一个程序。
即使在人大经济论坛这个网络世界,我仍以真诚为基础与我的好友进行交往!

使用道具

29
情迷仲夏夜 发表于 2010-12-5 06:54:25 |只看作者 |坛友微信交流群
来晚一步,不过,我还是很高兴为你再作进一步解答和更正一些我发现的错误:你原先提供的数据其形式R*C=(4*4),数据总和为16个,那么,如果你想要变形为R*C=(8*5),我觉得应该是8*5,8为行,就是行数或观察数,5为列数,就是等级数,所以,整个数据的总和就是40个,如果你病例的总数增加了,也就是变成如下表格:
     年龄(岁)X                    冠状动脉粥样硬化等级(Y)                                 合计
                                       —            +          ++         +++          ++++
                 20-                 70           22          4             2                1                         99
                30-                  27           24          9             3                2                         65
                40-                 16           23         13             7                5                         64
                50-                   9           20         15            14             13                         71
                60-                   8           14         13            15             18                         68
                70-                   7           12         14            17             20                         70
                80-                   6           11         13            19             18                         67
            >=90                    5           10         12            18             20                         65
               合计              148         136         93             95            97                       569
既然行列由4*4变成8*5,那当然原先的程序也就要改变成:
DATA abc;
    DO x=1,2,3,4,5;
         DO y=1,2,3,4,5,6,7,8;
              INPUT f @@;
              OUTPUT;
         END;  
    END;
CARDS;
70 22  4  2  1
27 24  9  3  2
16 23 13  7  5
9 20 15 14 13
8 14 13 15 18
7 12 14 17 20
6 11 13 19 18
5 10 12 18 20
;
后面的统计程序计算不变:
PROC FREQ data=abc;
    WEIGHT f;
    TABLES x*y / CHISQ;*但在这里发现了一个问题,这里应该是x*y,而不是y*x,否则,打出的表格是竖着列的,与实际表格不符了;
RUN;
PROC REG data=abc;
    FREQ f;
    MODEL y=x;
RUN;
quit;
但分析结果肯定就不一样了:
r=4; *r 就是row行,加入新数据后,将变为8;
c=4;*c就是column列,加入新数据后,将变为5;
kf=71.4325;*kf就是卡方值(chi-square value),加入新数据后,将变为221.3211,算得的卡方值有常用的卡方值,还有一个叫Likelihood Ratio Chi-Square,这取决于你想用哪个更接近你的需要来定了,CHISQ-R是不是指Chi-Square Ratio(比率),CHISQ-B是不是指Chi-Square Bias(偏差);
b=0.40534;*b就是x的估计值(parameter estimate),加入新数据后,将变为0.32687;
sb=0.04479;*sb就是x的标准误(standard error),加入新数据后,将变成0.02167;
最后一段的sas程序就是将统计结果读入到sas数据表内,以打印出结果而已。
DATA a;
    r=8;*27楼在添加新数据之后,没有改变此数;
    c=5;*27楼在添加新数据之后,没有改变此数;
    kf=221.3211;*27楼在添加新数据之后,没有改变此数;
    b=0.32687;*27楼在添加新数据之后,没有改变此数;
    sb=0.02167;*27楼在添加新数据之后,没有改变此数;
    dff=(r-1)*(c-1);
    dfr=1;
    dfb=dff-dfr;
    vb=sb*sb;
    kr=ROUND(b*b/vb, 0.001);
    kb=kf-kr;
    pr=1-PROBCHI(kr,dfr);
    pr=ROUND(pr, 0.0001);
    IF pr<0.0001 THEN pr=0.0001;
    pb=1-PROBCHI(kb,dfb);
    pb=ROUND(pb, 0.0001);
    IF pb<0.0001 THEN pb=0.0001;
    FILE PRINT;
    PUT #2 @10 'CHISQ-R' @20 'P-R'
        #2 @30 'CHISQ-B' @40 'P-B'
        #3 @10 kr @20 pr
        #3 @30 kb @40 pb;
proc print data=a;RUN;

即使病例总数不变,但我想因为各年龄组及硬化等级改变了,一定会影响到统计计算分析的结果,其相应的分析数据当然也会改变。你不妨可以将总数固定,各年龄组和各等级内的病例数改变一下,再重新运算一下结果验证一下。

你的悬赏很诱人!不知道我是否还可以领到你的悬赏币?你还有何问题,我很愿意帮你解答!

使用道具

30
pophoo 发表于 2010-12-5 10:14:48 |只看作者 |坛友微信交流群
我今天上传了这本书,你下载看一下。http://www.pinggu.org/bbs/thread-979254-1-1.html

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-3 10:44