Возможно ли в R (или вообще) заставить коэффициенты регрессии быть определенным знаком?

10

Я работаю с некоторыми реальными данными, и регрессионные модели дают противоречивые результаты. Обычно я доверяю статистике, но на самом деле некоторые из этих вещей не могут быть правдой. Основная проблема, которую я вижу, состоит в том, что увеличение одной переменной вызывает увеличение отклика, когда на самом деле они должны иметь отрицательную корреляцию.

Есть ли способ заставить определенный знак для каждого из коэффициентов регрессии? Любой код R для этого также будет оценен.

Спасибо за любую помощь!

JRW
источник
9
Смотрите stat.columbia.edu/~gelman/stuff_for_blog/… .
Дмитрий Васильевич Мастеров
1
Может быть связано здесь
Я считаю, что эта ссылка r-bloggers.com/positive-coefficient-regression-in-r отвечает на вопрос @ JRW о значениях R-квадрата. Как уже отмечалось, следует проявлять осторожность, прежде чем форсировать положительные значения коэффициентов.
Esme_

Ответы:

11
  1. остерегайтесь различия между предельной корреляцией и частичной корреляцией (корреляция, обусловленная другими переменными). Они могут на законных основаниях иметь разные признаки.

    corr(Y,Xi)

  2. 00nnls

    Однако я предостерегаю вас от поспешного игнорирования пунктов 1. просто потому, что многие из них легко реализуются.

    * (вы можете использовать программы, которые делают неотрицательные, чтобы сделать не положительные, отрицая соответствующую переменную)

Glen_b - Восстановить Монику
источник
10

Вполне может быть такой способ, но я бы сказал, что это не рекомендуется в ваших обстоятельствах.

Если у вас есть результат, который также невозможен:

1) есть проблема с вашими данными 2) есть проблема с вашим определением "невозможно" или 3) вы используете неправильный метод

Сначала проверьте данные. Во-вторых, проверьте код. (Или попросите других проверить это). Если оба в порядке, возможно, происходит что-то неожиданное.

К счастью для вас, у вас есть простая «невозможность» - вы говорите, что две переменные не могут быть положительно коррелированы. Итак, сделайте точечный график и добавьте сглаживатель и посмотрите. Единственный выброс может вызвать это; или это могут быть нелинейные отношения. Или что-то другое.

Но если вам повезет, вы найдете что-то новое. Как говорил мой любимый профессор: «Если ты не удивлен, ты ничему не научился».

Питер Флом
источник
(+1 к Питеру и Глену) @JRW - Если вы все-таки исправите знак, я бы хотел быть мухой на стене, когда вы пытаетесь объяснить своей аудитории коэффициент, который вы «получили», и его доверительный интервал. Более того, они могут законно спросить: вы исправили знак и / или ряд других? Если нет, то почему нет?
rolando2
6

Чтобы ответить на ваш конкретный вопрос, вы можете попробовать пакет 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  
Innuo
источник
Я просто немного поигрался с этим пакетом nnls. Есть ли какой-нибудь способ получить скорректированное значение R-квадрата (или что-то эквивалентное), или я должен был бы попытаться вычислить его сам?
JRW