Как регрессировать Y на переменной партнера X? - PullRequest
2 голосов
/ 26 сентября 2019

Я исследую определенные эффекты в семье / между партнерами.У меня есть paneldata (человеко-год) для нескольких переменных и идентификатор партнера.Я хотел бы регрессировать результат человека на зависимые переменные значения своего партнера.Я не знаю, как сделать эту спецификацию в Stata.

* Example generated by -dataex-. To install: ssc install dataex
clear
input float(year id pid y x)
1 1 3  9  2
2 1 3 10  4
3 1 . 11  6
1 2 4 20  2
2 2 4 21  6
3 2 3 22  7
1 3 1 25  5
2 3 1 30 10
3 3 2 35 15
1 4 2 20  4
2 4 2 30  6
3 4 . 40  8
end

* pooled regression
reg y x

* fixed effects regression
xtset year id
xtreg y x, fe

Я могу делать регрессии с пулами и фиксированными эффектами.Но даже для объединенной / простой регрессии, как я могу регрессировать чей-то результат по чьей-то независимой переменной?

На самом деле для человека 1 мне нужно регрессировать 9/10/11 5/10 /.и т. д.

  • Лицо 2: регресс 20/21/22 на 4/6/15
  • Лицо 3: регресс 25/30/35 на 2/4/7
  • Человек 4: регресс 20/30/40 на 2/6 /.

Идея : Если в функции regress нет опции, ядумаю, я мог бы создать новые переменные для каждой независимой переменной и назвать ее x_partner.В этом примере x_partner должен содержать 5,10,., 4,6,15,2,4,7,2,6 ,.но я до сих пор не знаю, как этого добиться.

bysort id (year): egen x_partner = x[pid] // rough idea

1 Ответ

1 голос
/ 26 сентября 2019

Грубая идея не сработает.Для egen нужна одна из своих функций, и это делает синтаксис недопустимым.

Но суть здесь в том, чтобы искать значения партнера и вводить новые переменные, выровненные по каждому идентификатору.

Спасибо за использование dataex.

rangestat от SSC, команды, предоставленной сообществом, допускает однострочное решение.Рассмотрим

* Example generated by -dataex-. To install: ssc install dataex
clear
input float(year id pid y x)
1 1 3  9  2
2 1 3 10  4
3 1 . 11  6
1 2 4 20  2
2 2 4 21  6
3 2 3 22  7
1 3 1 25  5
2 3 1 30 10
3 3 2 35 15
1 4 2 20  4
2 4 2 30  6
3 4 . 40  8
end

ssc install rangestat 

rangestat wanted_y=y wanted_x=x if !missing(id, pid), interval(id pid pid) by(year) 

list, sepby(id) 

     +-------------------------------------------------+
     | year   id   pid    y    x   wanted_y   wanted_x |
     |-------------------------------------------------|
  1. |    1    1     3    9    2         25          5 |
  2. |    2    1     3   10    4         30         10 |
  3. |    3    1     .   11    6          .          . |
     |-------------------------------------------------|
  4. |    1    2     4   20    2         20          4 |
  5. |    2    2     4   21    6         30          6 |
  6. |    3    2     3   22    7         35         15 |
     |-------------------------------------------------|
  7. |    1    3     1   25    5          9          2 |
  8. |    2    3     1   30   10         10          4 |
  9. |    3    3     2   35   15         22          7 |
     |-------------------------------------------------|
 10. |    1    4     2   20    4         20          2 |
 11. |    2    4     2   30    6         21          6 |
 12. |    3    4     .   40    8          .          . |
     +-------------------------------------------------+
...