我正在尝试运行逻辑回归并不断出现“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
答案 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(数据)并描述了你真正想做的事情,你会得到更好的答案。我关于如何对数据进行子集化的建议会保留列名称,最终会得到更自我记录的代码。