我试图在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”将被忽略
我不确定问题是什么,我认为这是因为我使用的是二元结果。任何建议都将不胜感激
答案 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
是在转换为matrix
(cbind
后)时创建的。这是有问题的,因为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))