我有这个数据集,我在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>
理解的问题
代码问题
我想减少模型以确定它是否可以更好地适应。建议是从当前模型中删除超过某个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)
答案 0 :(得分:0)
首先,在估算模型之前,您应该更加确定变量的真正含义。 R试图估计变量的系数。当列的“值”“可怕”时,这很难做到。那么R做了什么(哪个是明智的做法),它将那些列5,6和7视为因子/作为虚拟变量。 (你可能想谷歌,你会发现很多信息。) 基本思想是,例如,True和False是不同的数据组。 R估计与您提到的每个组的截距相对应的内容。但是,这只能针对每列的k-1类别进行,这是因为您只有TRUE值,但不是FALSE(谷歌虚拟陷阱)。我不能确定,因为我没有关于团体性质的任何细节,但在极少数情况下,你不能保持可怕而不保留其他两个,优秀和坏。将它们视为组或名称,而不是值。
最后一件事:如果你想要一个更好拟合的模型(意味着它可以解释更多的方差,R ^ 2更高),减少变量不是要走的路,它会让你的模型不太精确。然而,它仍然可以是一种改进,因为低于某个阈值的事物是重要的决定因素,并且您可以相对确定它们具有真正的效果。互联网提供了大量的东西来帮助你解决p值。