限制R的回归和聚类SE

时间:2013-10-21 14:41:35

标签: r

我试图限制回归,只使用变量everevac == 1的数据点。我想出了一种方法,但我想知道是否有更好的方法。

在STATA中,我会运行这样的东西:

reg outcome y2006 age black male etc if everevac==1, cluster(persid)

我为R想出了这个:

fit <- ols(formula = outcome[everevac==1] ~ y2006[everevac==1] + 
             age[everevac==1] + black[everevac==1] + 
             male[everevac==1] + hsgrad[everevac==1] + 
             hsgrad[everevac==1] + someco[everevac==1] + 
             ba[everevac==1] + postgrad[everevac==1], x=TRUE, y=TRUE, data = ps2_new)
robcov(fit, cluster = ps2_new$persid[ps2_new$everevac==1])

注意我只是限制了所有的变量,使它变成var [everevac == 1] ..这甚至做了我认为它正在做的事情?有没有一种更好的方法呢?我尝试使用这样的“if”语句:

if(everevac==1){ <lm function above, taking out the [everevac==1] on each variable> }

但它不起作用。

2 个答案:

答案 0 :(得分:1)

将此参数添加到ols调用,然后不要通过外部值引用群集ID,而是通过将在fit - 对象的上下文中评估的名称引用只有subset - ed数据:

... , subset = everevac==1)

fit <- ols(formula = outcome ~ y2006 + 
                age + black + 
                male + 
                hsgrad + someco + 
                ba + postgrad,
            x=TRUE, y=TRUE, 
            data = ps2_new, subset = everevac==1)
robcov(fit, cluster = persid)

顺便说一句,在代码块中包含library(rms)被认为是有礼貌的。

答案 1 :(得分:0)

简单地索引数据框就足够了

fit <- ols(formula = outcome ~ y2006 + age + black + male + hsgrad + 
             hsgrad + someco + ba + postgrad, x=TRUE, y=TRUE, 
             data = ps2_new[ps2_new$everevac==1,])