R에서 한 번에 둘 이상의 변수에 대해 t- 검정 또는 ANOVA를 수행하는 방법

R에서 한 번에 여러 변수에 대한 샘플을 비교하고 결과를 더 나은 방식으로 전달하는 방법을 알아보십시오.

Teemu Paananen의 여행자 사진

소개

벨기에 대학에서 조 교직의 일환으로 학생들은 종종 석사 학위 논문에 대한 통계 분석에 도움을 요청합니다.

자주 묻는 질문은 여러 양적 연속 변수 측면에서 환자 그룹을 비교하는 방법 입니다. 우리 대부분은 다음을 알고 있습니다.

  • 두 그룹을 비교하려면 Student 's t-test를 사용해야합니다. 1
  • 세 그룹 이상을 비교하려면 ANOVA 를 수행해야합니다.

과거에는 다음 3 단계에 따라 분석을 수행했습니다.

  1. 그룹 별 분포를 보여주는 상자 그림을 그립니다 ( 패키지 를 사용하려는 경우 boxplot()함수 또는 {esquisse}R Studio 애드 인 덕분에 ).{ggplot2}
  2. 비교할 그룹 수에 따라 t- 검정 또는 ANOVA를 수행합니다 ( 각각 t- 검정 및 ANOVA에 대한 t.test()oneway.test()함수 사용).
  3. 각 변수에 대해 1 단계와 2 단계를 반복합니다.

참고 : 여러 t- 검정을 수행 할 때 발생할 수있는 다중 검정 (다중성라고도 함) 문제에 대해 매우주의해야합니다. 요컨대, 많은 수의 통계 검정이 수행 될 때 일부는 모든 귀무 가설이 실제로 사실이더라도 우연히 0.05 미만의 p- 값을 갖게됩니다. 이를 다중 또는 다중 테스트라고합니다. 특히 Bonferroni 보정을 사용하여이 문제를 해결할 수 있습니다. Bonferroni 수정은 전체 신뢰 수준이 유지되도록 보장하면서 많은 t- 검정을 수행 할 수있는 간단한 방법입니다. 이를 위해 유의 수준에 대해 표준 임계 값 α = 5 %를 사용하는 대신 α = 0.05 / m을 사용할 수 있습니다. 여기서 m 은 t- 검정의 수입니다. 예를 들어 원하는 α = 0.05로 20 개의 t- 검정을 수행하는 경우 Bonferroni 수정은 p- 값이 α = 0.05 / 20 = 0.0025 보다 작을 때 각 개별 검정에 대한 귀무 가설을 기각한다는 것을 의미합니다 .

또한 다중 비교 문제를 처리하기 위해 보편적으로 허용되는 접근 방식이 없습니다. 일반적으로 청중이나 연구 분야에 익숙한 p- 값 조정 측정을 선택해야합니다 . Bonferroni 수정은이를 고려하는 가장 일반적인 방법이며 구현하기 쉽습니다. 그러나 수행 할 검정 수가 매우 많은 경우에는 적합하지 않습니다 (1 만 개의 t 검정을 수행하려는 경우 p 값이 유의미하게 0.05 / 10000 = 0.000005 미만이어야 함). 더 강력한 방법은 Benjamini-Hochberg 프로 시저를 사용하여 잘못된 발견 비율을 조정하는 것입니다 (McDonald, 2014). 이 기사는 기술적 관점에서 다중 t- 검정과 ANOVA를 수행하는 방법을 제시하는 것을 목표로합니다 (R에서 구현하는 방법). 어떤 조정 방법을 사용할지 또는 데이터에 더 적합한 모델이 있는지에 대한 논의는이 문서의 범위를 벗어납니다 (따라서 분석을 위해 아래 코드를 사용하는 것의 의미를 이해해야합니다). 결과를 해석하기 전에 ANOVA 의 가정 도 테스트해야 합니다.

한 번에 여러 테스트 수행

따라서 상자 그림을 그리고 여러 변수에 대한 테스트를 한 번에 수행하여 프로세스를 자동화하는 코드를 작성했습니다. 아래는 내가 사용한 코드로 iris데이터 세트 의 프로세스를 보여줍니다 . Species변수는 그래서 제거를하게 한 다음 상자 그림을 그리고 한 번에 4 개 연속 변수에 t 테스트를 적용, 3 단계가있다. 테스트하려는 연속 변수는 iris데이터 세트의 변수 1 ~ 4입니다 .

