为什么“重新安装”无法使用我的逻辑回归?

时间:2013-06-09 16:59:43

标签: 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。

我做错了什么?

1 个答案:

答案 0 :(得分:2)

我不确定这里发生了什么。您的问题中没有足够的信息可讲。 (你可能想要阅读这个帖子: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