根据以前的模型输出

时间:2017-03-29 05:34:21

标签: r logistic-regression glm

我有这个数据集,我在R中进行逻辑回归。我有几个关于输出的问题,这可能是由于我对统计数据和R缺乏了解而导致的问题,然后是关于基于p-减少模型的问题。电流输出值。

我给出的命令是:

model = glm(col1 ~ 1+(col2+col3+col4+col5+col6+col7)^2, family=binomial, data=ds)
summary(model)

列包含以下数据

col1 has values of 0 and 1
col2 is an integer
col3 is an integer
col4 is an integer
col5 has values of horrible, bad, good, excellent
col6 has values of a, b, c
col7 has values of true and false

系数和p值输出的一部分

col1            0.2824
col2            0.3457
col3            0.7845
col4            0.1451
col5horrible        0.0541*
col5bad         0.5641
col5excellent       0.2354
col6a           0.0025**
col6b           0.6245
col7TRUE        0.4145
col1:col2       0.0124*
col1:col3       0.8401
col1:col4       0.3154
col1:col5horrible   0.0054**
col1:col5bad        0.2149
col1:col5excellent  0.0035**
col1:col6a      0.2487
col1:col6b      0.0354*
col1:col7TRUE       0.5647

我注意到的第一件事是对于col5,col6和col7,输出不仅仅是col1,col2,col3和col4的列名,而是ColnameValue。我注意到的第二件事是,对于将值附加到列名称的列,并非所有可能的值都附加到列名称,但实际上col5,col6和col7都缺少一个值。 / p>

理解的问题

  1. glm函数中的~1是什么?我之前没有见过1,所以不知道怎么读。
  2. 为什么列值会附加到摘要输出中的列名?
  3. 为什么列的所有可能值都没有附加到列名称中附加了某些值的列名?
  4. 代码问题

    我想减少模型以确定它是否可以更好地适应。建议是从当前模型中删除超过某个p值的预测变量。这是我到目前为止所做的,但是一旦我有了列名以及如何将ColnameValue列放入模型中,我不确定下一步该做什么。

    p=coef(summary(model))[,4]
    colnames=names(p[p<0.1])
    colnames
    

    colnames output

    "col5horrible"
    "col6a"
    "col1:col5horrible"
    "col1:col5excellent"
    "col1:col6b"
    

    我的下一步是什么?或者有更好的方法吗?如何处理值附加到列名称的事实?

    修改

    根据下面schalange发布的答案,我在R中查找了虚拟变量。在post上有几种创建虚拟变量的方法。对于非数字列:col5,col6和col7,它们都有一组预定义的值,我运行了函数createDummyFeatures,然后在原始模型出来的列上运行glm,其中p值为&lt; 0.1。这是根据系数的p值减少原始模型的正确方法吗?

    install.packages("mlr")
    library(mlr)
    
    ds<-createDummyFeatures(ds, cols = "col5")
    ds<-createDummyFeatures(ds, cols = "col6")
    ds<-createDummyFeatures(ds, cols = "col7")
    
    model2 = glm(col1 ~ 1+(col5.horrible + col6.a +col5.excellent + col6.b))
    summary(model2)
    

1 个答案:

答案 0 :(得分:0)

首先,在估算模型之前,您应该更加确定变量的真正含义。 R试图估计变量的系数。当列的“值”“可怕”时,这很难做到。那么R做了什么(哪个是明智的做法),它将那些列5,6和7视为因子/作为虚拟变量。 (你可能想谷歌,你会发现很多信息。) 基本思想是,例如,True和False是不同的数据组。 R估计与您提到的每个组的截距相对应的内容。但是,这只能针对每列的k-1类别进行,这是因为您只有TRUE值,但不是FALSE(谷歌虚拟陷阱)。我不能确定,因为我没有关于团体性质的任何细节,但在极少数情况下,你不能保持可怕而不保留其他两个,优秀和坏。将它们视为组或名称,而不是值。

最后一件事:如果你想要一个更好拟合的模型(意味着它可以解释更多的方差,R ^ 2更高),减少变量不是要走的路,它会让你的模型不太精确。然而,它仍然可以是一种改进,因为低于某个阈值的事物是重要的决定因素,并且您可以相对确定它们具有真正的效果。互联网提供了大量的东西来帮助你解决p值。