我正在处理一些真实世界的数据,回归模型产生了一些违反直觉的结果。通常我相信统计数据,但实际上其中一些事情不可能是真的。我看到的主要问题是一个变量的增加导致响应增加,而实际上,它们必须是负相关的。
有没有办法为每个回归系数强制一个特定的符号?任何执行此操作的 R 代码也将不胜感激。
感谢您的任何帮助!
我正在处理一些真实世界的数据,回归模型产生了一些违反直觉的结果。通常我相信统计数据,但实际上其中一些事情不可能是真的。我看到的主要问题是一个变量的增加导致响应增加,而实际上,它们必须是负相关的。
有没有办法为每个回归系数强制一个特定的符号?任何执行此操作的 R 代码也将不胜感激。
感谢您的任何帮助!
可能有这样的方法,但我会说在你的情况下这是不可取的。
如果您的结果是不可能的:
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