dat <- iris
# remove one level to have only two groups
dat <- subset(dat, Species != "setosa")
dat$Species <- factor(dat$Species)
# boxplots and t-tests for the 4 variables at once
for (i in 1:4) { # variables to compare are variables 1 to 4
  boxplot(dat[, i] ~ dat$Species, # draw boxplots by group
    ylab = names(dat[i]), # rename y-axis with variable's name
    xlab = "Species"
  )
  print(t.test(dat[, i] ~ dat$Species)) # print results of t-test
}
## ## Welch Two Sample t-test ## ## data: dat[, i] by dat$Species ## t = -5.6292, df = 94.025, p-value = 1.866e-07 ## alternative hypothesis: true difference in means is not equal to 0 ## 95 percent confidence interval: ## -0.8819731 -0.4220269 ## sample estimates: ## mean in group versicolor mean in group virginica ## 5.936 6.588
## ## Welch Two Sample t-test ## ## data: dat[, i] by dat$Species ## t = -3.2058, df = 97.927, p-value = 0.001819 ## alternative hypothesis: true difference in means is not equal to 0 ## 95 percent confidence interval: ## -0.33028364 -0.07771636 ## sample estimates: ## mean in group versicolor mean in group virginica ## 2.770 2.974
## ## Welch Two Sample t-test ## ## data: dat[, i] by dat$Species ## t = -12.604, df = 95.57, p-value < 2.2e-16 ## alternative hypothesis: true difference in means is not equal to 0 ## 95 percent confidence interval: ## -1.49549 -1.08851 ## sample estimates: ## mean in group versicolor mean in group virginica ## 4.260 5.552
## ## Welch Two Sample t-test ## ## data: dat[, i] by dat$Species ## t = -14.625, df = 89.043, p-value < 2.2e-16 ## alternative hypothesis: true difference in means is not equal to 0 ## 95 percent confidence interval: ## -0.7951002 -0.6048998 ## sample estimates: ## mean in group versicolor mean in group virginica ## 1.326 2.026

과거 어느 시점에서 저는 다음과 같은 코드를 작성하기도했습니다.

  1. 상자 그림을 그리다
  2. 등분 산 검정 (Levene의 검정 덕분에)
  3. 분산은 같거나 같지 있는지 어떤지에 따라서는 적절한 시험 적용되었다 : 웰치 테스트를 차이가 불평등 있었다 경우 차이가 있었 읍니다 경우 (의 다른 버전에 대한 자세한 내용은 참조에 학생의 t-test를 t 테스트를 두 개의 샘플 )
  4. 모든 연속 변수에 대해 한 번에 1 ~ 3 단계 적용

코드는 작업을 비교적 잘 수행했습니다. 실제로이 코드 덕분에 모든 변수에 대한 그룹을 한 번에 비교한다는 의미에서 자동화 된 방식으로 여러 변수를 테스트 할 수있었습니다.

내가 한 프로젝트에서 다른 프로젝트로 변경했다 유일한 것은 내가 그룹화 변수의 이름 및 테스트에 연속 변수의 번호를 (수정할 필요가 있다는 것입니다 Species그리고 1:4위의 코드에서).

간결하고 쉽게 해석 가능한 결과

T- 테스트

아주 잘 작동하고 사소한 변경만으로 다른 프로젝트에 적용 할 수 있었지만 여전히 다른 점에 만족하지 못했습니다.

통계 및 R에 능숙한 사람은 어려움없이 t- 검정의 결과를 읽고 해석 할 수 있습니다. 그러나 자신의 통계 프로젝트에서 알 수 있듯이 대부분의 사람들은 결과에서 무엇을 찾아야할지 모르고 문서에서 너무 많은 그래프, 코드, 출력, 결과 및 숫자 값을 볼 때 때때로 약간 혼란스러워합니다. 그들은 이러한 정보의 대량에 의해 매우 쉽게 압도 당합니다.

