首页 文章

根据以前的模型输出重新设置R中的glm模型

提问于
浏览
0

我有这个数据集,我在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都缺少一个值 .

理解的问题

  • glm函数中的〜是1?我之前没有看过1,所以不知道怎么读 .

  • 为什么列值附加到摘要输出中的列名?

  • 为什么列的所有可能值都没有附加到列名称中,其中列名称附加了一些值?

代码问题

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

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

colnames输出

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

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

EDIT

根据下面schalange发布的答案,我在R中查找了虚拟变量 . 在这个post上有几种创建虚拟变量的方法 . 对于非数字列:col5,col6和col7,它们都有一组预定义的值,我运行了createDummyFeatures函数,然后对从原始模型中出来的列运行glm,其中p值<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

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

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

相关问题