首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Stata代码中对varlist进行排序

在Stata代码中对varlist进行排序
EN

Stack Overflow用户
提问于 2013-04-20 05:31:30
回答 1查看 560关注 0票数 1

我认为以下是一种编程练习,而不是一种基于统计数据的做事方式。

基本上,我想用一个预测变量运行N逻辑回归,然后为每个变量存储变量名和它的chi-squared值。在所有预测完成后,我希望显示每个预测变量按卡方从最高到最低的顺序。

到目前为止,我有以下几点:

代码语言:javascript
复制
local depvar    binvar1
local indepvars predvar1 predvar2 predvar3

* expand and check collinearity *
_rmdcoll `depvar' `indepvars', expand
local indepvars "`r(varlist)'"

* first order individual variables by best chi-squared *
local vars
local chis
foreach v in `indepvars' {
    di "RUN: logistic `depvar' `v'"
    quietly logistic `depvar' `v'

    * check if variable is not omitted (constant and iv) *
    if `e(rank)' < 2 {
        di "OMITTED (rank < 2): `v'"
        continue
    }

    * check if chi-squared is > 0 *
    if `e(chi2)' <= 0 {
        di "OMITTED (chi2 <= 0): `v'"
        continue
    }

    * store *
    local vars "`vars' `v'"
    local chis "`chis' `e(chi2)'"
    di "ADDED: `v' (chi2: `e(chi2)')"
}

* ... now sort each variable (from varlist vars) by chi2 (from varlist chis) ... * 

我如何根据最后一行返回的卡方对每个变量进行排序,然后显示变量列表,并按从最高卡方到最低卡方的顺序排列变量的卡方?

需要明确的是,如果由上述原因导致的变量列表如下:

代码语言:javascript
复制
local vars predvar1 predvar2 predvar3
local chis 2 3 1

然后,我想得到类似以下的东西:

代码语言:javascript
复制
local ordered predvar2 3 predvar1 2 predvar3 1

或者,或者,

代码语言:javascript
复制
local varso predvar2 predvar1 predvar3
local chiso 3 2 1
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-20 08:01:58

这里有一种方法可以做到。

代码语言:javascript
复制
local depvar    binvar1
local indepvars predvar1 predvar2 predvar3

* expand and check collinearity *
_rmdcoll `depvar' `indepvars', expand
local indepvars "`r(varlist)'"

* first order individual variables by best chi-squared *

gen chisq = . 
gen vars = "" 
local i = 1 

foreach v in `indepvars' {
     di "RUN: logistic `depvar' `v'"
     quietly logistic `depvar' `v'

     * check if variable is not omitted (constant and iv) *
     if `e(rank)' < 2 {
          di "OMITTED (rank < 2): `v'"
     }

     * check if chi-squared is > 0 *
     else if `e(chi2)' <= 0 {
          di "OMITTED (chi2 <= 0): `v'"
     }

     * store *
     else {  
          quietly replace vars  = "`v'" in `i' 
          quietly replace chisq = -e(chi2) in `i' 
          local ++i   
          di "ADDED: `v' (chi2: `e(chi2)')"
     }
}

sort chisq
replace chisq = -chisq 
l vars chisq if chisq < ., noobs 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16113800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档