楼主: betterisbest
10697 12

[程序分享] 有关proc mixed的程序设计 [推广有奖]

  • 0关注
  • 0粉丝

已卖:702份资源

本科生

31%

还不是VIP/贵宾

-

威望
0
论坛币
388 个
通用积分
1.1628
学术水平
2 点
热心指数
2 点
信用等级
2 点
经验
229 点
帖子
35
精华
0
在线时间
104 小时
注册时间
2006-12-30
最后登录
2021-10-4

楼主
betterisbest 在职认证  发表于 2009-7-20 22:50:48 |AI写论文
40论坛币
我用了一个小样本,数据你们可以下载试试
proc mixed可以用来估计混合模型,我试过可以用这个来估计固定效应,即估计结果与用proc tscsreg加fixone的一样。

程序一:
proc mixed data=test;
class stkcd ;
model detalever=stkcd tde_above tde_below/s;
run;

程序二:
proc tscsreg data=test;
model detalever=tde_above tde_below/fixone;
id stkcd Trdynt;
run;

即程序一和程序二估计出的结果是一样的。以下是问题:


问题一:在于如何用proc mixed 来估计随机效应模型呢?即如何设计程序,估计结果与下面的程序估计结果相同?
proc tscsreg data=test;
model detalever=tde_above tde_below/ranone;
id stkcd Trdynt;
run;

问题二:如果同时考虑固定效应和随机效应?程序怎么写?

test.rar
下载链接: https://bbs.pinggu.org/a-360608.html

38.58 KB

本附件包括:

  • test.sas7bdat

关键词:proc mixed Mixed 程序设计 mix ROC 设计程序 程序设计 模型 如何 样本

沙发
456852 发表于 2009-7-20 23:46:22
proc mixed有random这个statement,你查下手册

藤椅
betterisbest 在职认证  发表于 2009-7-20 23:52:09
我查了,可能是我基础比较差的原因,就是没试出来,另外,也怕自己的程序有问题

板凳
坐看云起时 在职认证  发表于 2009-7-21 04:56:51
从你的模型、数据和写的程序来看,本质上是分层随机抽样数据,同时包含随机固定和随机效应的混合效应模型,具体的程序如下,供参考(这里STKCD  TYDYNT我都当成随机效应;为修改任何变量属性):
proc mixed data=test METHOD=REML CL ALPHA=.05;           
class stkcd;   
model detalever = tde_above tde_below / HTYPE=3 DDFM=SATTERTH SOLUTION CL
ALPHA=.05;
random STKCD  TYDYNT/ SOLUTION CL ALPHA=.05;
run;
quit;

另外,你写的程序和提供的数据,我没有发现你对tydnt这个变量做了时间序列的定义(把tydnt转换成时间变量),当然,没有定义的情况下,前两个程序的参数是一样的,但proc tscsreg是要定义时间变量的。
大写的部分是补充的。钱一定要加,多少你看着办 [lol]

报纸
betterisbest 在职认证  发表于 2009-7-21 10:43:24
4# 坐看云起时

TO:坐看云起时
呵,我只是附加最后执行的程序,另外,我这里没有考虑时间效应。

程序三:
proc tscsreg data=test;
model detalever=tde_above tde_below/ranone;
id stkcd Trdynt;
run;
结果如下:
                                                      Parameter Estimates
                                                                 Standard
                               Variable        DF    Estimate       Error    t Value    Pr > |t|
                               Intercept        1    -0.00609      0.0289      -0.21      0.8339
                               tde_above        1    1.223141      0.4427       2.76      0.0074
                               tde_below        1    0.375206      0.1822       2.06      0.0434
