代码之家  ›  专栏  ›  技术社区  ›  lydias

按显著P值划分的子集变量

  •  2
  • lydias  · 技术社区  · 7 年前

    我试图通过有效的P值来子集变量,并尝试使用以下代码,但它只选择所有变量,而不是按条件选择。有人能帮我纠正这个问题吗?

    myvars <- names(summary(backward_lm)$coefficients[,4] < 0.05)
    happiness_reduced <- happiness_nomis[myvars]
    

    谢谢

    1 回复  |  直到 7 年前
        1
  •  6
  •   AntoniosK    7 年前

    使用 broom 包裹很遗憾,您尚未发布数据,因此我使用 mtcars 数据集作为演示:

    library(broom)
    
    # build model
    m = lm(disp ~ ., data = mtcars)
    
    # create a dataframe frm model's output
    tm = tidy(m)
    
    # visualise dataframe of the model
    # (using non scientific notation of numbers)
    options(scipen = 999)
    tm
    
    #           term    estimate   std.error   statistic       p.value
    # 1  (Intercept)  -5.8119829 228.0609389 -0.02548434 0.97990925639
    # 2          mpg   1.9398052   2.5976340  0.74675849 0.46348865035
    # 3          cyl  15.3889587  12.1518291  1.26639032 0.21924091701
    # 4           hp   0.6649525   0.2259928  2.94236093 0.00777972543
    # 5         drat   8.8116809  19.7390767  0.44640796 0.65987184728
    # 6           wt  86.7111730  16.1127236  5.38153418 0.00002448671
    # 7         qsec -12.9742622   8.6227190 -1.50466021 0.14730421493
    # 8           vs -12.1152075  25.2579953 -0.47965832 0.63642812949
    # 9           am  -7.9135864  25.6183932 -0.30890253 0.76043942893
    # 10        gear   5.1265224  18.0578153  0.28389494 0.77927112074
    # 11        carb -30.1067073   7.5513212 -3.98694566 0.00067029676
    
    # get variables with p value less than 0.05
    tm$term[tm$p.value < 0.05]
    
    # [1] "hp"   "wt"   "carb"
    

    主要的优点是,通过将模型的输出获取为数据帧,您可以使用变量名称,而不是变量位置和行名称来操作数据。

    我正在使用 options(scipen = 999) 更容易检查过滤是否起作用(即在数据帧中不使用数字的科学表示法)。