我正在使用数据集中的变量运行线性回归
final2
这里是数据集的样本
nquest nord sex anasc ireg eta staciv studio tpens
173 1 1 1948 18 64 3 5 2500
375 1 2 1925 16 87 4 2 409
629 1 1 1939 5 73 4 3 1188
632 1 1 1950 5 62 1 3 1320
633 1 2 1934 5 78 4 2 350
1238 1 1 1937 15 75 4 3 1000
7886 1 1 1950 9 62 1 5 2000
11972 2 1 1938 17 74 1 2 750
20174 1 1 1941 8 71 1 5 2000
20174 2 2 1942 8 70 1 3 132
20223 1 2 1938 3 74 1 5 800
20223 2 1 1939 3 73 1 4 980
20711 2 1 1944 4 68 1 2 1900
20837 1 1 1931 8 81 1 4 1600
20837 2 2 1928 8 84 1 2 430
21461 1 2 1918 5 94 4 2 600
22173 1 1 1938 15 74 1 2 1200
22208 1 2 1935 5 77 4 2 700
22222 1 1 1927 5 85 4 2 1100
22276 1 1 1949 8 63 2 5 1170
如果我运行线性回归,它会起作用
> lm(tpens ~ sex + eta + ireg + studio, data = final2)
Call:
lm(formula = tpens ~ sex + eta + ireg + studio, data = final2)
Coefficients:
(Intercept) sex eta ireg studio
1401.511 -404.133 -4.882 -3.860 202.406
但是我需要用变量的
log
来运行它tpens
> lm(log(tpens) ~ sex + eta + ireg + studio, data = final2)
Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
NA/NaN/Inf in 'y'
你会认为变量
tpens
中有NA或0值,但事实并非如此
> which(is.na(final2$tpens))
integer(0)
> sum(final2$pens == 0, na.rm = TRUE)
[1] 0
事实上,如果我尝试在回归之外创建
log
的 tpens
,它会起作用
> head(log(final2$tpens))
[1] 7.824046 6.013715 7.080026 7.185387 5.857933 6.907755
> tail(log(final2$tpens))
[1] 7.279319 6.016157 7.258412 6.692084 6.684612 7.090077
我还检查了其他变量以确保
> which(is.na(final2$sex))
integer(0)
> which(is.na(final2$eta))
integer(0)
> which(is.na(final2$ireg))
integer(0)
> which(is.na(final2$studio))
integer(0)
这怎么可能?我真的需要用
log(tpens)
运行回归。我该如何解决?
更新
tpens
是一种工资,因此几乎不可能是0或-inf。
不过,我试过了
> summary(final2$tpens)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0 700 1035 1113 1400 8000
> sum(final$pens == 0, na.rm = TRUE)
[1] 0