【问题标题】:How to do a regression of a series of variables without typing each variable name如何在不输入每个变量名称的情况下对一系列变量进行回归
【发布时间】:2016-11-28 04:12:09
【问题描述】:

我想用我的数据集中的一堆自变量运行回归。有很多预测因素,所以我不想把它们都写出来。是否有跨越多个列的符号,所以我不必键入每个?

我的尝试是这样做的(我的预测变量是第 20 到 43 列):

modelAllHexSubscales = lm(HHdata$garisktot~HHdata[,20:43])

显然,这不起作用,因为HHdata[,20:43] 是一个数据矩阵,而我确实需要它来将数据视为HHdata[,20]+HHdata[,21] 等。

【问题讨论】:

    标签: r


    【解决方案1】:

    这是另一种选择:

    # if garisktot is in columns 20:43
    modelAllHexSubscales <- lm(garisktot ~ ., data=HHdata[,20:43])
    # if it isn't
    modelData <- data.frame(HHdata["garisktot"],HHdata[,20:43])
    modelAllHexSubscales <- lm(garisktot ~ ., data=modelData)
    

    【讨论】:

    • @Joshua - 很好!我假设第一个 [] 中的 FALSE 会阻止生成的对象被折叠成向量?
    • @Chase:是的,这是保留列名所必需的。
    • 如果您只想从data.frame 中提取列,则不需要逗号:HHdata[20:43]HHdata["garisktot"](您不需要drop=FALSE
    • 单线版modelAllHexSubscales
    【解决方案2】:

    首先通过粘贴列名来生成公式。

    f <- as.formula(paste('garisktot ~', paste(colnames(HHdata)[20:43], collapse='+')))
    modelAllHexSubscales <- lm(f, HHdata)
    

    【讨论】:

    • 也许感兴趣:我昨天才知道,如果包含转换,将公式构建为字符串然后转换为公式的技巧也有效。例如在上面的示例中,将colnames(HHdata)[20:43] 替换为sapply(colnames(HHdata)[20:43], function(cc){gsub("X", cc, "I(X^2)", fixed=TRUE)})
    • 除非使用"I()" 会产生误导性的统计输出。了解如何使用poly
    • poly 反过来,在缺少值时不起作用,除非你使用 raw = TRUE - 但对我来说,结果(或者你的意思是什么 output?) 是一样的。
    【解决方案3】:

    你有没有试过直接做,如

    > y
    [1] 10 19 30 42 51 59 72 78
    
    > X
         [,1] [,2]
    [1,]    1  1.0
    [2,]    2  3.0
    [3,]    3  5.5
    [4,]    4  7.0
    [5,]    5  9.0
    [6,]    6 11.0
    [7,]    7 13.0
    [8,]    8 16.0
    
    > summary(lm(y ~ X))
    
    Call:
    lm(formula = y ~ X)
    
    Residuals:
          1       2       3       4       5       6       7       8 
    -0.1396 -1.2774  0.9094  1.4472  0.3094 -1.8283  1.0340 -0.4547 
    
    Coefficients:
                Estimate Std. Error t value Pr(>|t|)   
    (Intercept)   -2.647      2.004  -1.321  0.24366   
    X1            15.436      3.177   4.859  0.00464 **
    X2            -2.649      1.535  -1.726  0.14490   
    ---
    Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    
    Residual standard error: 1.363 on 5 degrees of freedom
    Multiple R-squared:  0.9978,    Adjusted R-squared:  0.9969 
    F-statistic:  1124 on 2 and 5 DF,  p-value: 2.32e-07
    

    【讨论】:

      猜你喜欢
      • 2011-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-29
      • 2022-01-02
      • 1970-01-01
      • 2013-02-19
      • 2018-05-04
      相关资源
      最近更新 更多