R语言入门与数据分析(2)

1.输入数据类型
向量:sum、mean、sd、range、median、sort、order
矩阵或数据框:cbind、rbind
数字矩阵:heatmap

2.选项参数
调节参数:
(1)根据名字判断选项的作用:
color:选项很明显用来控制颜色
select:与选择有关
font.axis:就是坐标轴的字体
lty:是line type
lwd:是line width
method:软件算法
(2)选项接受哪些参数
main:字符串,不能是向量
na.rm:TRUE或FALSE
axis:side参数只能是1到4
fig:包含四个元素的向量

3.R概率分布
d:概率密度函数
p:分布函数
q:分布函数的反函数
r:产生相同分布的随机数

4.正态分布相关函数

> x = rnorm(n = 100,mean = 15,sd = 2)  #均值为15,方差为3的100个随机数
> x
  [1] 11.22150 16.88514 20.87220 16.65286 14.83330 16.91442 14.53168 15.67610 13.44850 12.29925 16.59593 12.56178 14.75264 12.58159
 [15] 14.26504 12.90504 18.47541 15.73425 13.17654 16.04994 14.09424 16.87791 13.83526 14.02251 15.84449 13.77863 13.52553 15.72029
 [29] 17.20449 17.32358 12.88159 17.34326 16.58667 12.49505 18.61767 15.60669 13.02145 15.54203 16.57563 11.99043 14.66163 14.87317
 [43] 15.56068 17.32711 15.44717 14.74882 16.66788 13.74237 17.27139 18.51017 15.45243 14.18615 14.48574 13.04703 14.74972 12.02696
 [57] 18.41770 16.20388 14.74550 15.89566 18.16467 13.78462 17.88783 13.13494 13.01025 16.36054 16.27335 14.94406 17.24971 12.82279
 [71] 12.96407 19.23235 18.08624 15.78049 13.54580 15.03079 12.13117 11.52136 13.17828 17.67491 14.65139 15.91675 16.55786 15.69109
 [85] 13.70682 19.90963 16.65645 13.52348 12.96500 16.28372 16.46434 14.43489 14.80591 14.91572 14.81906 14.85081 15.96048 11.74516
 [99] 15.56450 13.92424

> round(x = rnorm(n = 100,mean = 15,sd = 2))  #利用round函数取整
  [1] 17 15 14 15 19 14 16 14 12 14 17 14 13 14 16 18 14 14 11 15 16 15 16 14 14 13 15 12 13 14 13 19 16 14 16 13 15 17 13 19 14 17 14
 [44] 17 13 12 14 16 13 15 13 11 14 13 14 16 16 13 13 14 15 15 17 18 18 15 12 12 14 16 17 15 17 18 15 15 14 15 17 12 17 14 14 14 16 14
 [87] 15 16 17 14 13 13 13 13 14 15 19 15 17 12
 > qqnorm(x)  #绘制正态分布图

5.生成随机数

> runif(1)  #生成一个0-1的随机数
[1] 0.6572389
> runif(50)  #生成50个0-1的随机数
> runif(10)*10  #生成0-1之外的随机数,即乘以倍数
 [1] 2.945971 6.511343 3.094058 1.198331 2.032351 7.901714 3.472274 3.011473 8.737248 3.812883
> runif(50,min = 1,max = 100)  #生成1-100的50个随机数

> dgamma(c(1:9),shape = 2,rate = 1)  #随机生成的gamma密度
[1] 0.367879441 0.270670566 0.149361205 0.073262556 0.033689735 0.014872513 0.006383174 0.002683701 0.001110688
> runif(50,min = 1,max = 100) #经过上一条命令,后面每次生成的随机数都不一样
> set.seed(666)  #解决随机数不一样的问题
> runif(50)

6.描述性统计函数

