Logistic回归NA错误

时间:2013-04-21 23:13:08

标签: r

我正在尝试运行逻辑回归并不断出现“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 

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分: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(数据)并描述了你真正想做的事情,你会得到更好的答案。我关于如何对数据进行子集化的建议会保留列名称,最终会得到更自我记录的代码。