이전 R 루틴을 사용하면 t- 검정 및 ANOVA 프로세스를 자동화하여 절약 한 시간이 학생들에게 결과를 올바르게 해석 할 수 있도록 R 출력을 설명해야했을 때 (부분적으로) 손실되었습니다. 대부분의 경우 결과물 (즉, p- 값 ) 에서 찾을 내용을 지적하는 것으로 요약되었지만, 이러한 결과물이 대부분의 실제에 비해 너무 상세했기 때문에 여전히 많은 시간을 낭비하고있었습니다. -생활 응용. 즉, 너무 많은 정보가 많은 사람들에게 혼란스러워 보였기 때문에 통계 결과를 비 과학자에게 공유하는 가장 최적의 방법이라고 확신하지 못했습니다.

물론 그들은 통계적 조언을 위해 저에게 왔기 때문에 이러한 결과를 기대했고 저는 그들에게 질문과 가설에 대한 답을 제공해야했습니다. 그럼에도 불구하고 결론에 도달하는 데 필요한 최소한의 정보로 이러한 결과를 이러한 유형의 청중에게 전달할 수있는 더 나은 방법을 찾고 싶었습니다. 그 이상도 이하도 아닙니다.

더 간결하고 읽기 쉬운 방식으로 결과를 표시하는 방법을 알아 내기 위해 온라인에서 오랜 시간을 보낸 후 {ggpubr}패키지를 발견했습니다 . 이 패키지는 ggplot2 기반 그래프에서 직접 사용 된 테스트 및 테스트의 p 값 을 표시 할 수 있습니다 . 또한 고급 통계 대상이 아닌 사용자를 위해 출판 준비가 완료된 플롯을 쉽게 만들 수 있습니다.

초기 코드 (이 기사 에서 사용 가능)를 여러 번 수정하고 수정 한 후 마침내 한 번에 두 개 이상의 변수에 대해 t- 검정 및 ANOVA를 수행하고 더 중요한 것은 결과를 간결하게 만드는 다소 안정적이고 강력한 프로세스를 찾았습니다. 누구나 쉽게 읽을 수 있습니다 (통계 학자이든 아니든).

그래프는 천 단어의 가치가 있으므로 이전 섹션과 똑같은 테스트가 있지만 이번에는 새로운 R 루틴을 사용합니다.

library(ggpubr)
# Edit from here #
x <- which(names(dat) == "Species") # name of grouping variable
y <- which(names(dat) == "Sepal.Length" # names of variables to test
| names(dat) == "Sepal.Width"
| names(dat) == "Petal.Length"
| names(dat) == "Petal.Width")
method <- "t.test" # one of "wilcox.test" or "t.test"
paired <- FALSE # if paired make sure that in the dataframe you have first all individuals at T1, then all individuals again at T2
# Edit until here

# Edit at your own risk
for (i in y) {
  for (j in x) {
    ifelse(paired == TRUE,
      p <- ggpaired(dat,
        x = colnames(dat[j]), y = colnames(dat[i]),
        color = colnames(dat[j]), line.color = "gray", line.size = 0.4,
        palette = "npg",
        legend = "none",
        xlab = colnames(dat[j]),
        ylab = colnames(dat[i]),
        add = "jitter"
      ),
      p <- ggboxplot(dat,
        x = colnames(dat[j]), y = colnames(dat[i]),
        color = colnames(dat[j]),
        palette = "npg",
        legend = "none",
        add = "jitter"
      )
    )
    #  Add p-value
    print(p + stat_compare_means(aes(label = paste0(..method.., ", p-value = ", ..p.format..)),
      method = method,
      paired = paired,
      # group.by = NULL,
      ref.group = NULL
    ))
  }
}
  • 상자 그림 덕분에 그룹의 시각적 비교
  • 통계 테스트의 이름
  • 검정 의 p

제 경험상 저는 학생과 전문가 (특히 과학적 배경이 적은 사람들)가 이전 섹션에서 제시 한 결과보다 이러한 결과를 훨씬 더 잘 이해하고 있음을 알게되었습니다.