用你的程序执行后得到的结果为:
               The Mixed Procedure
                                                  Solution for Fixed Effects
                                       Standard
              Effect       Estimate       Error      DF    t Value    Pr > |t|     Alpha       Lower       Upper
              Intercept    0.002327     0.02614    17.8       0.09      0.9300      0.05    -0.05263     0.05729
              tde_above      1.2401      0.4410    66.3       2.81      0.0065      0.05      0.3597      2.1204
              tde_below      0.2910      0.1777    52.1       1.64      0.1076      0.05    -0.06565      0.6476
还是不一样啊

地板
坐看云起时 在职认证  发表于 2009-7-21 12:39:49
要用proc tscsreg必须要把tydynt转换成时间变量属性(这是时间序列横截面回归,你现在的tydynt属性只是一般数量变量-best12.,不是日期属性-daye year monyy........;输入2001 2002.....机器不会自动识别这是时间变量,要从新定义)
,我给你的程序是假定你对tydynt转换成时间变量属性后再用(混合模型也要定义的)

你的结果是未定义tydynt时间属性的计算结果

7
realameko 发表于 2009-7-21 12:55:10
我已經給你回了郵件。請查看。

8
betterisbest 在职认证  发表于 2009-7-21 16:28:01
谢谢realameko,你的邮件收到了

9
betterisbest 在职认证  发表于 2009-7-21 16:48:36
to 坐看云起时
“要用proc tscsreg必须要把tydynt转换成时间变量属性(这是时间序列横截面回归,你现在的tydynt属性只是一般数量变量-best12.,不是日期属性-daye year monyy........;输入2001 2002.....机器不会自动识别这是时间变量,要从新定义)
,我给你的程序是假定你对tydynt转换成时间变量属性后再用(混合模型也要定义的)

你的结果是未定义tydynt时间属性的计算结果”

我记得tscsreg命令中有关时间变量的指定,可以用“TS= ”,也可以用ID来指定,我这里已经用了ID,这应该也可以了,因为我提供的数据是排序过的,还是我理解错你的意思?下面是我从使用指南中拷过来的

"The ID statement is used to specify variables in the input data set that identify the cross section and time period for each observation. "

10
坐看云起时 在职认证  发表于 2009-7-22 00:47:53
ID statement 是指令(statement是指令的意思),是控制机器执行的命令,不是你数据集中的id变量或指定某个变量为id。机器是通过你数据中设定的CS(cross-section-id-variable)和TS( time-series-id-variable)两个变量来执行ID这个指令,排序也是这样,排序使用BY指令,但BY是你数据中的一个变量吗?

"The ID statement is used to specify variables in the input data set that identify the cross section and time period for each observation. "
这句话有两层意思 1、ID作为指令通常用于指定出入集的变量(specify variables主动语态 ),这里指定是指选择的意思(如果是The ID  is used to specified variables in the input data set that.............,则ID是你数据中的一个变量,我猜你是按这意思理解的)2、选择的目的是要识别cross section and time period(时间属性) 两个变量。

你摘录的那页,下面还有一句话:Note that the input data must be sorted by time within cross section, regardless of whether the cross section structure is given by an ID statement or by the options TS= and CS=. 这个time是要有时间变量属性的。

下面是sas指南中的例子:
data cpicity;
      input city $11. date monyy7. cpi;
      format date monyy7.;
   datalines;
   Chicago      nov1989  126.700
   Chicago      dec1989  126.500
   Chicago      jan1990  128.100
   Chicago      feb1990  129.200
   Chicago      mar1990  129.500
   Chicago      apr1990  130.400
   Chicago      may1990  130.400
   Chicago      jun1990  131.700
   Chicago      jul1990  132.000
   Los Angeles  nov1989  130.000
   Los Angeles  dec1989  130.600
   Los Angeles  jan1990  132.100
    ... etc. ...
   New York     may1990  137.200
   New York     jun1990  137.100
   New York     jul1990  138.400
   ;
proc sort data=cpicity;
by city date;
   run;
proc tscsreg data= cpicity;
............
id city date;
这里city就相当你数据中的stkcd, date就相当trdynt(格式属性为format date monyy7.; )

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-1 23:26