拟合试验的一部分和良好(在R和手中)

Antoine Soetewey 2020-05-13 17 minute read

介绍

在上一篇文章中,我提出了 r的Chi-Square测试 它用于测试两个之间的独立性 分类 变量。在本文中,我展示了如何在r然后用手举行,然后才能执行:

  1. 一次性测试(也称为单样本比例测试)
  2. Chi-Square健康测试

当定性变量仅具有时,第一次测试用于将观察到的比例与预期比例进行比较 两类。第二种测试用于将多个观察到的比例与定性变量的情况进行比较到多个预期比例 两个或多个类别.

两个测试都允许测试定性变量的水平之间的比例的平等或以给定比例测试平等。这些给定的比例可以任意或基于已知分布的理论概率来确定。

在R.

数据

对于本节,我们使用相同的数据集而不是文章 描述性统计. It is the well-known iris dataset, to which we add the variable size. The variable size corresponds to small if the length of the petal is smaller than the median of all flowers, big otherwise:

# load iris dataset
dat <- iris

# create size variable
dat$size <- ifelse(dat$Sepal.Length < median(dat$Sepal.Length),
  "small", "big"
)

# show first 5 observations
head(dat, n = 5)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species  size
## 1          5.1         3.5          1.4         0.2  setosa small
## 2          4.9         3.0          1.4         0.2  setosa small
## 3          4.7         3.2          1.3         0.2  setosa small
## 4          4.6         3.1          1.5         0.2  setosa small
## 5          5.0         3.6          1.4         0.2  setosa small

一次性测试

For this example, we have a sample of 150 flowers and we want to test whether the proportion of small flowers is the same than the proportion of big flowers (measured by the variable size). Here are the number of flowers by size, and the corresponding proportions:

# barplot
library(ggplot2)
ggplot(dat) +
  aes(x = size) +
  geom_bar(fill = "#0c4c8a") +
  theme_minimal()

# counts by size
table(dat$size)
## 
##   big small 
##    77    73
# proportions by size, rounded to 2 decimals
round(prop.table(table(dat$size)), 2)
## 
##   big small 
##  0.51  0.49

Among the 150 flowers forming our sample, 51% and 49% are big and small, respectively. To test whether the proportions are the same among both sizes, we use the prop.test() function which accepts the following arguments:

  • 成功次数
  • 观察次数/试验
  • 预期概率(我们想要测试的概率)

Considering (arbitrarily) that big is the success, we have:1

# one-proportion test
test <- prop.test(
  x = 77, # number of successes
  n = 150, # total number of trials (77 + 73)
  p = 0.5
) # we test for equal proportion so prob = 0.5 in each group

test
## 
##  1-sample proportions test with continuity correction
## 
## data:  77 out of 150, null probability 0.5
## X-squared = 0.06, df = 1, p-value = 0.8065
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.4307558 0.5952176
## sample estimates:
##         p 
## 0.5133333

We obtain an output with the null probability (0.5), the test statistic (X-squared = 0.06), the degrees of freedom (df = 1), the p-value (p-value = 0.8065), the alternative hypothesis (true p is not equal to 0.5), the 95% confidence interval (which can also be extracted with test$conf.int) and the proportion in the sample (0.5133333).

p-Value是0.806所以,在5%的重要性水平下,我们不拒绝零假设,即小花的比例是相同的。

Assumption of prop.test()binom.test()

Note that prop.test() uses a normal approximation to the binomial distribution. Therefore, one assumption of this test is that the sample size is large enough (usually, n > 30)。如果样本大小很小,建议使用精确的二项式测试。

这 exact binomial test can be performed with the binom.test() function and accepts the same arguments as the prop.test() function. For this example, suppose now that we have a sample of 12 big and 3 small flowers and we want to test whether the proportions are the same among both sizes:

# barplot
barplot(c(12, 3), # observed counts
  names.arg = c("big", "small"), # rename labels
  ylab = "Frequency", # y-axis label
  xlab = "Size" # x-axis label
)
abline(
  h = 15 / 2, # expected counts in each level
  lty = 2 # dashed line
) 

# exact binomial test
test <- binom.test(
  x = 12, # counts of successes
  n = 15, # total counts (12 + 3)
  p = 0.5 # expected proportion
)

test
## 
##  Exact binomial test
## 
## data:  12 and 15
## number of successes = 12, number of trials = 15, p-value = 0.03516
## alternative hypothesis: true probability of success is not equal to 0.5
## 95 percent confidence interval:
##  0.5191089 0.9566880
## sample estimates:
## probability of success 
##                    0.8

p-Value是0.035所以,在5%的意义水平下,我们拒绝了零假设,我们得出的比例,小花的比例显着不同。这相当于结论,大花的比例显着不同于0.5(因为只有两种尺寸)。