필요가 자신의 프로젝트에 대한 수정 될 수 있음을 코드의 유일한 선 (그룹화 변수의 이름입니다 Species위의 코드에서) 테스트에 원하는 변수 (이름 Sepal.Length, Sepal.Width등) 적용 할 여부 t- 검정 ( t.test) 또는 Wilcoxon 검정 ( wilcox.test) 및 표본이 쌍을 이루는 지 여부 ( FALSE표본이 독립적 인 TRUE경우 , 쌍을 이룬 경우).

이 그래프를 기반으로, 비전문가도 쉽게 결과를 해석하고 versicolorvirginica종이 4 개의 변수 모두에서 유의하게 다르다는 결론을 내릴 수 있습니다 (모든 p 값이 <0.05 / 4 = 0.0125이기 때문에 Bonferroni 보정은 다중 검정 문제를 피하기 위해 적용되므로 4 개의 t- 검정이 있기 때문에 일반적인 α 수준을 4로 나눕니다)).

추가 p- 값 조정 방법

다른 p- 값 조정 방법을 사용하려면 p.adjust()함수를 사용할 수 있습니다 . 아래는 위에서 찾은 원시 p 값 과 주요 조정 방법에서 파생 된 p 값 (데이터 프레임에 표시됨)입니다.

raw_pvalue <- numeric(length = length(1:4))
for (i in (1:4)) {
  raw_pvalue[i] <- t.test(dat[, i] ~ dat$Species,
    paired = FALSE,
    alternative = "two.sided"
  )$p.value
}
df <- data.frame(
  Variable = names(dat[, 1:4]),
  raw_pvalue = round(raw_pvalue, 3)
)
df$Bonferroni <-
  p.adjust(df$raw_pvalue,
    method = "bonferroni"
  )
df$BH <-
  p.adjust(df$raw_pvalue,
    method = "BH"
  )
df$Holm <-
  p.adjust(df$raw_pvalue,
    method = "holm"
  )
df$Hochberg <-
  p.adjust(df$raw_pvalue,
    method = "hochberg"
  )
df$Hommel <-
  p.adjust(df$raw_pvalue,
    method = "hommel"
  )
df$BY <-
  round(p.adjust(df$raw_pvalue,
    method = "BY"
  ), 3)
df
##       Variable raw_pvalue Bonferroni    BH  Holm Hochberg Hommel    BY
## 1 Sepal.Length      0.000      0.000 0.000 0.000    0.000  0.000 0.000
## 2  Sepal.Width      0.002      0.008 0.002 0.002    0.002  0.002 0.004
## 3 Petal.Length      0.000      0.000 0.000 0.000    0.000  0.000 0.000
## 4  Petal.Width      0.000      0.000 0.000 0.000    0.000  0.000 0.000

한 번에 여러 Student 's t-test 또는 Wilcoxon 검정을 수행하고 p- 값 조정 방법을 선택할 수있는 다른 기능 아래 . 이 함수를 사용하면 표본이 쌍을 이루는 지 여부와 분산이 같은지 여부를 지정할 수 있습니다. (코드는 Mark White에서 수정되었습니다.)

t_table <- function(data, dvs, iv,
                    var_equal = TRUE,
                    p_adj = "none",
                    alpha = 0.05,
                    paired = FALSE,
                    wilcoxon = FALSE) {
  if (!inherits(data, "data.frame")) {
    stop("data must be a data.frame")
  }
if (!all(c(dvs, iv) %in% names(data))) {
    stop("at least one column given in dvs and iv are not in the data")
  }
if (!all(sapply(data[, dvs], is.numeric))) {
    stop("all dvs must be numeric")
  }
if (length(unique(na.omit(data[[iv]]))) != 2) {
    stop("independent variable must only have two unique values")
  }
out <- lapply(dvs, function(x) {
    if (paired == FALSE & wilcoxon == FALSE) {
      tres <- t.test(data[[x]] ~ data[[iv]], var.equal = var_equal)
    }
else if (paired == FALSE & wilcoxon == TRUE) {
      tres <- wilcox.test(data[[x]] ~ data[[iv]])
    }
else if (paired == TRUE & wilcoxon == FALSE) {
      tres <- t.test(data[[x]] ~ data[[iv]],
        var.equal = var_equal,
        paired = TRUE
      )
    }
else {
      tres <- wilcox.test(data[[x]] ~ data[[iv]],
        paired = TRUE
      )
    }
c(
      p_value = tres$p.value
    )
  })
out <- as.data.frame(do.call(rbind, out))
  out <- cbind(variable = dvs, out)
  names(out) <- gsub("[^0-9A-Za-z_]", "", names(out))
out$p_value <- ifelse(out$p_value < 0.001,
    "<0.001",
    round(p.adjust(out$p_value, p_adj), 3)
  )
  out$conclusion <- ifelse(out$p_value < alpha,
    paste0("Reject H0 at ", alpha * 100, "%"),
    paste0("Do not reject H0 at ", alpha * 100, "%")
  )
return(out)
}

