r - 为什么 "relevel"不适用于我的逻辑回归?

标签 r categorical-data

我正在尝试使用指令 relevel 将因子中的引用类别重新定义为最后一个类别。

起初,我得到了一个错误:

base1 <- within(base1, DPROS <- relevel(DPROS, ref = 4))  
Error in relevel.default(DPROS, ref = 4) : 'relevel' only for factors

我使用了 Epicalc 包的 des 指令来检查 DPROS 是数字还是因子:
des(base1)

No. of observations =  380   
  Variable      Class           Description  
1 CAPSULE       numeric                    
2 AGE           numeric                    
3 DPROS         numeric                    
4 DCAPS         numeric                    
5 PSA           numeric  

我使用 as.factor 使 DPROS 成为一个因素。
DPROS <- as.factor(DPROS)

但我仍然遇到同样的错误:
base1 <- within(base1, DPROS <- relevel(DPROS, ref = 4))  
Error in relevel.default(DPROS, ref = 4) : 'relevel' only for factors

使用 des 它仍然说 DPROS 是数字,但 is.factor(DPROS) 返回 TRUE。

我究竟做错了什么?

最佳答案

我不确定这里发生了什么。您的问题中没有足够的信息来说明。 (您可能想阅读此主题: how-to-make-a-great-r-reproducible-example ,并编辑您的 Q,特别是如果我下面的回答没有帮助。)另外,我怀疑您在

    DPROS <- as.`enter code here`factor(DPROS)  

我假设你的意思是:DPROS <- as.factor(DPROS) .

一种可能性是您附加了数据框。考虑:
> set.seed(9)
> base1 = data.frame(CAPSULE=rnorm(100), AGE=rnorm(100), 
+                    DPROS=as.numeric(sample(1:4, 100, replace=T)),
+                    DCAPS=rnorm(100), PSA=rnorm(100))
> attach(base1)
> des(base1)

 No. of observations =  100 
  Variable      Class           Description
1 CAPSULE       numeric                    
2 AGE           numeric                    
3 DPROS         numeric                    
4 DCAPS         numeric                    
5 PSA           numeric    

> base1 <- within(base1, DPROS <- relevel(DPROS, ref = 4))
Error in relevel.default(DPROS, ref = 4) : 'relevel' only for factors

> DPROS <- as.factor(DPROS)
> base1 <- within(base1, DPROS <- relevel(DPROS, ref = 4))
Error in relevel.default(DPROS, ref = 4) : 'relevel' only for factors

> des(base1)

 No. of observations =  100 
  Variable      Class           Description
1 CAPSULE       numeric                    
2 AGE           numeric                    
3 DPROS         numeric                    
4 DCAPS         numeric                    
5 PSA           numeric                    

> is.factor(DPROS)
[1] TRUE

这重现了您所描述的行为,据我所知,您发生了什么事。

如果您尝试以下操作,您会发现它可以正常工作:
> base1 <- within(base1, DPROS <- as.factor(DPROS))
> des(base1)

 No. of observations =  100 
  Variable      Class           Description
1 CAPSULE       numeric                    
2 AGE           numeric                    
3 DPROS         factor                     
4 DCAPS         numeric                    
5 PSA           numeric                    

> base1 <- within(base1, DPROS <- relevel(DPROS, ref = 4))

如果发生这种情况,则它是附加数据框在 R 中工作方式的固有部分。您可以更改已附加的变量,而无需更改数据框中的实际变量。正如@GavinSimpson 所指出的,通常最好避免使用 attach .

关于r - 为什么 "relevel"不适用于我的逻辑回归?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17012715/

相关文章:

r - [R]中的一键编码分类到虚拟变量

python - 类型错误 : cannot append a non-category item to a CategoricalIndex

r - 如何创建一个因子但保留基础值,而不仅仅是整数代码?

machine-learning - 在 H2O 中使用分类变量的最佳实践?

r - 在 R 中制作 "dropdown"函数

r - 无法在 R Markdown 中使用 Rcpp 引擎

gnuplot - 是否可以将 xticlabels 与 splot 结合起来?

根据 r 数据框中另一个分类变量的值重新编码分类变量

r - XTS 替换错误 NextMethod(.Generic) : number of items to replace

r - table() 的 as.data.frame 总结频率