全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
9376 4
2009-07-07
在下为stata菜鸟,目前在研究基因对疾病的影响,现在如下数据:
y x1 x2 x3 x4 ... x1000
0  0   1   0   1  ...   0
0  1   1   1   1  ...   0
1  0   0   1   0  ...   0
0  1   1   0   0  ...   1
...    ...     ...     ...     ...     ...
1  1   1   1   0  ...   1
1  1   1   1   1  ...   1
1  1   0   1   1  ...   0
0  0   0   0   0  ...   1
1  0   1   0   1  ...   0
其中因变量y为是否患病,自变量x为基因类型(共有1000种不同基因),在回归模型中每次仅使用一个自变量xi对y进行回归,以判断其是否对y有显著影响(当然还有其它控制变量,从略),故需要做1000次logit回归。回归结束后,需要将对y没有有显著性影响(5%显著水平)的变量xi删除,将有显著性影响的xi列成一个表,并标出其回归p值。
以上过程的运算量很大,手工难以完成,需要运用stata编程才行解决。在下从未用stata编过类似程序,束手无策,恳请版上的stata高手花些时间提供一下参考程序,万分感谢!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2009-7-7 22:15:02
试试:

// 生成模拟数据库
clear
set obs 100
gen y = rbinomial(1, 0.1)        // 因变量
forv i = 1/50 {                // 50个自变量x1...x50
        gen x`i' = rbinomial(1, 0.2)
}
gen ctrl_var = rbinomial(1, 0.2)        // 控制变量ctrl_var

gen obs = _n
reshape long x, i(obs) j(eq)        // reshape以运用Stata的statsby命令储存回归结果
sort eq obs
drop obs

statsby b_x = _b[x] se_x = _se[x], by(eq) saving(result): logit y x ctrl_var
use result, clear
list in 1/50, clean        // eq编号依次代表x1、x2 ...
gen z = b_x/se_x
gen p = 2*normal(-abs(z))
save result, replace
keep if p <= 0.05
list, clean        // 当然在随机模拟数据中50个回归方程中没有一个x的系数是显著的
save result, replace
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2009-7-8 14:16:38
太感谢了!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2009-7-9 15:30:45
网络红卫兵 发表于 2009-7-8 14:16
太感谢了!
2楼程序原p值的计算——gen p = normal(-abs(z))——少掉了2*,已经更正。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-10-29 23:51:55
voodoo 发表于 2009-7-7 22:15
试试:

// 生成模拟数据库
你好,我的也是回归一千多次,求每次回归的拟合优度r2,用什么命令可以循环回归,求出所有的r2
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群