result <- t_table(
  data = dat,
  c("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width"),
  "Species"
)
result
##       variable p_value      conclusion
## 1 Sepal.Length  <0.001 Reject H0 at 5%
## 2  Sepal.Width   0.002 Reject H0 at 5%
## 3 Petal.Length  <0.001 Reject H0 at 5%
## 4  Petal.Width  <0.001 Reject H0 at 5%

result <- t_table(
  data = dat,
  c("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width"),
  "Species",
  p_adj = "holm"
)
result
##       variable p_value      conclusion
## 1 Sepal.Length  <0.001 Reject H0 at 5%
## 2  Sepal.Width   0.002 Reject H0 at 5%
## 3 Petal.Length  <0.001 Reject H0 at 5%
## 4  Petal.Width  <0.001 Reject H0 at 5%

분산 분석

ANOVA를 사용한 동일한 프로세스 아래. 이번에 iris는 세 가지를 모두 포함 하도록 데이터 세트 를 다시로드합니다 Species.

dat <- iris
# Edit from here
x <- which(names(dat) == "Species") # name of grouping variable
y <- which(names(dat) == "Sepal.Length" # names of variables to test
| names(dat) == "Sepal.Width"
| names(dat) == "Petal.Length"
| names(dat) == "Petal.Width")
method1 <- "anova" # one of "anova" or "kruskal.test"
method2 <- "t.test" # one of "wilcox.test" or "t.test"
my_comparisons <- list(c("setosa", "versicolor"), c("setosa", "virginica"), c("versicolor", "virginica")) # comparisons for post-hoc tests
# Edit until here

# Edit at your own risk
for (i in y) {
  for (j in x) {
    p <- ggboxplot(dat,
      x = colnames(dat[j]), y = colnames(dat[i]),
      color = colnames(dat[j]),
      legend = "none",
      palette = "npg",
      add = "jitter"
    )
    print(
      p + stat_compare_means(aes(label = paste0(..method.., ", p-value = ", ..p.format..)),
        method = method1, label.y = max(dat[, i], na.rm = TRUE)
      )
      + stat_compare_means(comparisons = my_comparisons, method = method2, label = "p.format") # remove if p-value of ANOVA or Kruskal-Wallis test >= alpha
    )
  }
}

각 변수에 대해 하나의 그래프를 사용하면 모든 종이 4 개의 변수 모두에서 서로 다르다는 것을 쉽게 알 수 있습니다.

데이터에 동일한 자동화 된 프로세스를 적용하려면 분산 분석 ()을 수행할지 여부에 관계없이 그룹화 변수 Species의 이름 ( ), 테스트 할 변수의 이름 ( Sepal.Length등)을 수정해야합니다. anova) 또는 Kruskal-Wallis 테스트 ( kruskal.test)를 사용하고 마지막으로 사후 테스트에 대한 비교를 지정합니다.

더 나아가려면

