2 votes

Résumer plusieurs colonnes à l'aide d'un test t pondéré

Je dispose des données suivantes et je souhaite calculer la valeur pondérée. J'ai examiné dplyr résume plusieurs colonnes en utilisant t.test . Mais ma version devrait utiliser le poids. Je peux utiliser Code2 pour le faire. Mais il y a plus de 30 colonnes. Comment puis-je calculer efficacement les valeurs p pondérées ?

Code 1

# A tibble: 877 x 5
   cat     population farms farmland weight
   <chr>        <dbl> <dbl>    <dbl>  <dbl>
 1 Treated       9.89  8.00     12.3  1    
 2 Control      10.3   7.81     12.1  0.714
 3 Control      10.2   8.04     12.4  0.156
 4 Control      10.3   7.97     12.1  0.340
 5 Control      10.9   8.87     12.7  2.85 
 6 Control      10.4   8.35     12.5  0.934
 7 Control      10.5   8.58     12.9  0.193
 8 Control      10.6   8.57     12.6  0.276
 9 Control      10.2   8.54     12.5  0.344
10 Control      10.5   8.76     12.6  0.625
# … with 867 more rows

Code 2

wtd.t.test(
  x = df$population[df$cat == "Treated"],
  y = df$population[df$cat == "Control"],
  weight = df$weight[df$cat == "Treated"],
  weighty = df$weight[df$cat == "Control"])$coefficients[3]

2voto

akrun Points 148302

Nous pouvons utiliser summarise con across

library(dplyr)
df %>%
   summarise(across(c(population:farmland),
   ~ weights::wtd.t.test(x = .[cat == 'Treated'],
                         y = .[cat == 'Control'], 
                         weight = weight[cat == 'Treated'],
                         weighty= weight[cat == 'Control'])$coefficients[3]))

Ou en utilisant lapply/sapply

sapply(df[2:4], function(v)
         weights::wtd.t.test(x = v[df$cat == "Treated"],
                             y = v[df$cat == "Control"],
                             weight = df$weight[df$cat == "Treated"],
                   weighty = df$weight[df$cat == "Control"])$coefficients[3])

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X