📅  最后修改于: 2020-12-02 06:43:40             🧑  作者: Mango
分析数据时,可以采用统计方法。进行基本分析所需的基本工具是-
在处理大型数据集时,它不会带来问题,因为除了相关分析之外,这些方法的计算量并不大。在这种情况下,始终可以取样,并且结果应可靠。
关联分析试图找到数值变量之间的线性关系。这可以在不同的情况下使用。探索性数据分析是一种常见的用法,该书的第16.0.2节提供了这种方法的一个基本示例。首先,在上述示例中使用的相关度量基于皮尔森系数。但是,还有另一种有趣的相关度量,不受异常值影响。该度量称为斯皮尔曼相关性。
与Pearson方法相比, spearman相关度量对异常值的存在更健壮,并且当数据不呈正态分布时,可以更好地估计数字变量之间的线性关系。
library(ggplot2)
# Select variables that are interesting to compare pearson and spearman
correlation methods.
x = diamonds[, c('x', 'y', 'z', 'price')]
# From the histograms we can expect differences in the correlations of both
metrics.
# In this case as the variables are clearly not normally distributed, the
spearman correlation
# is a better estimate of the linear relation among numeric variables.
par(mfrow = c(2,2))
colnm = names(x)
for(i in 1:4) {
hist(x[[i]], col = 'deepskyblue3', main = sprintf('Histogram of %s', colnm[i]))
}
par(mfrow = c(1,1))
从下图中的直方图,我们可以预期两个指标的相关性会有所不同。在这种情况下,由于变量显然不是正态分布的,因此斯皮尔曼相关性是对数字变量之间线性关系的更好估计。
为了计算R中的相关性,请打开包含此代码段的文件bda / part2 / statistical_methods / correlation / correlation.R 。
## Correlation Matrix - Pearson and spearman
cor_pearson
卡方检验允许我们检验两个随机变量是否独立。这意味着每个变量的概率分布不会影响其他变量。为了评估R中的测试,我们首先需要创建一个列联表,然后将该表传递给chisq.test R函数。
例如,让我们检查变量之间是否存在关联:钻石数据集中的切割和颜色。该测试正式定义为-
我们假设这两个变量的名称之间存在关联,但是测试可以给出一个客观的“规则”,说明该结果的重要性。
在下面的代码片段中,我们发现测试的p值为2.2e-16,实际上该值几乎为零。然后,在运行测试并进行了蒙特卡洛模拟后,我们发现p值为0.0004998,仍然远远低于阈值0.05。该结果意味着我们拒绝零假设(H0),因此我们认为cut和color变量不是独立的。
library(ggplot2)
# Use the table function to compute the contingency table
tbl = table(diamonds$cut, diamonds$color)
tbl
# D E F G H I J
# Fair 163 224 312 314 303 175 119
# Good 662 933 909 871 702 522 307
# Very Good 1513 2400 2164 2299 1824 1204 678
# Premium 1603 2337 2331 2924 2360 1428 808
# Ideal 2834 3903 3826 4884 3115 2093 896
# In order to run the test we just use the chisq.test function.
chisq.test(tbl)
# Pearson’s Chi-squared test
# data: tbl
# X-squared = 310.32, df = 24, p-value < 2.2e-16
# It is also possible to compute the p-values using a monte-carlo simulation
# It's needed to add the simulate.p.value = TRUE flag and the amount of
simulations
chisq.test(tbl, simulate.p.value = TRUE, B = 2000)
# Pearson’s Chi-squared test with simulated p-value (based on 2000 replicates)
# data: tbl
# X-squared = 310.32, df = NA, p-value = 0.0004998
t检验的思想是评估名义变量的不同组之间的数字变量#分布是否存在差异。为了证明这一点,我将选择因子变量cut的“公平”和“理想”水平,然后将这两个组中的数字变量的值进行比较。
data = diamonds[diamonds$cut %in% c('Fair', 'Ideal'), ]
data$cut = droplevels.factor(data$cut) # Drop levels that aren’t used from the
cut variable
df1 = data[, c('cut', 'price')]
# We can see the price means are different for each group
tapply(df1$price, df1$cut, mean)
# Fair Ideal
# 4358.758 3457.542
t测试在R中使用t.test函数。 t.test的公式接口是使用它的最简单方法,其思想是用组变量解释数字变量。
例如: t.test(numeric_variable〜group_variable,data = data) 。在前面的示例中, numeric_variable是price ,而group_variable是cut 。
从统计角度看,我们正在测试两组之间数字变量的分布是否存在差异。形式上,假设检验用无效(H0)假设和替代假设(H1)描述。
H0:公平和理想群体之间的价格变量分布没有差异
H1公平和理想群体之间的价格变量分布存在差异
以下可以在R中使用以下代码实现-
t.test(price ~ cut, data = data)
# Welch Two Sample t-test
#
# data: price by cut
# t = 9.7484, df = 1894.8, p-value < 2.2e-16
# alternative hypothesis: true difference in means is not equal to 0
# 95 percent confidence interval:
# 719.9065 1082.5251
# sample estimates:
# mean in group Fair mean in group Ideal
# 4358.758 3457.542
# Another way to validate the previous results is to just plot the
distributions using a box-plot
plot(price ~ cut, data = data, ylim = c(0,12000),
col = 'deepskyblue3')
我们可以通过检查p值是否小于0.05来分析测试结果。在这种情况下,我们保留替代假设。这意味着我们发现了两个削减系数水平之间的价格差异。通过级别的名称,我们可以预期会出现此结果,但是我们不会期望Fail组中的平均价格会高于Ideal组中的平均价格。我们可以通过比较每个因素的平均值来看到这一点。
plot命令生成一个图形,该图形显示了价格和削减变量之间的关系。这是箱形图;我们已经在16.0.1节中介绍了该图,但是它基本上显示了我们正在分析的两个削减级别的价格变量分布。
方差分析(ANOVA)是一种统计模型,用于通过比较每个组的均值和方差来分析组分布之间的差异,该模型是由Ronald Fisher开发的。方差分析提供了几个组的均值是否相等的统计检验,因此将t检验推广到两个以上的组。
方差分析可用于比较三个或更多组的统计显着性,因为进行多个两次样本t检验会增加犯下I类统计错误的机会。
在提供数学解释方面,需要以下内容来理解测试。
x ij = x +(x i − x)+(x ij − x)
这导致以下模型-
x ij =μ+ αi + ∈ij
其中,μ是均值, αi是第i组均值。误差项∈ij被假定为从正态分布中得出。测试的原假设是-
α1 =α2 = … =αK
在计算测试统计量方面,我们需要计算两个值-
$$ SSD_B = \ sum_ {i} ^ {k} \ sum_ {j} ^ {n}(\ bar {x _ {\ bar {i}}}-\ bar {x})^ 2 $$
$$ SSD_W = \ sum_ {i} ^ {k} \ sum_ {j} ^ {n}(\ bar {x _ {\ bar {ij}}}-\ bar {x _ {\ bar {i}}})^ 2 $$
其中SSD B的自由度为k-1,而SSD W的自由度为Nk。然后,我们可以定义每个指标的均方差。
MS B = SSD B /(k-1)
MS w = SSD w /(N-k)
最后,将方差分析中的检验统计量定义为以上两个量之比
F = MS B / MS w
它遵循具有k-1和NK自由度的F分布。如果零假设成立,则F可能接近1。否则,组间均方MSB可能很大,从而导致F值很大。
基本上,ANOVA检查总方差的两个来源,看看哪个部分贡献更大。这就是为什么它被称为方差分析的原因,尽管其目的是比较组均值。
就计算统计量而言,在R中实际上很简单。下面的示例将演示如何进行统计并绘制结果。
library(ggplot2)
# We will be using the mtcars dataset
head(mtcars)
# mpg cyl disp hp drat wt qsec vs am gear carb
# Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
# Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
# Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
# Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
# Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
# Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
# Let's see if there are differences between the groups of cyl in the mpg variable.
data = mtcars[, c('mpg', 'cyl')]
fit = lm(mpg ~ cyl, data = mtcars)
anova(fit)
# Analysis of Variance Table
# Response: mpg
# Df Sum Sq Mean Sq F value Pr(>F)
# cyl 1 817.71 817.71 79.561 6.113e-10 ***
# Residuals 30 308.33 10.28
# Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 .
# Plot the distribution
plot(mpg ~ as.factor(cyl), data = mtcars, col = 'deepskyblue3')
该代码将产生以下输出-
我们在示例中获得的p值明显小于0.05,因此R返回符号“ ***”来表示这一点。这意味着我们拒绝零假设,并且发现cyl变量的不同组之间的mpg均值之间存在差异。