우리가 살펴본 것처럼이 두 가지 개선 된 R 루틴은 다음을 허용합니다.

  1. 코드를 약간만 변경하여 적은 수 또는 많은 변수에 대해 t- 검정 및 ANOVA를 수행합니다. 기본적으로 변수 이름과 사용하려는 테스트 이름 만 바꾸면됩니다. 하나 또는 여러 변수를 테스트하는 데 거의 같은 시간이 걸리므로 한 번에 하나의 변수를 테스트하는 것에 비해 상당히 향상됩니다.
  2. 훨씬 적절하고 깨끗한 방법으로 테스트 결과를 공유하십시오. 이는 그룹 별 관찰을 보여주는 그래프와이 그래프에 포함 된 적절한 검정 의 p- 값 덕분에 가능합니다 . 이는 더 많은 청중이나 다양한 배경을 가진 사람들에게 결과를 전달할 때 특히 중요합니다.
  • 데이터 프레임에서 번호 매기기로 변수를 선택할 수있는 가능성을 추가합니다. 현재로서는 이름을 통해서만 가능합니다. 이렇게하면 모든 변수 이름을 하나씩 입력하는 대신 간단히 입력 할 수 있기 때문에 프로세스를 더욱 자동화 할 수 있습니다 4:25(예 : 변수 4 ~ 25 테스트).
  • p 값 조정 방법 을 선택할 수있는 가능성을 추가합니다 . 현재 원시 p 값 은 그래프에 표시되며 나중에 수동으로 조정합니다.
  • 두 개 이상의 그룹을 비교할 때 현재 ANOVA 또는 Kruskal-Wallis 테스트 만 적용 할 수 있습니다. 주요 개선 사항은 반복 측정 ANOVA (즉, 샘플이 종속 된 경우 ANOVA)를 수행 할 가능성을 추가하는 것입니다. 현재 두 개의 쌍을 이룬 표본으로 t- 검정을 수행하는 것은 이미 가능하지만 두 개 이상의 그룹에 대해 동일한 작업을 수행하는 것은 아직 가능하지 않습니다.
  • 두 개 이상의 그룹을 비교할 때 덜 중요하지만 여전히 좋은 또 다른 기능은 ANOVA 또는 Kruskal-Wallis 테스트의 귀무 가설이 거부 된 경우에만 사후 테스트를 자동으로 적용하는 것입니다 (따라서 하나 이상의 그룹이있는 경우). 동일한 그룹의 귀무 가설이 거부되지 않으면 사후 테스트를 적용하지 않기 때문에 다른 그룹과 다른 그룹입니다. 현재, 나는 수동으로 추가하거나 코드를 제거하는 디스플레이 p가 글로벌에 따라 사후 검사의 -values P는 분산 분석 또는 크루스 칼 - 월리스 테스트 - 값.

마지막으로 다음 패키지는 일부 독자에게 흥미로울 수 있습니다.

  • 통계 결과를 그래프로보고하려면 {ggstatsplot}패키지 , 특히 ggbetweenstats()기능 을 확인하는 것이 좋습니다. 이 기능을 사용하면 여러 그룹 또는 조건에서 연속 변수를 비교할 수 있습니다. 테스트 이름과 p 값 뿐만 아니라 다양한 통계 결과가 그래프에 표시됩니다 . 그러나 시각화와 건전한 통계 분석의 장점을 결합하기 위해 그래프에 테스트 결과를 포함 할 수있는 것은 여전히 ​​매우 편리합니다.
  • {compareGroups}패키지는 또한 그룹을 비교하는 좋은 방법을 제공합니다. 다음과 같이 사용할 수있는 정말 완벽한 Shiny 앱이 함께 제공됩니다.

# install.packages("compareGroups")
library(compareGroups)
cGroupsWUI()

관련 기사:

Holm, Sture. 1979. "간단한 순차적 거부 다중 테스트 절차." 스칸디나비아 통계 저널 . JSTOR, 65–70.

