Я пытаюсь выполнить регрессию, передавая блокировку каждой машины по ссылке

#r

#r

Вопрос:

Я хочу выполнить регрессию с передачей Bablock, выполнив a group_by() , что позволило бы мне выполнить регрессию параметров P1 4 машин ( MACHINE столбца) с P1_ref помощью , и сделать то же самое для P2 и P2_ref .

 require(mcr)
df_reg <- cbind(MACHINE = c("M1", "M1", "M1", "M1", "M1", "M1", "M1" ,"M1", "M1" ,"M1", "M2",
                            "M2", "M2", "M2", "M2", "M2", "M2", "M2" ,"M2", "M2", "M3", "M3",
                            "M3", "M3", "M3", "M3", "M3", "M3", "M3", "M3", "M4", "M4" ,"M4",
                            "M4", "M4", "M4", "M4", "M4", "M4", "M4"),
                P1 = c(2.09 ,3.71, 4.71, 4.30, 4.45, 3.29, 1.96, 3.01, 3.33, 3.30, 2.06, 3.81, 4.53,
                       4.55, 4.62, 3.51, 2.01, 3.08, 3.53, 3.48, 2.06, 3.74, 4.60, 4.41, 4.46, 3.37,
                       1.95, 3.00, 3.25, 3.32, 2.06, 3.78, 4.55, 4.29, 4.47, 3.29, 1.91, 2.92, 3.23,
                       3.22),
                P2 = c(6.16,4.28, 4.62,  1.21,  7.09,  7.82, 10.84,  3.50,  2.98,  2.70,  6.15,  4.45,
                4.77,  1.90,  7.94,  8.07,11.13,  3.65,  3.33,  2.78,  6.05,  4.34,  4.60,  1.85,
                7.89,  8.10, 11.72,  3.79,  3.20,  2.91,  6.16,4.47,4.66,  1.85,  7.78,  7.96, 11.16,
                3.63,3.24,2.88),
                MACHINE_REF = c("REF", "REF" ,"REF", "REF", "REF" ,"REF", "REF", "REF", "REF", "REF", 
                                "REF", "REF" ,"REF", "REF", "REF" ,"REF",
                                "REF", "REF", "REF", "REF", "REF", "REF", "REF" ,"REF", "REF", "REF", "REF", "REF", "REF",
                                "REF" ,"REF", "REF","REF", "REF", "REF", "REF" ,"REF", "REF",
                                "REF", "REF"),
                P1_ref = c( 1.935, 3.735, 4.765, 4.505, 4.680, 3.385, 1.885, 2.935, 3.350, 3.290,
                            1.935, 3.735, 4.765, 4.505, 4.680, 3.385,1.885, 2.935, 3.350, 3.290,
                            1.935, 3.735, 4.765, 4.505, 4.680, 3.385, 1.885 ,2.935, 3.350, 3.290,
                            1.935, 3.735, 4.765 ,4.505, 4.680, 3.385, 1.885, 2.935, 3.350, 3.290),
                P2_ref = c( 6.255, 4.700,  4.945,  2.055,  8.430,  9.130, 12.155,  3.990,  3.715,
                            3.285 , 6.255,  4.700,  4.945,  2.055,8.430,  9.130, 12.155 , 3.990,
                            3.715 , 3.285,  6.255,  4.700,  4.945,  2.055,  8.430,  9.130, 12.155,
                            3.990,3.715,  3.285,  6.255,  4.700,  4.945,  2.055,  8.430,  9.130,
                            12.155,  3.990,  3.715,  3.285)) %>% data.frame

df_reg <- df_reg %>%
  mutate_at(vars(-MACHINE, -MACHINE_REF), as.character)

df_reg <- df_reg %>%
  mutate_at(vars(-MACHINE, -MACHINE_REF), as.numeric)

M1 <- df_reg %>%
  filter(MACHINE %like% "M1") %>%
  drop_na(MACHINE)

M2 <- df_reg %>%
  filter(MACHINE %like% "M2") %>%
  drop_na(MACHINE)
  

Ответ №1:

Я помещаю каждую машину в список, а параметры машин и ссылку в 2 разных векторах.

 to_numeric_f <- function(df,...){
  df <- df %>% mutate_at(vars(...),as.character)
  df <- df %>% mutate_at(vars(...), as.numeric)
  df
}
df <- to_numeric_f(df, -1,-4)

M_list <- vector("list")
for(i in 1:length(names(table(df$MACHINE)))){
  M_list[[i]] <- df %>%
    filter(MACHINE ==names(table(df$MACHINE))[i])
}
params_M <- colnames(df)[c(2,3)]
params_ref <- colnames(df)[c(5,6)]
fit_paba <- vector("list")
for(i in 1:length(M_list)){
  fit_paba[[i]] <- vector("list")
  for(j in 1:length(params_ref)){
    fit_paba[[i]][[j]] <-  mcreg(M_list[[i]][,params_ref[j]],
                                   M_list[[i]][,params_M[j]], method.reg = "PaBa")
  }
  
}