R语言学习笔记_03

统计分布和描述性统计分析

概率函数通常用来生成特征已知的模拟数据,以及在用户编写的统计函数中计算概率值。


常见分布
  • d = 密度函数(density):是一个描述随机变量在某种分布下的概率密度
  • p = 分布函数(distribution function):随机变量的取值落在某个区域之内的概率(密度函数在该区域上的积分)
  • q = 分位数函数(quantile function):输出某种分布的指定分位点值
  • r = 生成随机数(随机偏差):生成属于某种分布的指定数量的随机数
# 从标准正态分布中进行采样
> x <- pretty(c(-3,3), 30)
> dnorm(x)
 [1] 0.004431848 0.007915452 0.013582969 0.022394530 0.035474593 0.053990967 0.078950158
 [8] 0.110920835 0.149727466 0.194186055 0.241970725 0.289691553 0.333224603 0.368270140
[15] 0.391042694 0.398942280 0.391042694 0.368270140 0.333224603 0.289691553 0.241970725
[22] 0.194186055 0.149727466 0.110920835 0.078950158 0.053990967 0.035474593 0.022394530
[29] 0.013582969 0.007915452 0.004431848

# 位于z=1.96 左侧的标准正态曲线下方面积
> pnorm(1.96)
[1] 0.9750021

# 均值为500,标准差为100 的正态分布的0.9 分位点值
> qnorm(.9, mean=500, sd=100)
[1] 628.1552

# 生成50 个均值为50,标准差为10 的正态随机数
> rnorm(50, mean=50, sd=10)
 [1] 43.19326 67.19558 53.12459 49.13804 49.49784 50.18141 60.02579 38.84806 47.05036 33.10094
[11] 53.04860 61.74979 38.86004 53.86042 73.50134 58.71853 58.41579 47.24429 37.81980 55.60278
[21] 44.88429 46.91278 52.49478 41.42598 38.77225 56.51503 56.60067 67.63822 49.80543 53.74116
[31] 60.52062 61.17447 29.86609 58.37057 66.00415 33.32716 72.76983 47.78504 68.31046 62.89388
[41] 45.45358 67.27605 65.82000 48.16882 62.26423 51.98385 45.67497 48.98096 41.50788 70.69757

R语言主要是为了进行统计分析开发的语言,在R中内置的许多函数可以方便的进行统计分析。

描述性统计分析

在描述性统计量的计算方面,R中的选择多得让人尴尬。让我们从基础安装中包含的函数开始。可以使用summary()函数来获取描述性统计量,包括最小值,25分位数,中位数,均值,75分位数以及最大值。或者通过Hmisc包中的describe函数进行描述性统计。

> myvars <- c("mpg", "hp", "wt")
> summary(mtcars[myvars])
      mpg              hp              wt       
 Min.   :10.40   Min.   : 52.0   Min.   :1.513  
 1st Qu.:15.43   1st Qu.: 96.5   1st Qu.:2.581  
 Median :19.20   Median :123.0   Median :3.325  
 Mean   :20.09   Mean   :146.7   Mean   :3.217  
 3rd Qu.:22.80   3rd Qu.:180.0   3rd Qu.:3.610  
 Max.   :33.90   Max.   :335.0   Max.   :5.424  

或者使用aggregate分组获取描述性统计量:

# aggregate需要指定三个参数,分别为:数据,分组(需要传入list),功能
> aggregate(mtcars[myvars], by=list(am=mtcars$am), mean)
  am      mpg       hp       wt
1  0 17.14737 160.2632 3.768895
2  1 24.39231 126.8462 2.411000

如果需要分组执行比较复杂的功能,可以使用by()函数。

# 需要三个参数:数据,分组,功能
> by(mtcars[myvars], mtcars$am, summary)
mtcars$am: 0
      mpg              hp              wt       
 Min.   :10.40   Min.   : 62.0   Min.   :2.465  
 1st Qu.:14.95   1st Qu.:116.5   1st Qu.:3.438  
 Median :17.30   Median :175.0   Median :3.520  
 Mean   :17.15   Mean   :160.3   Mean   :3.769  
 3rd Qu.:19.20   3rd Qu.:192.5   3rd Qu.:3.842  
 Max.   :24.40   Max.   :245.0   Max.   :5.424  
------------------------------------------------------------------------ 
mtcars$am: 1
      mpg              hp              wt       
 Min.   :15.00   Min.   : 52.0   Min.   :1.513  
 1st Qu.:21.00   1st Qu.: 66.0   1st Qu.:1.935  
 Median :22.80   Median :109.0   Median :2.320  
 Mean   :24.39   Mean   :126.8   Mean   :2.411  
 3rd Qu.:30.40   3rd Qu.:113.0   3rd Qu.:2.780  
 Max.   :33.90   Max.   :335.0   Max.   :3.570  

频数表和列联表

在对数据进行统计分析时,类别变量的频数表和列联表十分重要,在R中通过内置函数我们可以轻易地获得数据的频数表和列联表。

table()函数生成简单的频数统计表

> library(vcd)
载入需要的程辑包:grid
> with(Arthritis, table(Improved))
Improved
  None   Some Marked 
    42     14     28

prop.table()将这些频数转化为比例值

# 乘100获得百分数
> prop.table(with(Arthritis, table(Improved))) * 100
Improved
    None     Some   Marked 
50.00000 16.66667 33.33333 

xtabs()根据公式生成列联表

> xtabs(~ Treatment+Improved, data=Arthritis)
         Improved
Treatment None Some Marked
  Placebo   29    7      7
  Treated   13    7     21

# xtabs可以自然地推广到高于二维的情况,需要注意公式的写法(axis1, axis2, axis3...)
> xtabs(~ Treatment+Sex+Improved, data=Arthritis)
, , Improved = None

         Sex
Treatment Female Male
  Placebo     19   10
  Treated      6    7

, , Improved = Some

         Sex
Treatment Female Male
  Placebo      7    0
  Treated      5    2

, , Improved = Marked

         Sex
Treatment Female Male
  Placebo      6    1
  Treated     16    5

margin.table()生成边际频数表

# 2代表列
> margin.table(xtabs(~ Treatment+Improved, data=Arthritis), 2)
Improved
  None   Some Marked 
    42     14     28 

# 1代表行
> margin.table(xtabs(~ Treatment+Improved, data=Arthritis), 1)
Treatment
Placebo Treated 
     43      41 

addmargins()直接在列联表中添加边际和

> addmargins(xtabs(~ Treatment+Improved, data=Arthritis))
         Improved
Treatment None Some Marked Sum
  Placebo   29    7      7  43
  Treated   13    7     21  41
  Sum       42   14     28  84

ftable()函数可以以一种紧凑而吸引人的方式输出多维列联表。

> mytable <- xtabs(~ Treatment+Sex+Improved, data=Arthritis)
> ftable(mytable)
                 Improved None Some Marked
Treatment Sex                             
Placebo   Female            19    7      6
          Male              10    0      1
Treated   Female             6    5     16
          Male               7    2      5
# 计算每个Treatment×Sex组合中改善情况为None、Some和Marked患者的比例
> ftable(addmargins(prop.table(mytable, c(1, 2)), 3)) * 100
                 Improved       None       Some     Marked        Sum
Treatment Sex                                                        
Placebo   Female           59.375000  21.875000  18.750000 100.000000
          Male             90.909091   0.000000   9.090909 100.000000
Treated   Female           22.222222  18.518519  59.259259 100.000000
          Male             50.000000  14.285714  35.714286 100.000000

摘抄自R语言实战(第二版)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343