R 在汽车软件包中使用boxTidwell函数并得到一个奇怪的错误

R 在汽车软件包中使用boxTidwell函数并得到一个奇怪的错误,r,logistic-regression,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

我试图在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(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行),这一点很明显

lm.fit(cbind(1,x.log.x,x1.p,x2),y,…)中的错误:NA/NaN/Inf在 “x”

注意:在OP的帖子中,
data.frame
是在转换为
矩阵
(使用
cbind
)后创建的。这是有问题的,因为
矩阵
只能容纳一个类,所有列都转换为
因子
,使用
as.data.frame
(或者
字符
,如果
stringsafactors=FALSE

数据
set.seed(24)

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

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


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

对。我知道。我在我的问题中说了这一点。你能详细介绍一下这个回答吗?我尝试在第一个参数中使用2个变量,效果很好
boxTidwell(结果~age+X1,~gender,data=df)
。不确定是否与dfs相关。顺便说一句,
as.data.frame(cbind
不推荐使用,因为它通过转换为矩阵来转换为单个数据类型。这将是
df,谢谢。但我正在尝试让它与3一起工作。我认为您的数据对于构建模型的算法来说很小。请检查下面的解决方案
boxTidwell(outcome~age+X1+X2, ~gender, data=df[1:8,])
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))