McDonald, JH 2014. Handbook of Biological Statistics (3rd ed.). Sparky House Publishing, 볼티모어, 메릴랜드.

  1. 이론적으로 ANOVA는 Student t-test와 동일한 결과를 제공하므로 두 그룹을 비교하는 데 사용할 수도 있지만 실제로 Student 's t-test를 사용하여 두 개의 샘플을 비교하고 ANOVA를 사용하여 세 개의 샘플을 비교하거나 더.
  2. 테스트 할 변수를 분리하는 것을 잊지 마십시오 |.
  3. 사후 테스트는 특정 유형의 통계 테스트를 참조하는 데 사용되는 이름 일뿐입니다. 사후 테스트에는 Tukey HSD 테스트, Bonferroni 보정, Dunnett의 테스트가 포함됩니다. 분산 분석 또는 크루스 칼 - 월리스 테스트가 다른 사람과 다른 하나 이상의 그룹이 있는지 여부를 확인할 수없는 경우에도, 그것은 우리가 결론을 허용하지 않는 서로 다르다. 이를 위해 다중 비교를 조정 한 후 모든 그룹을 두 개씩 비교하여 어떤 그룹이 다른지 확인하는 사후 테스트가 있습니다. 구체적으로, ANOVA 또는 Kruskal-Wallis 테스트에서 다른 그룹이 하나 이상 있음을 보여준 가능한 각 그룹 쌍에 대해 사후 테스트가 수행됩니다 (따라서 이러한 유형의 테스트 이름에서 "post"). 귀무 가설 및 대립 가설과 이러한 검정의 해석은 두 표본에 대한 학생의 t- 검정과 유사합니다.

Suggested posts

블랙 미러의 음악적 관련성

블랙 미러의 음악적 관련성

공상 과학 소설은 Netflix 시리즈 Black Mirror에서 현실을 만납니다. 영국 시나리오 작가 Charlie Brooker가 만든 준 무관 한 이야기의 선집으로, 사회가 기술에 의존하게 된 몇 가지 방식과 그렇지 않은 사람들에게 의미 할 수있는 의미를 자세히 살펴 봅니다. 아주 먼 미래. 이 시리즈는 2011 년부터 2013 년까지 BBC 채널 4에서 처음 방영 된 후 2015 년 넷플릭스에서 선정되었으며 디지털 스트리밍 서비스 전용으로 12 개의 에피소드를 더 공개하도록 의뢰했습니다.

Hyperledger Fabric Blockchain은 어떻게 작동합니까? 설명했습니다!

Hyperledger Fabric Blockchain은 어떻게 작동합니까? 설명했습니다!

이 블로그 게시물의 목표는 Hyperledger Fabric 블록 체인의 작동 방식에 대한 주요 개념을 설명하여 사용 방법에 대한 기본적인 이해를 얻는 것입니다. 내용.

Related posts

데이터 과학을위한 필수 수학 : 기초 및 기초 변경

데이터 과학을위한 필수 수학 : 기초 및 기초 변경

고유 분해 및 SVD에 유용한 기저의 선형 대수 개념 이해이 기사에서는 고유 분해 또는 특이 값 분해 (SVD)와 같은 행렬 분해 방법을 이해하는 흥미로운 방법 인 기저 개념에 대해 알아 봅니다. 정의 기본은 벡터 공간 (벡터 집합)을 설명하는 데 사용되는 좌표계입니다.

판다와 에라스무스 연구 교환 분석

판다와 에라스무스 연구 교환 분석

Erasmus 프로그램 2011-12에서 발생한 20 만 개의 연구 교환으로 데이터 세트를 분석 한 결과 1987 년 이후 Erasmus 프로그램은 매년 수십만 명의 유럽 학생들에게 한 학기 또는 1 년을 해외에서 보낼 기회를 다른 유럽에서 보낼 수있는 기회를 제공합니다. 경제적 인 지원뿐만 아니라 쉬운 교환 과정을 제공합니다. 유럽의 다양한 사람, 언어 및 문화에 대한 마음과 마음을 열어주는 정말 귀중한 경험입니다.

데이터 과학을위한 8 가지 기본 통계 개념

… 평범한 영어로 설명

데이터 과학을위한 8 가지 기본 통계 개념

통계는 "수량 데이터의 수집, 분석, 해석 및 표현을 다루는 수학의 한 분야"입니다. 프로그래밍과 기계 학습을 혼합하면 데이터 과학의 핵심 기술에 대해 꽤 잘 설명 할 수 있습니다.

데이터 과학의 9 가지 거리 측정

일반적인 거리 측정의 장점과 함정

데이터 과학의 9 가지 거리 측정

감독되거나 감독되지 않는 많은 알고리즘은 거리 측정을 사용합니다. 유클리드 거리 또는 코사인 유사성과 같은 이러한 측정은 종종 k-NN, UMAP, HDBSCAN 등과 같은 알고리즘에서 찾을 수 있습니다.