> myvars <- mtcars[c("mpg","hp","wt","am")]
> summary(myvars)   #统计各最小值、中位数、平均数等
      mpg              hp              wt              am        
 Min.   :10.40   Min.   : 52.0   Min.   :1.513   Min.   :0.0000  
 1st Qu.:15.43   1st Qu.: 96.5   1st Qu.:2.581   1st Qu.:0.0000  
 Median :19.20   Median :123.0   Median :3.325   Median :0.0000  
 Mean   :20.09   Mean   :146.7   Mean   :3.217   Mean   :0.4062  
 3rd Qu.:22.80   3rd Qu.:180.0   3rd Qu.:3.610   3rd Qu.:1.0000  
 Max.   :33.90   Max.   :335.0   Max.   :5.424   Max.   :1.0000  
> fivenum(myvars$hp)  #统计基本量
[1]  52  96 123 180 335
> myvars <- c("mpg","hp","wt")
> describe(mtcars[myvars])  #这函数也可以实现统计量


```r
> aggregate(Cars93[c("Min.Price","Price","Max.Price","MPG.city")], by=list(Manufacturer=Cars93$Manufacturer),mean)  #分组,aggregate一次只能统计一个函数,不能一次返回多个值
    Manufacturer Min.Price    Price Max.Price MPG.city
1          Acura  21.05000 24.90000    28.750 21.50000
2           Audi  28.35000 33.40000    38.450 19.50000
3            BMW  23.70000 30.00000    36.200 22.00000
4          Buick  20.75000 21.62500    22.550 19.00000
5       Cadillac  35.25000 37.40000    39.500 16.00000

> aggregate(Cars93[c("Min.Price","Price","Max.Price","MPG.city")],
+           by=list(Manufacturer=Cars93$Manufacturer),sd)  #通过计算标准差分类
    Manufacturer  Min.Price      Price   Max.Price   MPG.city
1          Acura 11.5258405 12.7279221 14.07142495  4.9497475
2           Audi  3.4648232  6.0811183  8.69741341  0.7071068
3            BMW         NA         NA          NA         NA
4          Buick  5.0941143  4.5441354  3.99457966  2.4494897

> summaryBy(mpg+hp+wt~am, data=mtcars, FUN=mystats)  #实现多个值计算,在同一个表格内
> describeBy(mtcars[myvars], list(am=mtcars$am))  #详细查看各统计值

7.频数统计函数

split(mtcars,as.factor (mtcars$cyl))  #转换为因子再用split函数进行分组
> num <- 1:100
> cut(num,c(seq(0,100,10)))  #不明显的因子可以使用cut进行切割
  [1] (0,10]   (0,10]   (0,10]   (0,10]   (0,10]   (0,10]   (0,10]   (0,10]   (0,10]   (0,10]   (10,20]  (10,20]  (10,20]  (10,20] 
 [15] (10,20]  (10,20]  (10,20]  (10,20]  (10,20]  (10,20]  (20,30]  (20,30]  (20,30]  (20,30]  (20,30]  (20,30]  (20,30]  (20,30] 
 [29] (20,30]  (20,30]  (30,40]  (30,40]  (30,40]  (30,40]  (30,40]  (30,40]  (30,40]  (30,40]  (30,40]  (30,40]  (40,50]  (40,50] 
 [43] (40,50]  (40,50]  (40,50]  (40,50]  (40,50]  (40,50]  (40,50]  (40,50]  (50,60]  (50,60]  (50,60]  (50,60]  (50,60]  (50,60] 
 [57] (50,60]  (50,60]  (50,60]  (50,60]  (60,70]  (60,70]  (60,70]  (60,70]  (60,70]  (60,70]  (60,70]  (60,70]  (60,70]  (60,70] 
 [71] (70,80]  (70,80]  (70,80]  (70,80]  (70,80]  (70,80]  (70,80]  (70,80]  (70,80]  (70,80]  (80,90]  (80,90]  (80,90]  (80,90] 
 [85] (80,90]  (80,90]  (80,90]  (80,90]  (80,90]  (80,90]  (90,100] (90,100] (90,100] (90,100] (90,100] (90,100] (90,100] (90,100]
 [99] (90,100] (90,100]
Levels: (0,10] (10,20] (20,30] (30,40] (40,50] (50,60] (60,70] (70,80] (80,90] (90,100]
> table(mtcars$cyl)

 4  6  8 
11  7 14 
> table(cut(mtcars$mpg,c(seq(10,50,10))))

(10,20] (20,30] (30,40] (40,50] 
     18      10       4       0 
> prop.table(table(mtcars$cyl))  #频率统计,若乘以100,则就为百分比

      4       6       8 
0.34375 0.21875 0.43750 


# two way table
mytable <- table(Arthritis$Treatment,Arthritis$Improved)
with(data = Arthritis,{
     table(Treatment,Improved)})
mytable <- xtabs(~ Treatment+Improved, data=Arthritis)
mytable # frequencies
margin.table(mytable,1) #row sums
margin.table(mytable, 2) # column sums
prop.table(mytable) # cell proportions
prop.table(mytable, 1) # row proportions
prop.table(mytable, 2) # column proportions
addmargins(mytable) # add row and column sums to table

8.独立性检验函数
独立性检验:根据频数信息判断两类因子彼此相关或相互独立的假设检验。所谓独立性就是指变量之间是独立的,没有关系。
(1)卡方检验

#mytable <- xtabs(~Treatment+Improved, data=Arthritis)
> chisq.test(mytable)
> mytable <- table(Arthritis$Treatment,Arthritis$Improved)
> chisq.test(mytable)

(2)Fisher检验

# Fisher's exact test
> mytable <- xtabs(~Treatment+Improved, data=Arthritis)
> fisher.test(mytable)

(3)Cochran-Mantel-Haenszel检验

# Chochran-Mantel-Haenszel test
> mytable <- xtabs(~Treatment+Improved+Sex, data=Arthritis)
> mantelhaen.test(mytable)

9.假设检验
原假设:没有发生
备择假设:发生了
p-value:通过计算得到的概率值,也就是在原假设为真时,得到最大的或者超出所得到的检验统计量值的概率。
一般将p值定位到0.05,当p<0.05拒绝原假设,p>0.05,不拒绝原假设

10.相关性分析函数
相关性分析:指对两个或多个具备相关性的变量元素进行分析,从而衡量两个变量因素的相关密切程度。(相关性的元素之间需要存在一定的联系或者概率才可以进行相关性分析,即变量之间是否有关系)

11.相关性衡量指标
Pearson相关系数、Spearman相关系数、Kendall相关系数、偏相关系数、多分格(polychoric)相关系数和多系列(polyserial)相关系数
cor函数计算的是列与列间的相关系数
cov函数计算的是列与列的协方差

> cov(state.x77)   #计算协方差
> pcor(c(1,5,2,3,6), cov(state.x77))  #偏相关系数,除一个外其余的相关性

12.相关性检验函数
置信区间:是指由样本统计量所构造的总体参数的估计区间。给出的是被测量参数的测量值的可信程度。

> cor.test(state.x77[,3],state.x77[,5])   #文盲率与谋杀率的相关性,文盲率是第3个变量,谋杀率是第5个变量

非参数检验:在总体方差未知或知道甚少的情况下,利用样本数据对总体分布形态等进行推断的方法。
参数检验:在总体分布形式已知的情况下,对总体分布的参数如均值、方差等进行推断的方法。如:正态分布

13.R语言四大作图系统
基础绘图函数:高级绘图:一步到位,直接绘制出图;低级绘图:不能单独使用,必须在高级绘图产生图形的基础上,对图形进行调整,比如加一条线等;
lattice包
ggplot2包
grid包

> plot(women$height~ women$weight)  #二者关系图
> plot(as.factor(women$height))   #转换为因子,为直方图
> fit <- lm(height~ weight,data = women)  #线性回归图
> plot(fit)<Return>键来看下一个图:<Return>键来看下一个图:<Return>键来看下一个图:<Return>键来看下一个图: 
> plot(as.factor(mtcars$cyl),col = c("red","green","blue"))  #对其颜色进行改变

14.自定义函数
函数名称:字母和数字组合,但以字母开头
my <- function(选项参数)
{
函数体
}
计算偏度与峰度函数
偏度(skewness),是统计数据分布偏斜方向和程度的度量,是统计数据分布非对称程度的数字特征;
峰度(peakewness; kurtosis)又称峰态系数,表征概率密度分布曲线在平均值处峰值高低的特征数。

> mystats <- function(x,na.omit = FALSE){
     
+ if(na.omit)
+ x <- x[!is.na(x)]
+ m <- mean(x)
+ n <- length(x)
+ s <- sd(x)
+ skew <- sum((x - m^3 / s^3))/n
+ kurt <- sum((x - m^4 / s^4))/n - 3
+ return (c(n = n,mean = m, stdev = s, skew = skew, kurtosis = kurt))
+ }

15.循环

> for (i in 1:10) {
     print ("Hello,World")}
[1] "Hello,World"
[1] "Hello,World"
[1] "Hello,World"
[1] "Hello,World"
[1] "Hello,World"
[1] "Hello,World"
[1] "Hello,World"
[1] "Hello,World"
[1] "Hello,World"
[1] "Hello,World"
> i=1;while(i <= 10) {
     print ("Hello,World");i=i+1;}
[1] "Hello,World"
[1] "Hello,World"
[1] "Hello,World"
[1] "Hello,World"
[1] "Hello,World"
[1] "Hello,World"
[1] "Hello,World"
[1] "Hello,World"
[1] "Hello,World"
[1] "Hello,World"
> score=70;if (score >60 ) {
     print ("Passwd") } else {
     print ("Failed")}
[1] "Passwd"
> ifelse( score >60,print ("Passwd"),print ("Failed"))
[1] "Passwd"
[1] "Passwd"

> centre <- function(x, type) {
     
+     switch(type,
+            mean = mean(x),
+            median = median(x),
+            trimmed = mean(x, trim = .1))
+ }
> x <- rcauchy(10)
> centre(x, "mean")
[1] 0.4486207
> centre(x, "median")
[1] 0.1439863
> centre(x, "trimmed")
[1] 0.3657161

16.线性回归
回归:指那些用一个或多个预测变量,也称自变量或解释变量,来预测响应变量,也称为因变量、效标变量或结果变量的方法。
R中常用符号:
~:分隔符号,左边为响应变量,右边为解释变量
+:分隔预测变量
线性拟合常用函数:

函数 用途
summary() 展示拟合模型的详细结果
fitted() 列出拟合模型的预测值
residuals() 列出拟合模型的残差值
coefficients() l列出拟合模型的模型参数(截距项和斜率)
confint() 提供模型参数的置信区间
anova() 生成一个拟合模型的方差分析表,或者比较两个或更多拟合模型的方差分析表
vcov() 列出模型参数的协方差矩阵
AIC() 输出赤池信息统计量
plot() 生成评价拟合模型的诊断图
predict() 用拟合模型对新的数据集预测响应变量值
> plot(women$height,women$weight)  #散点图
> abline(fit)    #绘制拟合曲线
>
#fit2
> fit2 <- lm(weight ~ height + I(height^2), data=women)
> summary(fit2)
> summary(fit)
> plot(women$height,women$weight,
     main="Women Age 30-39",
     xlab="Height (in inches)",
     ylab="Weight (in lbs)")
> lines(women$height,fitted(fit2))
> abline(fit)
> lines(women$height,fitted(fit2),col="red")

# fit3
> fit3 <- lm (weight~ height+I(height^2)+I(height^3),data=women)
> plot(women$height,women$weight)
> lines(women$height,fitted(fit))
> lines(women$height,fitted(fit2),col="red")
> lines(women$height,fitted(fit3),col="blue")

17.多元线性回归

> states <- as.data.frame(state.x77[,c("Murder", "Population",
                                     "Illiteracy", "Income", "Frost")])
> fit <- lm(Murder ~ Population + Illiteracy + Income + Frost, data=states)>   #回归分析,Murder为因变量,其余为自变量
> summary(fit)    #查看结果
> coef(fit)

> fit1 <- lm (Murder ~ Population+Illiteracy+Income+Frost,data=states)
> fit2 <- lm (Murder ~ Population+Illiteracy,data=states)
> AIC(fit1,fit2)   #两模型比较谁更好,fit2更好,若是数量更多,则用AIC不行,要用逐步回归法和全子集回归法
     df      AIC
fit1  6 241.6429
fit2  4 237.6565

#逐步回归法
# Backward stepwise selection
> library(MASS)
> states <- as.data.frame(state.x77[,c("Murder", "Population",
                                     "Illiteracy", "Income", "Frost")])
> fit <- lm(Murder ~ Population + Illiteracy + Income + Frost,
          data=states)
> stepAIC(fit, direction="backward")

#全子集回归法
#  All subsets regression
> library(leaps)
> states <- as.data.frame(state.x77[,c("Murder", "Population",
                                     "Illiteracy", "Income", "Frost")])
> leaps <-regsubsets(Murder ~ Population + Illiteracy + Income +
                     Frost, data=states, nbest=4)
> plot(leaps, scale="adjr2")

18.回归诊断
满足OLS模型统计假设(最小二乘法)
(1)正态性:对于固定的自变量值,因变量值成正态分布
(2)独立性:因变量之间相互独立
(3)线性:因变量与自变量之间为线形相关
(4)同方差性:因变量的方差不随自变量的水平不同而变化。也可称作不变方差。

抽样法验证
(1)数据集中有1000个样本,随机抽取500个数据进行回归分析;
(2)模型建好以后,利用predict函数,对剩余500个样本进行预测,比较残差值
(3)如果预测准确,说明模型可以,否则就需要调整模型

19.方差分析(ANOVA 变异数分析)
用于两个及两个以上样本均数差别的显著性检验

方差分析
(1)单因素方差分析ANOVA(组内、组间)
(2)双因素方差分析ANOVA
(3)协方差分析ANCOVA
(4)多元方差分析MANOVA
(5)多元协方差分析MANCOVA

20.广义线性分析
线性回归和方差分析都是基于正态分布的假设,广义线性模型扩展了线性模型的框架,它包含了非正态因变量的分析。
泊松回归:用来为计数资料和列联表建模的一种回归分析
泊松回归假设因变量是泊松分布,并假设它平均值的对数可被未知参数的线性组合建模。

21.主成分分析与因子分析步骤
(1)数据预处理
(2)选择分析模型
(3)判断要选择的主成分/因子数目
(4)选择主成分/因子
(5)旋转主成分/因子
(6)解释结果
(7)计算主成分或因子得分

22.主成分与因子分析比较
同:
(1)都对原始数据进行降维处理
(2)都消除了原始指标的相关性对综合评价所造成的信息重复的影响
(3)构造综合评价时所涉及的权数具有客观性
(4)在信息损失不大的前提下,减少了评价工作量
异:
主成分分析
(1)用较少的变量表示原来的样本
(2)目的是样本数据信息损失最小的原则下,对高维变量进行降维
(3)参数估计:一般是求相关矩阵的特征值和相应的特征向量,取前几个计算成分
(4)应用:应用较少变量来解释各个样本的特征

因子分析
(1)用较少的因子表示原来的变量
(2)目的是尽可能保持原变量相互关系,寻找变量的公共因子
(3)参数估计:指定几个公因子,将其还原成相关系数矩阵,在和原本相关矩阵最相似原则下,估计各个公因子的估计值
(4)应用:找到具有本质意义的少量因子来归纳原来变量的特征

你可能感兴趣的:(R语言)