4

我正在尝试运行逻辑回归并不断收到“NA”错误。问题是它说有 NA 的列没有 NA 其全部为 0 或 1。我的代码如下:

#V1=race, V2=momcounts of breast cancer, V3=prstatus, V4=erstatus, V5=her2status, V6=triplenegative,      V7=menopause, V8=agemenopause, V9=mentype, V10=mensurg, V11=bmi, V12=eversmok, V13=age, V14=breastfeed, V15=breastfeedmonths, V16=pregnum, V17=birthcount, V18=agefirstpreg, 

regressiondata <- as.data.frame(cbind((data[,'race']),(data[,'mom_countsofbreastcancer']),(data[,'prstatus']),(data[,'erstatus']),(data[,'her2status']),(data[,'triplenegative']),(data[,'menopause']),(data[,'agemenopause']),(data[,'mentype']),(data[,'mensurg']),(data[,'bmi']),(data[,'eversmok']),(data[,'age']),(data[,'breastfeed']),(data[,'breastfeedmonths']),(data[,'pregnum']),(data[,'birthcount']),(data[,'agefirstpreg'])), stringsAsFactors=F)

dataAA=regressiondata[regressiondata$V1==2,]  #AA
glm(V6 ~ V2+V7+V8+V10+V11+V12+V13+V14+V15+V16+V17+V18, family=binomial, data=dataAA)

我也尝试了 lm() ,但仍然出现错误:

lm(formula=V6~V2+V7+V8+V10, data=dataAA)

错误:

Coefficients:
(Intercept)           V2           V7           V8          V10          V11  
   1326.433      -17.262           NA      -31.174      -34.108        0.525  
        V12          V13          V14          V15          V16          V17  
      2.281       11.060           NA        1.154      -50.258           NA  
        V18  
    -12.277  

Degrees of Freedom: 12 Total (i.e. Null);  3 Residual
  (1474 observations deleted due to missingness)
Null Deviance:      16.05 
Residual Deviance: 3.49e-10     AIC: 20 
Warning message:
glm.fit: fitted probabilities numerically 0 or 1 occurred 
4

2 回答 2

5

看起来 V17 是模型中其他变量的线性组合,因此 R 会自动排除它。您的逻辑回归输出看起来没有任何问题。

(顺便说一句:我会非常担心您的逻辑回归中发生的列表删除,看起来在删除了 1474 个缺少数据的观察后,您还剩下 15 个观察......或者我错了吗?)

于 2013-04-21T23:36:34.693 回答
4

这个结构是错误的,错误的,错误的,错误的:

as.data.frame(cbind((data[,'race']),(dat .....)

如果要对数据框的列进行子集化,请不要使用cbind. 而是使用这样的东西:

regressiondata <- data[ , c('race', 'mom_countsofbreastcancer', 'prstatus', 'erstatus', 
                        'her2status', 'triplenegative', 'menopause', 'agemenopause', 
                        'mentype', 'mensurg', 'bmi', 'eversmok', 'age', 'breastfeed', 
                        'breastfeedmonths', 'pregnum', 'birthcount', 'agefirstpreg')]

如果您想使用 glm 使用数据框的子集,请使用:

 glm(V6 ~ V2+V7+V8+V10+V11+V12+V13+V14+V15+V16+V17+V18, family=binomial, 
         data=gregressiondata, subset = race==2)

这是对您命名的数据框如何data开始的一些猜测,如果您发布 str(data) 并描述您真正想要做的事情,您会得到更好的答案。我关于如何对数据进行子集化的建议将保留列名,并且您最终会得到更加自我记录的代码。

于 2013-04-22T01:58:55.947 回答