Как я могу сделать t-тест между подмножеством данных в кадре данных в R? - PullRequest
0 голосов
/ 30 марта 2020

У меня есть df1, как это:

    Stabr                    Area_name Score1 Score2     POVALL_2018          Score3 
3      AL               Autauga County        2       2       7,587           13.8
4      AL               Baldwin County        2       2      21,069            9.8
7      AL                Blount County        2       1       7,527           13.2
8      AL               Bullock County        3       6       3,610           42.5
9      AL                Butler County        3       6       4,731           24.5
10     AL               Calhoun County        3       2      21,719           19.5
11     AL              Chambers County        6       5       6,181           18.7
12     AL              Cherokee County        2       6       4,180           16.3
13     AL               Chilton County        2       1       7,542           17.3
14     AL               Choctaw County        3      10       2,806           22.1
16     AL                  Clay County        9      10       2,285           17.6
17     AL              Cleburne County        8       4       2,356           16.0

Я забочусь только о столбцах score1 и score3. Я хотел бы провести простой t-тест среди всех, чтобы увидеть, все ли округа с score1 из 2 имеют разные score3 по сравнению со всеми округами с score1 из 3.

Конкретно, я хотел бы видеть, значительно ли среднее значение 13,8, 9,8, 13,2, 16,3, 17,3 отличается от среднего значения 42,5, 24,5, 19,5, 22,1. Как я могу это сделать? Я хотел бы игнорировать все строки, которые score1 отличаются от 2 или 3.

Как это сделать?

1 Ответ

1 голос
/ 30 марта 2020

Вы можете установить подкадр данных и выполнить t.test:

df1 <- subset(df, Score1 %in% 2:3)

   Stabr      Area_name Score1 Score2 POVALL_2018 Score3
1:    AL  AutaugaCounty      2      2       7,587   13.8
2:    AL  BaldwinCounty      2      2      21,069    9.8
3:    AL   BlountCounty      2      1       7,527   13.2
4:    AL  BullockCounty      3      6       3,610   42.5
5:    AL   ButlerCounty      3      6       4,731   24.5
6:    AL  CalhounCounty      3      2      21,719   19.5
7:    AL CherokeeCounty      2      6       4,180   16.3
8:    AL  ChiltonCounty      2      1       7,542   17.3
9:    AL  ChoctawCounty      3     10       2,806   22.1

И выполнить t.test:

t.test(Score3~Score1,data = df1)


    Welch Two Sample t-test

data:  Score3 by Score1
t = -2.4293, df = 3.3817, p-value = 0.08372
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -29.148945   3.008945
sample estimates:
mean in group 2 mean in group 3 
          14.08           27.15 

Поскольку у вас не так много образцов для каждой группы я (лично) предпочитаю использовать непараметрический c тест, такой как критерий Манна-Уитни (с функцией wilcox.test):

wilcox.test(Score3~Score1,data = df1)

    Wilcoxon rank sum test

data:  Score3 by Score1
W = 0, p-value = 0.01587
alternative hypothesis: true location shift is not equal to 0

РЕДАКТИРОВАТЬ : t.test на основе значения Score1 (комментарий ОП)

Если вы хотите проверить все значения <3 и все значения> или = 3, вы можете добавить переменную с ifelse утверждение типа:

df$Group <- ifelse(df$Score1 <3,"A","B")
t.test(Score3~Group,data = df)

    Welch Two Sample t-test

data:  Score3 by Group
t = -2.429, df = 7.6464, p-value = 0.04262
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -17.429041  -0.382388
sample estimates:
mean in group A mean in group B 
       14.08000        22.98571 

отвечает ли оно на ваш вопрос?


Воспроизводимый пример:

structure(list(Stabr = c("AL", "AL", "AL", "AL", "AL", "AL", 
"AL", "AL", "AL", "AL", "AL", "AL"), Area_name = c("AutaugaCounty", 
"BaldwinCounty", "BlountCounty", "BullockCounty", "ButlerCounty", 
"CalhounCounty", "ChambersCounty", "CherokeeCounty", "ChiltonCounty", 
"ChoctawCounty", "ClayCounty", "CleburneCounty"), Score1 = c(2L, 
2L, 2L, 3L, 3L, 3L, 6L, 2L, 2L, 3L, 9L, 8L), Score2 = c(2L, 2L, 
1L, 6L, 6L, 2L, 5L, 6L, 1L, 10L, 10L, 4L), POVALL_2018 = c("7,587", 
"21,069", "7,527", "3,610", "4,731", "21,719", "6,181", "4,180", 
"7,542", "2,806", "2,285", "2,356"), Score3 = c(13.8, 9.8, 13.2, 
42.5, 24.5, 19.5, 18.7, 16.3, 17.3, 22.1, 17.6, 16)), row.names = c(NA, 
-12L), class = c("data.table", "data.frame"))
...