基本概念
数据挖掘(data mining)是利用相关的分析方法来实现一些
数据挖掘的核心思想是在寻找相关性。这种相关性就不仅仅局限于统计意义上的相关,更多会指向数据之间的相关性,无论是横向还是纵向的相关性。
认识数据
数据集是由数据对象组成。一个数据对象代表一个实体,通常来说数据对象用属性来描述。数据对象又称样本、实例、数据点或对象。若放在数据库中,则称为是数据元组。
什么是属性
属性(attribute)是一个数据字段,表示数据对象的一个特征。术语“维”一般用在数据仓库中。机器学习文献更倾向于使用术语“特征”,而统计学家则更愿意使用术语“变量”。数据挖掘和数据库的专业人士一般使用术语“属性”,我们也使用术语“属性”。
一个属性的类型由该属性可能具有的值的集合决定。属性可以是标称的、二元的、序数的或数值的。下面我们介绍每种类型。
标称属性
标称属性的值是一些符号或事物的名称。每一个值代表的是某种类别、编码或状态等。标称属性又是看做是分类的。
二元属性
是一个特殊的标称属性,只有两个状态:0和1。0表示该属性不出现,1表示的是该属性出现。 一个二元属性并非对称,若其状态的结果不是一样的。为方便,我们用1表示的是重要的结果。
数值属性
在R
中的一些检验方式
[1] "ansari.test" "bartlett.test" "binom.test"
[4] "Box.test" "chisq.test" "cor.test"
[7] "fisher.test" "fligner.test" "friedman.test"
[10] "kruskal.test" "ks.test" "mantelhaen.test"
[13] "mauchly.test" "mcnemar.test" "mood.test"
[16] "oneway.test" "pairwise.prop.test" "pairwise.t.test"
[19] "pairwise.wilcox.test" "poisson.test" "power.anova.test"
[22] "power.prop.test" "power.t.test" "PP.test"
[25] "prop.test" "prop.trend.test" "quade.test"
[28] "shapiro.test" "t.test" "var.test"
[31] "wilcox.test"
相关分析
相关系数:
cor
函数可直接计算相关系数,method
包括kendall
、pearson
和spearman
。
Warning: package 'ggcor' was built under R version 4.1.2
Registered S3 methods overwritten by 'ggcor':
method from
&.gg patchwork
*.gg patchwork
********************************************************
Note: As of version 0.9.8, ggcor does not change the
default ggplot2 continuous fill scale anymore. To
recover the previous behavior, execute:
Instead of using the set_scale() function, we
recommend adding the 'scale_fill_*()' function
********************************************************
Attaching package: 'ggcor'
The following object is masked from 'package:stats':
filter
corr <- cor (mtcars)
knitr:: kable (corr)
mpg
1.0000000
-0.8521620
-0.8475514
-0.7761684
0.6811719
-0.8676594
0.4186840
0.6640389
0.5998324
0.4802848
-0.5509251
cyl
-0.8521620
1.0000000
0.9020329
0.8324475
-0.6999381
0.7824958
-0.5912421
-0.8108118
-0.5226070
-0.4926866
0.5269883
disp
-0.8475514
0.9020329
1.0000000
0.7909486
-0.7102139
0.8879799
-0.4336979
-0.7104159
-0.5912270
-0.5555692
0.3949769
hp
-0.7761684
0.8324475
0.7909486
1.0000000
-0.4487591
0.6587479
-0.7082234
-0.7230967
-0.2432043
-0.1257043
0.7498125
drat
0.6811719
-0.6999381
-0.7102139
-0.4487591
1.0000000
-0.7124406
0.0912048
0.4402785
0.7127111
0.6996101
-0.0907898
wt
-0.8676594
0.7824958
0.8879799
0.6587479
-0.7124406
1.0000000
-0.1747159
-0.5549157
-0.6924953
-0.5832870
0.4276059
qsec
0.4186840
-0.5912421
-0.4336979
-0.7082234
0.0912048
-0.1747159
1.0000000
0.7445354
-0.2298609
-0.2126822
-0.6562492
vs
0.6640389
-0.8108118
-0.7104159
-0.7230967
0.4402785
-0.5549157
0.7445354
1.0000000
0.1683451
0.2060233
-0.5696071
am
0.5998324
-0.5226070
-0.5912270
-0.2432043
0.7127111
-0.6924953
-0.2298609
0.1683451
1.0000000
0.7940588
0.0575344
gear
0.4802848
-0.4926866
-0.5555692
-0.1257043
0.6996101
-0.5832870
-0.2126822
0.2060233
0.7940588
1.0000000
0.2740728
carb
-0.5509251
0.5269883
0.3949769
0.7498125
-0.0907898
0.4276059
-0.6562492
-0.5696071
0.0575344
0.2740728
1.0000000
── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
✔ ggplot2 3.4.0 ✔ purrr 1.0.1
✔ tibble 3.1.8 ✔ dplyr 1.1.0
✔ tidyr 1.3.0 ✔ stringr 1.5.0
✔ readr 2.1.4 ✔ forcats 0.5.2
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks ggcor::filter(), stats::filter()
✖ dplyr::lag() masks stats::lag()
library (patchwork)
library (broom)
# 生成已知参数的服从正态分布的随机数
rnorm_fixed <- function (N, mu = 0 , sd = 1 )
scale (rnorm (N)) * sd + mu
y <- c (rnorm (15 ), exp (rnorm (15 )), runif (20 , min = - 3 , max = 0 )) # Almost zero mean, not normal
x <- rnorm_fixed (50 , mu = 0 , sd = 1 ) # Used in correlation where this is on x-axis
y2 <- rnorm_fixed (50 , mu = 0.5 , sd = 1.5 ) # Used in two means
# Long format data with indicator
value <- c (y, y2)
group <- rep (c ("y1" , "y2" ), each = 50 )
signed_rank = function (x) sign (x) * rank (abs (x))
a <- cor.test (y, x, method = "pearson" ) # Built-in
b <- lm (y ~ 1 + x) # Equivalent linear model: y = Beta0*1 + Beta1*x
c <- lm (scale (y) ~ 1 + scale (x)) # On scaled vars to recover r
summary (a,b,c)
Length Class Mode
statistic 1 -none- numeric
parameter 1 -none- numeric
p.value 1 -none- numeric
estimate 1 -none- numeric
null.value 1 -none- numeric
alternative 1 -none- character
method 1 -none- character
data.name 1 -none- character
conf.int 2 -none- numeric
spearman相关系数
这里将斜率理解为对于每一rank的变化,所获得的y的秩的变化。
a <- cor.test (y, x, method = "spearman" ) # Built-in
b <- lm (rank (y) ~ 1 + rank (x)) # Equivalent linear model
在ggcor
包内的函数as_cor_tbl
将相关系数以tibble的格式显示。
df <- as_cor_tbl (corr)
df
# A tibble: 121 × 5
.row.names .col.names r .row.id .col.id
* <chr> <chr> <dbl> <int> <int>
1 mpg mpg 1 11 1
2 cyl mpg -0.852 10 1
3 disp mpg -0.848 9 1
4 hp mpg -0.776 8 1
5 drat mpg 0.681 7 1
6 wt mpg -0.868 6 1
7 qsec mpg 0.419 5 1
8 vs mpg 0.664 4 1
9 am mpg 0.600 3 1
10 gear mpg 0.480 2 1
# … with 111 more rows
还有更直接的方式,可以直接调用fortify_cor()
可以对原始数据进行相关系数的计算。
df2 <- fortify_cor (mtcars)
df2
# A tibble: 121 × 5
.row.names .col.names r .row.id .col.id
* <chr> <chr> <dbl> <int> <int>
1 mpg mpg 1 11 1
2 cyl mpg -0.852 10 1
3 disp mpg -0.848 9 1
4 hp mpg -0.776 8 1
5 drat mpg 0.681 7 1
6 wt mpg -0.868 6 1
7 qsec mpg 0.419 5 1
8 vs mpg 0.664 4 1
9 am mpg 0.600 3 1
10 gear mpg 0.480 2 1
# … with 111 more rows
绘图
ggcor()
package介绍
其中的quickcor
函数可以直接使用使用原始数据,而ggcor()
并不能传入原始数据。
quickcor (mtcars, type = "upper" ) + geom_circle2 ()
quickcor (df,aes (.col.id,.row.id,fill= r))
在默认下的输出颜色为蓝色。
df02 <- fortify_cor (mtcars, type = "upper" )
quickcor (df02,fill= r)
quickcor (mtcars, type = "lower" , show.diag = FALSE ) + geom_square ()
可以对对角元素(方差)进行颜色、大小等参数的设定。
quickcor (mtcars, cor.test = TRUE ) +
geom_square (data = get_data (type = "lower" )) +
geom_mark (data = get_data (type = "upper" )) +
# add_diag_label(size = 5, colour = "red") +
remove_axis ()
data ("varespec" , package = "vegan" )
data ("varechem" , package = "vegan" )
df <- mantel_test (varespec, varechem)
library (ggplot2)
df <- df %>%
mutate (lty = cut (r, breaks = c (- Inf , 0 , Inf ),
labels = c ("r <= 0" , "r > 0" )),
col = cut (p.value, breaks = c (0 , 0.01 , 0.05 , 1 ),
labels = c ("< 0.01" , "< 0.05" , ">= 0.05" ),
right = FALSE , include.lowest = TRUE ))
quickcor (varechem, type = "upper" ) +
geom_square () +
# add_diag_label() +
add_link (df, mapping = aes (colour = col,
size = r,
linetype = lty),diag.label = TRUE ) +
scale_fill_gradient2n () +
scale_size_area (max_size = 3 ) +
scale_linetype_manual (values = c ("dotted" , "solid" )) +
guides (
fill = guide_colourbar (title = "corr" , order = 1 ),
colour = guide_legend (title = "Mantel's p" , order = 2 ),
size = guide_legend (title = "Mantel's r" , order = 3 ),
linetype = "none"
)
Warning: `add_link()` is deprecated. Please see `?anno_link()` for more detail.
分类
分类在经典多元统计中就是一个判别(discrimination)。分类的目的与回归类似,但这时因变量是一个分类变量。
当分类变量只有两个属性时候,可以采用logistic和probit回归
logistic 回归
对于一系列有两个结果的随机实验,最为简单的概率模型为伯努利概率模型。
导入数据
library ("ISLR" )
library ("caret" )
导入的数据需要有一些特征,对于分类数据
数据预处理
第一步就是要将我们的二元变量,有一些需要进行转换。 利用包caret
中的函数dummyVars()
,
多元统计
多元正态分布是一个常见的多元概率分布,除此之外,还有多元对数分布,多项式分布。
随机向量
随机向量\(X=(X_1,X_2,\cdots ,X_n)\)
资料矩阵: \[
X=\begin{bmatrix}
{a_{11}}&{a_{12}}&{\cdots}&{a_{1p}}\\
{a_{21}}&{a_{22}}&{\cdots}&{a_{2p}}\\
{\vdots}&{\vdots}&{\ddots}&{\vdots}\\
{a_{n1}}&{a_{n2}}&{\cdots}&{a_{np}}\\
\end{bmatrix}
=(x_1,x_2,\cdots,x_p)=\begin{bmatrix}x_{(1)}\\x_{(2)}\\\vdots\\x_{(p)}
\end{bmatrix}
\] 其中\(x_1,x_2,\cdots,x_p\) 即为p个随机变量
欧氏距离:就是一个简单的二范数
马氏距离:克服量纲差异造成的影响 定义X,Y两点之间的马氏距离: \[
d^2_m(X,Y)=(X-Y)'^\Sigma{-1}(X-Y)
\] 定义X与总体之间的马氏距离: \[d^2_m(X,G)=(X-^\mu)'\Sigma{-1}(X-\mu) \] 其中的协方差是总体的协方差矩阵,其中的均值是总体的均值。
一元正态分布的密度函数
\[
f(x)=\frac{1}{2\pi}
\]
\(X\sim N_p(\mu,\Sigma)\)
若p元随机变量\(X=(X_1,X_2,\cdots,X_p)\) 的概率密度函数为 则称X遵从p元正态分布。
多元正态分布还可以用特征函数进行定义。
定义与说明
若正态随机向量\(X=(X_1,X_2)\) 相互独立的随机变量,
多元正态分布的随机分量之集,多元正态分布并不一定。 \[
f(x_1,x_2)=\frac{1}{2\pi}
\]
正态分布的条件分布仍然是:
以细分的元素进行证明。