У меня есть некоторые данные, которые выглядят примерно так:
Данные:
rank_A <- sample(x = 1:5, size = 100, replace = TRUE)
rank_B <- sample(x = 1:5, size = 100, replace = TRUE)
Y_A <- rnorm(n = 100)
Y_B <- rnorm(n = 100)
X <- rnorm(n = 100)
df <- data.frame(rank_A, rank_B, Y_A, Y_B, X)
Что выглядит так:
> tibble(df)
# A tibble: 100 x 1
df$rank_A $rank_B $Y_A $Y_B $X
<int> <int> <dbl> <dbl> <dbl>
1 5 1 0.128 -0.833 1.15
2 2 1 0.165 0.325 0.225
3 1 3 0.525 -0.632 0.390
4 5 3 -1.32 0.718 -0.377
5 4 2 -0.900 -0.364 -0.259
6 5 3 -1.17 0.556 -0.0702
7 4 1 -0.560 -1.66 -1.64
8 5 1 -2.01 -0.898 0.306
9 1 1 -2.56 0.693 1.34
10 4 2 0.338 -0.733 -0.481
# ... with 90 more rows
Итак, у меня есть два столбца рангаи соответствующий Y
для каждого ранга. A
и B
- это всего лишь две категории. Я хочу запустить две регрессии на Y_A
и Y_B
, обе регрессии на X
. У меня есть следующий код, который работает для rank_A
.
df_regs <- df %>%
group_by(rank_A) %>%
nest() %>%
mutate(
Reg_A = map(data,
~lm(Y_A ~ X,
data = .)
),
Reg_A_summary = map(Reg_A,
~summary(.)
)
)
df_regs$Reg_A_summary
Я хотел бы построить его так, чтобы мне не нужно было писать новый фрагмент кода для rank_B
. У меня много разных регрессий (разные X
переменные я дам каждому Y_A
и Y_B
). Я думал о том, чтобы сделать что-то вроде следующего (что не работает).
df %>%
mutate(Class_A = group_by(rank_A) %>%
nest() %>%
mutate(
Reg_A = map(data,
~lm(Y_a ~ X,
data = .)
)
),
Class_B = group_by(rank_B) %>%
nest() %>%
mutate(
Reg_B = map(data,
~lm(Y_b ~ X,
data = .)
)
)
)
Если вы знаете более чистый метод, пожалуйста, также дайте мне знать ваши мысли, так как у меня будет много регрессий.