如何在R中解决多元回归的错误?

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'

7
0的对数是不存在的。 - Ricardo Saporta
1
这个问题似乎不适合讨论,因为它涉及到统计数据。 - Metrics
6
@Metrics,这个问题与统计学一样重要,就像“除以零”问题一样。 - Ricardo Saporta
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

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

3
您有很多选项,但在运行模型之前都需要进行预处理。您想如何处理log(0)值?删除它们:然后对数据进行子集化。使它们变得非常小:然后将Inf重新编码为-1e7或其他值。等等,等等。 - Thomas

1

为了去除零值,

查找所有为零的数值:

inds <- (1-k) != 0

然后,您可以创建新变量或修改当前变量。
w <- w[inds]
m <- m[inds]
k <- k[inds]

model2 <- lm(w~(log(1-k/m))+k+m)

3
另一种可能性是创建一个派生变量lkm <- log(1-k/m)并在回归中使用它;我认为R将自动检测“NA”情况并将其删除。 - Ben Bolker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接