在CAR包中使用boxTidwell函数并得到一个奇怪的错误

时间:2018-02-13 02:59:24

标签: r logistic-regression

我试图在r中的CAR包中使用boxTidwell函数来对连续数据运行多个测试。我的数据看起来像这样:

Gender Age    X1      X2   Outcome
  M    20.1   1.23   4.43     1
  F    19.5   2.33   3.21     0
  M    18.0   1.33   7.55     1
  M    17.2   3.22   6.44     0
  M    12.5   4.15   8.99     1
  F    14.2   5.15  10.22     0
  F    13.9   6.12  12.34     1 
  F     9.4   7.12   3.21     1

当我在数据帧上使用boxTidwell时,我收到错误

library(car)    
gender<-c("M","F","M","M","M","F","F","F")
    age<-c(20.1, 19.5, 18.0, 17.2, 12.5, 14.2, 13.9, 9.4)
    X1<-c(1.23,2.33,1.33,3.22,4.15,5.15,6.12,7.12)
    X2<-c(4.43,3.21,7.55,6.44,8.99,10.22,12.34,3.21)
    outcome<-c(1,0,1,0,1,0,1,1)
    df<-cbind(gender,age,X1,X2,outcome)
    as.data.frame(df)
    boxTidwell(outcome~age+X1+X2, ~gender, data=df)
  

boxTidwell.default中的错误(y,X1,X2,max.iter = max.iter,tol = tol,:     要转换的变量必须只有正值   另外:警告信息:   在model.response(mf,“numeric”)中:     使用带有因子响应的type =“numeric”将被忽略

我不确定问题是什么,我认为这是因为我使用的是二元结果。任何建议都将不胜感激

2 个答案:

答案 0 :(得分:1)

迟到聚会,但其他人可能会发现这很有用:

我收到相同的错误,因为我的二进制结果被编码为0、1级的因子。我将其更改为整数,并警告“在model.response(mf,“ numeric”)中:使用type =“ numeric “带有因子响应将被忽略”消失了。

这也应该消除其他警告;这似乎是由于boxTidwell无法使用零。一旦结果为整数/数值,则响应应为1、2,并且由于您的预测变量值中没有零或负,因此这一定是罪魁祸首。

答案 1 :(得分:0)

数据不足以使算法提出解决方案

boxTidwell(outcome~age+X1+X2, ~gender, data=df)
#     Score Statistic   p-value MLE of lambda
#age      -0.3575862 0.7206530      4.339394
#X1        0.3081380 0.7579773      3.377788
#X2       -0.9979096 0.3183232     29.886634

值得注意的是,我们将下面创建的数据子集化以模拟OP的数据(9行)

boxTidwell(outcome~age+X1+X2, ~gender, data=df[1:8,])
  

lm.fit中的错误(cbind(1,x.log.x,x1.p,x2),y,...):NA / NaN / Inf in   的 'x'

注意:在OP的帖子中,data.frame是在转换为matrixcbind后)时创建的。这是有问题的,因为matrix只能包含一个类,并且所有列都会转换为factor as.data.frame(或character如果stringsAsFactors = FALSE

数据

set.seed(24)
df <- data.frame(gender = sample(c("M", "F"), 100, replace = TRUE),
    age = rnorm(100, 20, 1), X1 = rnorm(100, 4, 1), X2 = rnorm(100, 10, 1),
    outcome = sample(0:1, 100, replace = TRUE))