对于一组数据,可以有许多统计分析的方法。
(1) 基本信息
mean():求平均值
sum():求和
sd():求总体标准差——(样本-期望)/(样本数)
var():求样本标准差——(样本-期望)/(样本数-1)
range():求样本数据的范围
(2) 数据展示:
summary():展现一组数据的综合信息,返回一个list
> summary(mtcars$wt)
Min. 1st Qu. Median Mean 3rd Qu. Max.
1.513 2.581 3.325 3.217 3.610 5.424
quantile():根据遗嘱数据来分配概率,最小数概率对应0,最大数概率对应1
> quantile(mtcars$wt)
0% 25% 50% 75% 100%
1.51300 2.58125 3.32500 3.61000 5.42400
table():返回一组数据中,每个特异值出现的次数
> table(mtcars$cyl)
4 6 8
11 7 14
等距和等大小分组:
mtcars1 <- mtcars %>% mutate(equal_size = ntile( qsec , 5),
equal_distance = cut( wt,
breaks = seq( from = min(wt), to = max(wt), ##设置断开的位置
by = (max(wt) - min(wt)) / 5 ), ##通过计算步长,层层递进得到最终的序列
include.lowest = T ))
ntile函数通过将数据进行排序,更具分组需要,将数据分为n个组别,返回这组数据对应位置上的数据的组别;等距分组则完全依赖于将数字区间进行军方,利用cut函数将落到不同区间里的数据进行划分,二者的划分结果实质相同;
对于已知总体分布的数据常用 mean ± n*sd (n = 2,3...) 来限定样本中合理值范围,超过这些范围的可认作为异常值;对于未知参数的样本数据,有许多排除一场值的方法,一个经典的方法就是上、下四分位分别加减1.5倍的四分位范围从而限定数的上下限,在此之外的均为一异常值:
(当然在ggplot的geom_box当中,这个范围已经被默认,图中被单独列出的黑点即为异常值,此时不会有正常箱图里表示数据上下界的横线)
##先查看disp的四分位
> s <- summary( mtcars$disp)
> s
Min. 1st Qu. Median Mean 3rd Qu. Max.
71.1 120.8 196.3 230.7 326.0 472.0
##得到iqr(四分位的范围)的值
> iqr <- IQR(mtcars$disp)
> iqr
[1] 205.175
##绘图
ggplot(mtcars,aes(y = disp)) +
geom_boxplot() +
geom_hline(yintercept = s, color = 1:6) + ##根据summary里面的几个值,在箱图上标出对应的线
geom_hline(yintercept = c(s[2]-1.5*iqr , s[4]+1.5*iqr), color = 'red',size = 3) ##标出上下限就
可见数据中无异常值。
R语言内部可以依据不同分布生成随机数据,同时也可以对一列数据按照预设的分布推算其出现概率等。
(1) rnorm()
依据随机分布生成一系列随机数:
rnorm(55, mean = 0, sd = 1)
##生成55个平均值为0,标准差为1的随机数
(2) runif / sample
生成服从于均匀分布的随机数:
> runif(17,max = 1 ,min = 0.5)
[1] 0.7074430 0.9890402 0.9877037 0.7021419 0.5685381 0.6919902 0.7986621
[8] 0.9996719 0.9699007 0.5763348 0.6055292 0.9353894 0.8633643 0.5103040
[15] 0.8058729 0.8509983 0.6263499
##生成17个最大值为1,最小值为0.5,默认是0~1
> sample(0:10, 15, replace = TRUE)
[1] 4 7 8 2 0 2 6 9 1 2 7 9 0 4 6
##replace代表是否允许放回采样
(3) rbinom
根据事件发生的概率,对一定次数次实验结果进行估计,生成事件发生的次数的序列:
rbi <- rbinom(23, size = 100, prob = 0.5)
[1] 45 60 49 44 51 45 56 39 42 50 54 54 43 58 34 52 50 51 48 39 58 48 52
##产生23个数据,其中进行100次实验,事件发生概率为0.5,生成的数字是这100次事件中事件发生的概率
(4) rpois
根据指定的lamda来生成数据:
> pos <- rpois(33 , 4)
> pos
[1] 5 5 4 2 8 7 6 10 2 2 3 4 8 6 8 5 5 8 4 5 3 4 4
[24] 8 5 4 6 4 6 5 4 4 1
(5) rexp
指定指数,产生数列:
> rexp(11,0.5)
[1] 0.2354817 4.2218206 1.2789491 0.5667985 6.8250768 11.7577884
[7] 3.4183153 0.2926459 0.6410425 3.0253369 0.7224791
(6) rgamma
指定shape参数,产生数列:
> rgamma(9 , shape = 4)
[1] 4.818401 3.816967 3.380444 2.770275 4.406524 3.578493 2.511661
[8] 4.838542 3.382133
##scale默认为1
当参数 shape = 1时,伽马分布就是参数为scale的指数分布
当shape = n/2,scale = 1/2 时,伽马分布就是自由度为n的卡方分布
以上函数均由 r_<...>组成,将“r”替换分别为p、q和d,构成依照某种分布来分析数据的概率特征的函数
以正态分布为例,生成函数rnorm()
# q: 一系列下分位点(可以理解是概率一个密度函数曲线对应的x轴上的点)。函数计算计算P[x < q]
pnorm(q, mean = 0, sd = 1)
# p:系列概率(所以要求p在 0~1 内)。函数通过概率反推计算“x轴上坐标点的位置”
qnorm(p, mean = 0, sd = 1)
# x:通过x轴上坐标点计算该处的概率密度
dnorm(x, mean = 0, sd = 1)
可以使用cor.test函数对两组数据的关联性进行分析:
> r <- with( mtcars, cor.test( mpg, wt ))
> r
Pearson's product-moment correlation
data: mpg and wt
t = -9.559, df = 30, p-value = 1.294e-10
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.9338264 -0.7440872
sample estimates:
cor
-0.8676594
## true correlation is not equal to 0 表明二者有一定相关性
## cor是关联性系数,在例子中,表面wt和mpg二者有呈现负相关的趋势
## 使用 r$ 来查看r中不同数据,说明函数返回的还是一个列表
参数检验和非参数检验的差别就在于是否关注于总体的分布情况
(1) student 检验:
使用t.test对数据进行检验,其中输入的数据的形式可分为3种,分别对应不同的检验目标
t.test(数据向量, mu = number) :分析number是否区别于这组数据,即number这个数值在数据中是否协调;
t.test(数据向量1,数据向量2):分析两个数据的分布差异是否显著。注意可以使用 paired = T(默认为F)参数,表明对两个数向量中的数据要一一对应着进行分析;
> t.test(mtcars$mpg,mtcars$wt,paried = T)
Welch Two Sample t-test
data: mtcars$mpg and mtcars$wt
t = 15.633, df = 32.633, p-value < 2.2e-16
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
14.67644 19.07031
sample estimates:
mean of x mean of y
20.09062 3.21725
t.test(类别1 ~ 类别2):类别可以是一个df中的某两列,其中一组数据levels只能由两种,分析关联性,例如分析性别(levels = 男或女)与寿命的关系
> with(mtcars,t.test(mpg,vs)) ##单纯两组数据之间的比较
Welch Two Sample t-test
data: mpg and vs
t = 18.382, df = 31.434, p-value < 2.2e-16
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
17.47381 21.83244
sample estimates:
mean of x mean of y
20.09062 0.43750
> with(mtcars,t.test(mpg~vs)) ##关联性的分析,vs的level只有“0” “1”
Welch Two Sample t-test
data: mpg by vs
t = -4.6671, df = 22.716, p-value = 0.0001098
alternative hypothesis: true difference in means between group 0 and group 1 is not equal to 0
95 percent confidence interval:
-11.462508 -4.418445
sample estimates:
mean in group 0 mean in group 1
16.61667 24.55714
(2) wilcox.test()
释义:符号秩检验(Wilcoxon);基于符号检验其秩分分布的办法,本质上是一种检验平均秩的检验。即把样本的两次观测值相减,记录差值的符号和绝对值,并基于绝对值升序求秩分,比较两组数据的正值秩分或负值秩分,从而确定其差异性。
非参数检验的一种,用法和t.test()基本语法一样,两种检验所得p值可以不同。
用于线性拟合:
lm(formula, data, subset, weights, na.action,
method = "qr", model = TRUE, x = FALSE, y = FALSE, qr = TRUE,
singular.ok = TRUE, contrasts = NULL, offset, ...)
对于一般的使用而言,输入合适的data和formula即可使用该函数。data为一个df,限定了formula中各个量在df中的对应关系(变量之间的关系不是随意的,而是由df中实实在在的一行中的各列间的关系相互对应起来的),formula输入待拟合的变量之间关系:
> lm.model <- lm(wt ~ mpg + hp, data = mtcars)
> lm.model
Call:
lm(formula = wt ~ mpg + hp, data = mtcars)
Coefficients:
(Intercept) mpg hp
6.2182863 -0.1455218 -0.0005277
## 注意这里相当于构建了一个 wt = a*mpg + b*hp 的一个函数,a和b均为系数
利用lm生成的模型对数据进行预测,可以提取模型的参数后,生成线性模型随后对其进行预测,当让也可以使用predict() 函数:
para <- coef(lm.model) ##利用coef()函数提取模型里面的参数,返回一个向量方便使用;
lm.model <- lm(wt ~ mpg + hp, data = mtcars) ##加载模型
newdata <- mtcars %>% dplyr::select(hp, mpg ) ##提取原有的数据
wt.predicted <- predict( lm.modelplot, newdata ) ##利用原来的数据,结合模型,对wt进行预估
plot <-
ggplot( data.frame( reference = mtcars$wt, manual = wt.predicted ), ##将原wt和预测的wt分别作为两轴
aes( reference, manual ) ) +
geom_point() +
geom_smooth( method = "lm", se = F ); ##geom_smooth自适应地对x轴和y轴上的元素,以lm规则进行拟合
可见,预测数据与原有数据仍有差距,geom_smooth拟合的曲线并非 y = x 而有所偏差。