If you want to test that the proportion of big flowers is greater than 50%, add the alternative = "greater" argument into the binom.test() function:2

test <- binom.test(
  x = 12, # counts of successes
  n = 15, # total counts (12 + 3)
  p = 0.5, # expected proportion
  alternative = "greater" # test that prop of big flowers is > 0.5
)

test
## 
##  Exact binomial test
## 
## data:  12 and 15
## number of successes = 12, number of trials = 15, p-value = 0.01758
## alternative hypothesis: true probability of success is greater than 0.5
## 95 percent confidence interval:
##  0.5602156 1.0000000
## sample estimates:
## probability of success 
##                    0.8

p-Value是0.018所以,在5%的意义水平下,我们拒绝零假设,我们得出的结论是大花的比例明显大于50%。

Chi-Square健康测试

Suppose now that the qualitative variable has more than two levels as it is the case for the variable Species:

# barplot
ggplot(dat) +
  aes(x = Species) +
  geom_bar(fill = "#0c4c8a") +
  theme_minimal()

# counts by Species
table(dat$Species)
## 
##     setosa versicolor  virginica 
##         50         50         50

这 variable Species has 3 levels, with 50 observations in each level. Suppose for this example that we want to test whether the 3 species are equally common. If they were equally common, they would be equally distributed and the expected proportions would be \(\ frac {1} {3} \) 每个物种。

这 test can be done with the chisq.test() function, accepting the following arguments:

  • 表示观察到的比例的数字矢量
  • 代表预期比例的概率矢量(观察到的比例的相同长度)

适用于我们的研究问题(即,3种同样常见的3种?),我们有:

# goodness of fit test
test <- chisq.test(table(dat$Species), # observed proportions
  p = c(1 / 3, 1 / 3, 1 / 3) # expected proportions
)

test
## 
##  Chi-squared test for given probabilities
## 
## data:  table(dat$Species)
## X-squared = 0, df = 2, p-value = 1

p-Value是1所以,在5%的意义水平下,我们不拒绝零假设,以至于所有物种中的比例相等。

对于在鉴于每种物种的50朵花的统计测试之前,这也非常明显,因此很容易看出这些物种同样常见。然而,我们仍然进行了测试,以展示它在实践中的工作原理。

我的分发是否遵循给定的分发?

在上一节中,我们自己选择了比例。拟合试验的良好也特别有用,可以将观察到的比例与基于一些已知分布的预期比例进行比较。

记住测试的假设:

  • \(h_0 \):观察到的频率与预期频率之间没有显着差异
  • \(H_1):观察到的频率和预期频率之间存在显着差异

为此,假设我们在5名儿童100个家庭中测量了女孩的数量。我们希望测试(观察到)的数量分布是否遵循二项式分布。

观察到的频率

以下是我们在5名儿童的100个家庭中的所有家庭中每个家庭的女孩数量的分布:

和相应的频率和相对频率(记住相对频率是频率除以总示例大小):

# counts
dat
##   Girls Frequency Relative_freq
## 1     0         5          0.05
## 2     1        12          0.12
## 3     2        28          0.28
## 4     3        33          0.33
## 5     4        17          0.17
## 6     5         5          0.05

预期频率

为了将观察到的频率与二项式分布进行比较,看看两个分布式是否匹配,我们首先需要确定在二项分布的情况下将获得的预期频率。假设具有女孩的概率的预期频率(为5名儿童中的每一个)如下:

# create expected frequencies for a binomial distribution
x <- 0:5
df <- data.frame(
  Girls = factor(x),
  Expected_relative_freq = dbinom(x, size = 5, prob = 0.5)
)
df$Expected_freq <- df$Expected_relative_freq * 100 # *100 since there are 100 families

# create barplot
p <- ggplot(df, aes(x = Girls, y = Expected_freq)) +
  geom_bar(stat = "identity", fill = "#F8766D") +
  xlab("Number of girls per family") +
  ylab("Expected frequency") +
  labs(title= "Binomial distribution Bi(x, n = 5, p = 0.5)") +
  theme_minimal()
p

# expected relative frequencies and (absolute) frequencies
df
##   Girls Expected_relative_freq Expected_freq
## 1     0                0.03125         3.125
## 2     1                0.15625        15.625
## 3     2                0.31250        31.250
## 4     3                0.31250        31.250
## 5     4                0.15625        15.625
## 6     5                0.03125         3.125

观察到与预期频率

我们现在将观察到的频率与预期频率进行比较,以了解两者是否有显着差异。如果两者差异显着差异,我们拒绝了每口5名儿童的女孩人数遵循二项式分布。另一方面,如果观察到的和预期的频率相似,我们不会拒绝假设,即每个家庭的女孩数量遵循二项式分布。

在视觉上我们有:

# create data
data <- data.frame(
  num_girls = factor(rep(c(0:5), times = 2)),
  Freq = c(dat$Freq, df$Expected_freq),
  obs_exp = c(rep("observed", 6), rep("expected", 6))
)

# create plot
ggplot() +
  geom_bar(
    data = data, aes(
      x = num_girls, y = Freq,
      fill = obs_exp
    ),
    position = "dodge", # bar next to each other
    stat = "identity"
  ) +
  ylab("Frequency") +
  xlab("Number of girls per family") +
  theme_minimal() +
  theme(legend.title= element_blank()) # remove legend title

我们看到观察到的和预期的频率非常相似,因此我们预计5名儿童家庭的女孩数量遵循二项式分布。但是,只有拟合试验的善良将确认我们的信念:

# goodness of fit test
test <- chisq.test(dat$Freq, # observed frequencies
  p = df$Expected_relative_freq # expected proportions
)

test
## 
##  Chi-squared test for given probabilities
## 
## data:  dat$Freq
## X-squared = 3.648, df = 5, p-value = 0.6011

p-Value是0.601所以,在5%的重要性水平下,我们不拒绝观察到的和预期频率等于的空假设。这是相当于得出的结论,我们不能拒绝假设,其中5名儿童的女孩人数遵循二项式分布(因为预期频率基于二项式分布)。

请注意,拟合试验的良好当然可以与其他类型的分布进行比二项式进行。例如,如果您想测试观察到的分布是否遵循泊松分布,则该测试可用于将观察到的频率与预期比例进行比较,该预期比例将在泊松分布的情况下获得。

用手

既然我们展示了如何在r中履行拟合测试的单比例和善良,在本节中,我们展示了如何用手进行这些测试。我们首先说明了一个比例测试,然后是拟合测试的Chi-Square良好。

一次性测试

对于这个例子,假设我们扔了一个硬币100次,并指出它落在67次头上。在此之后,我们想测试硬币是否公平,即测试头部或尾部着陆的概率是否等于50%。

至多 假设试验,我们通过4个简单的步骤进行:

  1. 陈述零和替代假设
  2. 计算测试统计(也称为T-Stat)
  3. 找到拒绝区域
  4. 通过将测试统计与拒绝区域进行比较结论

步骤1。

在我们的示例中,NULL和替代假设是:

  • \(h_0 \): \(p_0 = 0.5 \)
  • \(H_1): \(p_0 \ ne 0.5 \)

在哪里 \(p_0 \) 是登陆头部的预期比例。

第2步。

测试统计是:3

\ [z_ {obs} = \ frac {\ hat {p} - p_0} {\ sqrt {\ frac {p_0(1 - p_0)} {n}}} = \ frac {0.67 - 0.5} {\ sqrt {\ FRAC {0.5 \ CDOT(1 - 0.5)} {100}}} = 3.4 \]

(看看如何执行 假设测试在闪亮的应用程序中 如果您需要更多帮助计算测试统计数据。)

第3步。

通过正态分布表找到抑制区域。假设具有重要意义水平 \(\ alpha = 0.05 \), 我们有:

\ [\ PM Z _ {\ alpha / 2} = \ PM Z_ {0.025} = \ PM 1.96 \]

第4步。

我们将测试统计(在步骤2中找到)与拒绝区进行比较(在步骤3中找到),我们得出结论。在视觉上,我们有:

测试统计形式位于抑制区域(即,灰色阴影区域)内。因此,在5%的意义程度上,我们拒绝零假设,我们得出结论,头部的比例(尾部)明显不同于50%。换句话说,仍处于5%的意义程度,我们得出结论,硬币是不公平的。

如果您愿意计算 p - Value而不是比较T-Stat和拒绝区域,你可以使用它 闪亮的应用程序很容易计算 p - 价值 对于不同的概率分布。打开该应用后,设置T-Stat,相应的替代方案,您会找到 p - 在页面顶部的value。

R.验证

只是为了说明,这里是R:

# one-proportion test
test <- prop.test(
  x = 67, # number of heads
  n = 100, # number of trials
  p = 0.5 # expected probability of heads
)

test
## 
##  1-sample proportions test with continuity correction
## 
## data:  67 out of 100, null probability 0.5
## X-squared = 10.89, df = 1, p-value = 0.0009668
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.5679099 0.7588442
## sample estimates:
##    p 
## 0.67

p-Value是0.001所以,在5%的意义水平下,我们拒绝零假设,即头部和尾部的比例相等,我们得出结论,硬币是偏见的。这与手工发现的结论是相同的。

健康测试的善良

我们现在用以下示例说明使用手用手进行拟合测试的良好。

假设我们折腾了一个骰子100次,我们注意到它落在每张面上的次数(1到6),我们测试骰子是否公平。以下是骰子面观察的计数:

## dice_face
##  1  2  3  4  5  6 
## 15 24 10 19 19 13

