3

我正在使用特定方程的多元回归计算回归系数:

   w=c(1,5,4,5,4,8,7,9,2,4,5,7)
   g=c(1,5,2,5,4,8,7,9,3,5,6,6)
   k=c(1,5,2,5,4,8,7,9,2,4,5,7)
   m=c(1,5,2,5,4,9,8,10,3,5,6,8)
                     #w=a+bg+b1k+b2m : simple equation
  model1=lm(w~g+k+m)### worked fine
                 #w=a+b(log(1-g/m))+b1k+b2m  :my real equation
  model2=lm(w~(log(1-k/m))+k+m)

错误:

   Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : 
  NA/NaN/Inf in 'x'
4

3 回答 3

4

我见过的一件事是在 x <= 0 时将 log 重新定义为零。不过,这可能会给您带来有意义的结果,也可能不会。

R>log <- function(x) ifelse(x <= 0, 0, base::log(x))
R>  model2=lm(w~(log(1-k/m))+k+m)
R>summary(model2)

Call:
lm(formula = w ~ (log(1 - k/m)) + k + m)

Residuals:
        Min          1Q      Median          3Q         Max 
-0.87052532 -0.08901156 -0.05797844  0.04966100  1.32552690 

Coefficients:
               Estimate Std. Error  t value Pr(>|t|)
(Intercept)   1.0665775  0.5783614  1.84414  0.10239
log(1 - k/m) -1.1304104  1.0425403 -1.08428  0.30983
k             2.8191418  1.5634105  1.80320  0.10902
m            -2.0151940  1.6743261 -1.20359  0.26315

Residual standard error: 0.5756576 on 8 degrees of freedom
Multiple R-squared:  0.9564806, Adjusted R-squared:  0.9401609 
F-statistic: 58.60876 on 3 and 8 DF,  p-value: 8.672263e-06
于 2013-10-23T23:55:18.947 回答
3

这是你的问题:

> log(1-k/m)
 [1]      -Inf      -Inf      -Inf      -Inf      -Inf -2.197225 -2.079442 -2.302585 -1.098612 -1.609438 -1.791759 -2.079442
于 2013-10-23T14:49:33.150 回答
1

摆脱零值,

找出零处的所有值:

inds <- (1-k) != 0

然后要么创建新变量,要么修改当前变量

w <- w[inds]
m <- m[inds]
k <- k[inds]

model2 <- lm(w~(log(1-k/m))+k+m)
于 2013-10-23T15:14:49.023 回答