R(或一般而言)是否可以强制回归系数成为某个符号?

机器算法验证 r 回归 回归系数 计算统计
2022-03-03 06:11:29

我正在处理一些真实世界的数据,回归模型产生了一些违反直觉的结果。通常我相信统计数据,但实际上其中一些事情不可能是真的。我看到的主要问题是一个变量的增加导致响应增加,而实际上,它们必须是负相关的。

有没有办法为每个回归系数强制一个特定的符号?任何执行此操作的 R 代码也将不胜感激。

感谢您的任何帮助!

3个回答
  1. 注意边际相关和偏相关(以其他变量为条件的相关)之间的区别。它们可能合法地具有不同的符号。

    也就是说实际上可能是负数,而多元回归中的回归系数是正数。这两件事不一定有任何矛盾。另见辛普森悖论,这有点相关(尤其是图表)。通常,您不能仅基于有关边际相关性的论点就推断回归系数必须是一个符号。corr(Y,Xi)

  2. 是的,当然可以将回归系数限制为 *。有几种方法可以做到这一点;其中一些可以在 R 中轻松完成,例如 via 另请参阅此问题的答案,其中提到了许多 R 包和其他可能的方法。00nnls

    但是,我警告您不要匆忙忽略 1. 中的要点,因为其中许多很容易实现。

    *(您可以通过否定相应的变量来使用非负数的程序来做非正数)

可能有这样的方法,但我会说在你的情况下这是不可取的。

如果您的结果是不可能的:

1)您的数据有问题 2)您对“不可能”的定义有问题或 3)您使用了错误的方法

首先,检查数据。其次,检查代码。(或请他人检查)。如果两者都很好,那么可能会发生一些意想不到的事情。

对你来说幸运的是,你有一个简单的“不可能”——你说两个变量不能正相关。因此,制作散点图并添加平滑器并查看。一个异常值可能会导致这种情况;或者它可能是非线性关系。或者是其他东西。

但是,如果你幸运的话,你会发现一些新的东西。正如我最喜欢的教授曾经说过的那样:“如果你不感到惊讶,那么你什么都没学到”。

要回答您的具体问题,您可以尝试使用对系数进行非负约束的最小二乘回归的nnls包。您可以通过更改相应预测变量的符号来使用它来获得所需的符号。

顺便说一句,这是一种创建数据集的非常简单的方法,以演示如何具有正相关和负回归系数。

> n <- rnorm(200)
> x <- rnorm(200)
> d <- data.frame(x1 = x+n, x2= 2*x+n, y=x)
> cor(d)
      x1        x2         y
 x1 1.0000000 0.9474537 0.7260542
 x2 0.9474537 1.0000000 0.9078732
 y  0.7260542 0.9078732 1.0000000
> plot(d)
> lm(y~x1+x2-1, d)

Call:
lm(formula = y ~ x1 + x2 - 1, data = d)

Coefficients:
x1  x2  
-1   1