有一个公平的骰子,我们希望它降落 \(\ frac {100} {6} \约16.67 \) 每张脸上的时间(这个预期值由上面的绘图中的虚线表示)。虽然观察到的频率不同于预期值16.67:

##   dice_face observed_freq expected_freq
## 1         1            15         16.67
## 2         2            24         16.67
## 3         3            10         16.67
## 4         4            19         16.67
## 5         5            19         16.67
## 6         6            13         16.67

我们需要测试它们是否是 显着地 不同的。为此,我们执行适当的 假设试验 继上述4个简单步骤之后:

  1. 陈述零和替代假设
  2. 计算测试统计(也称为T-Stat)
  3. 找到拒绝区域
  4. 通过将测试统计与拒绝区域进行比较结论

步骤1。

适合测试的良善度的零和替代假设是:

  • \(h_0 \):观察到的频率与预期频率之间没有显着差异
  • \(H_1):观察到的频率和预期频率之间存在显着差异

第2步。

测试统计是:

\ [\ chi ^ 2 = \ sum_ {i = 1} ^ k \ frac {(o_i - e_i)^ 2} {e_i} \]

在哪里 \(o_i \) 是观察到的频率, \(e_i \) 是预期的频率和 \(k) 是类别的数量(在我们的情况下,有6个类别,代表6个骰子面)。

\(\ chi ^ 2 \) 通过计算观察到的病例数与每个类别中的预期案件之间的差异来获得统计。这种差异是平方(以避免否定和正差补偿)并除以该类别中的预期案例。然后,所有类别的这些值都会求和,并且总共被称为 \(\ chi ^ 2 \) 统计。这个测试统计的大值导致拒绝零假设,小值意味着零假设不能被拒绝。4

鉴于我们的数据,我们有:

\ [\ chi ^ 2 = \ frac {(15 - 16.67)^ 2} {16.67} + \ FRAC {(24 - 16.67)^ 2} {16.67} + \\ \ \\ \ frac {(10 - 16.67)^ 2} {16.67} + \ FRAC {(19 - 16.67)^ 2} {16.67} + \ FRAC {(19 - 16.67)^ 2} {16.67} + \\ \ \\ \ frac {(13 - 16.67)^ 2} {16.67} = 7.52 \]

第3步。

是否 \(\ chi ^ 2 \) 测试统计很小或大取决于拒绝区域。通过该拒绝区域 \(\ chi ^ 2 \) 分销表。自由程度等于 \(k - 1 \) (在哪里 \(k) 是类别的数量)并假设具有重要性水平 \(\ alpha = 0.05 \), 我们有:

\ [\ chi ^ 2 _ {\ alpha; k-1} = \ chi ^ 2_ {0.05; 5} = 11.0705 \]

第4步。

我们将测试统计(在步骤2中找到)与拒绝区进行比较(在步骤3中找到),我们得出结论。在视觉上,我们有:

测试统计不在抑制区域内(即,灰色阴影区域)。因此,在5%的意义水平下,我们不会拒绝零假设,观察到的频率与预期频率没有显着差异。换句话说,仍处于5%的意义程度,我们不能拒绝骰子公平的假设。

再次,你可以使用 闪亮的应用程序 容易计算 p - 如果您在T-Stat和拒绝区域之间更喜欢此方法,则给定测试统计值。

R.验证

只是为了说明,这里是R:

# goodness of fit test
test <- chisq.test(dat$observed_freq, # observed frequencies for each dice face
  p = rep(1 / 6, 6) # expected probabilities for each dice face
)

test
## 
##  Chi-squared test for given probabilities
## 
## data:  dat$observed_freq
## X-squared = 7.52, df = 5, p-value = 0.1847

测试统计和自由度与手用手发现完全相同。这 p-Value是0.185,仍然在5%的意义水平上,导致比手相同(即,未能拒绝零假设)。

谢谢阅读。我希望这篇文章有助于您了解并在R和手中掌握拟合测试的单比例和善良。

一如既往,如果您有问题或与本文所涵盖的主题相关的建议,请将其添加为评论,以便其他读者可以从讨论中受益。


  1. 选择大或小,因为成功活动提供了完全相同的结论。↩︎

  2. Similarly, this argument can also be added to the prop.test() function to test whether the observed proportion is larger than the expected proportion. Use alternative = "less" if you want to test whether the observed proportion is smaller than the expected one.↩︎

  3. 这个测试的一个假设是 \(n \ cdot p \ ge 5 \)\(n \ cdot(1 - p)\ ge 5 \)。满足假设,因此我们可以将正常近似与二项式分布一起使用。↩︎

  4. 来源: http://uregina.ca/~gingrich/ch10.pdf.↩︎



喜欢这篇文章?

获取更新 每次发布新文章。
任何垃圾邮件都没有任何垃圾邮件。
分享: