【问题标题】:Specifying formula in R with glm without explicit declaration of each covariate使用 glm 在 R 中指定公式而不显式声明每个协变量
【发布时间】:2011-04-05 01:48:29
【问题描述】:

我想在不完全指定每个变量的情况下强制将特定变量纳入 glm 回归。我的真实数据集有大约 200 个变量。到目前为止,我无法在我的在线搜索中找到这方面的样本。

例如(只有 3 个变量):

n=200
set.seed(39) 
samp = data.frame(W1 = runif(n, min = 0, max = 1), W2=runif(n, min = 0, max = 5)) 
samp = transform(samp, # add A
A = rbinom(n, 1, 1/(1+exp(-(W1^2-4*W1+1))))) 
samp = transform(samp, # add Y
Y = rbinom(n, 1,1/(1+exp(-(A-sin(W1^2)+sin(W2^2)*A+10*log(W1)*A+15*log(W2)-1+rnorm(1,mean=0,sd=.25))))))

如果我想包含所有主要术语,这有一个简单的捷径:

glm(Y~., family=binomial, data=samp)

但假设我想包括所有主要术语(W1、W2 和 A)加上 W2^2:

glm(Y~A+W1+W2+I(W2^2), family=binomial, data=samp)

这有捷径吗?

[在发布前编辑自己:]这行得通! glm(formula = Y ~ . + I(W2^2), family = binomial, data = samp)

好的,那这个呢!

我想省略一个主要术语变量,只包括两个主要术语(A,W2)和 W2^2 和 W2^2:A:

glm(Y~A+W2+A*I(W2^2), family=binomial, data=samp)

显然,只有几个变量不需要捷径,但我使用的是高维数据。当前数据集“仅”有 200 个变量,但其他一些数据集有数千个。

【问题讨论】:

  • 哦哇哦,很抱歉,我的第二个问题我也刚想通! glm(Y~.-W1+A*I(W2^2), family=binomial, data=samp) 希望这对其他人有帮助,所以在这里也不错。

标签: r main regression glm


【解决方案1】:

您创造性地使用. 来构建包含所有或几乎所有变量的公式是一种很好且干净的方法。有时有用的另一个选项是以编程方式将公式构建为字符串,然后使用 as.formula 将其转换为公式:

vars <- paste("Var",1:10,sep="")
fla <- paste("y ~", paste(vars, collapse="+"))
as.formula(fla)

当然,您可以让fla 对象的方式更复杂。

【讨论】:

    【解决方案2】:

    Aniko 回答了你的问题。稍微扩展一下:

    您还可以使用 - 排除变量:

    glm(Y~.-W1+A*I(W2^2), family=binomial, data=samp)
    

    对于大量的变量,我经常为变量分组制作一个框架,这样您就可以执行以下操作:

    vars <- data.frame(
        names = names(samp),
        main = c(T,F,T,F),
        quadratic =c(F,T,T,F),
        main2=c(T,T,F,F),
        stringsAsFactors=F
    )
    
    
    regform <- paste(
        "Y ~",
        paste(
          paste(vars[vars$main,1],collapse="+"),
          paste(vars[1,1],paste("*I(",vars[vars$quadratic,1],"^2)"),collapse="+"),
          sep="+"
        )
    )
    > regform
    [1] "Y ~ W1+A+W1 *I( W2 ^2)+W1 *I( A ^2)"
    
    > glm(as.formula(regform),data=samp,family=binomial)
    

    使用各种条件(名称、结构等)填充数据框,使我能够快速选择大型数据集中的变量组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      • 1970-01-01
      • 2022-12-06
      • 1970-01-01
      相关资源
      最近更新 更多