对r中的每个唯一的两列配对执行长格式线性回归(当另一列中存在重复时),确定响应时间=0

cnwbcb6i  于 2023-10-13  发布在  其他
关注(0)|答案(2)|浏览(97)

有一个准长格式的df:

df <- data.frame(X= c(1,2,1,2,1,2,1,2),
                 Y= c(1,2,1,2,1,2,1,2),
                 variable = c("A","A","B","B","A","A","B","B"),
                 value = c(.5,.6,1000,1000,.7,.8,2000,2000))

目标是,对于每个唯一的X,Y配对(有2个),1.)用变量A(其相关值)作为响应变量,用变量B作为预测变量(其相关值)执行lm,然后2.)确定(如果可能的话绑定)生成响应值0的预测变量值。
我已经将变量列转换为factor,然后尝试pivot_wider,pivot_longer,dcast等。显然没有用,因为变量有重复的名称(如果转换为因子,则为因子水平)。在没有进一步旋转的情况下,很可能可以运行lm并确定0点,然后将其绑定到每个唯一X,Y配对的原始df。
这是要填充最后一列的所需输出的示例:

desired <-  data.frame(X= c(1,2),
                   Y= c(1,2),
                   pred_value_B_when_response_A_equals_0 = c(NA,NA))

根据要求,这是原始的宽格式

df_wide <- data.frame(X=c(1,2),
                      Y=c(1,2),
                      A=c(.5,.6),
                      B=c(1000,1000),
                      A1=c(.7,.8),
                      B1=c(2000,2000))

然后我表演了

df <- reshape2::melt(df_wide,
                      id.vars = c("X","Y"))
qnakjoqk

qnakjoqk1#

使用宽数据,将其更改为如下所示:

new_dat <- df_wide %>%
  rename_with(~str_replace(.x,'(A|B)$', '\\10')) %>%
  pivot_longer(A0:B1, names_to = c('.value', 'grp'),
               names_pattern = '(.)(.)')

     X     Y grp       A     B
  <dbl> <dbl> <chr> <dbl> <dbl>
1     1     1 0       0.5  1000
2     1     1 1       0.7  2000
3     2     2 0       0.6  1000
4     2     2 1       0.8  2000

现在在上面的数据中,你可以很容易地按X和Y分组,并运行A对B的线性模型:

new_dat %>% 
  summarise(model=list(lm(A~B)), .by = c(X,Y))

# A tibble: 2 × 3
      X     Y model 
  <dbl> <dbl> <list>
1     1     1 <lm>  
2     2     2 <lm>

现在,您可以使用每组拟合的线性模型进行预测等

r7xajy2e

r7xajy2e2#

new_dat <- pivot_longer(df_wide,cols = -c(X,Y), 
                                  names_to = c('.value', 'grp'), 
                                  names_pattern = '([a-zA-Z]+)(\\d+)')

解决了这个问题。

相关问题