视频链接:https://www.bilibili.com/video/BV19x411X7C6
TAB补齐
Alt+Shift+K:显示快捷键
Rpack <- installed.package()[,1]
save(Rpack,file="Rpack.Rdata")
#在新设备上可以load加载处Rpack里边的内容,再逐一下载
for (i in Rpack) install.packages(i)
注意:R语言中字符串要加引号,否则会被当成是对象
必须为同一类型才能处理
向量化变成主要是因为R语言是统计软件,高效率,避免循环
R中向量是从1开始而不是从0开始
如果使用负值来索引表示输出除了这个数以外的数字
#索引该位置的数字,但是不能同时出现正负号
> x[c(4:18)]
[1] 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
#可以使用逻辑值向量输出逻辑值为T的数字,数量可以不用对应上,但是逻辑值多的会出现缺失情况
y[c(T,T,T,F,F,F)]
y[y>5]#把y>5的输出
y[y>5 & y<9]
#字符串访问
>z <- c("one","two","three")
>"one" %in% z
TRUE
> v
[1] 1 2 3 4 5 6
> v[20]=4
> v
[1] 1 2 3 4 5 6 NA NA NA NA NA NA NA NA NA NA NA NA NA 4
> append(x = v,values = 99,after = 4)
[1] 1 2 3 4 99 5 6 NA NA NA NA NA NA NA NA NA NA NA NA NA 4
元素个数不相等时会将个数少的进行循环使用,且数量上必须是倍数关系
逻辑运算:x>5 大于5的向量位置上会变为TRUE,其余变为FALSE
ceiling | 返回不小于X的最小整数 |
---|---|
floor | 返回不大于X的最大整数 |
trunc | 返回整数部分 |
round | 四舍五入,第一个参数是向量,第二个是保留的位数(digits) |
sinif | 与round差不多,第二个参数是保留的数字数量 |
sum | 求和 |
---|---|
max/min | 返回最大或最小值 |
range | 返回最大值和最小值 |
mean | 均值 |
var | 方差 |
median | 中位数 |
prod | 连乘的积 |
which | 返回索引值 |
> x <- 1:20
> x
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
> v <- matrix(x,4,5)
> v
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 9 13 17
[2,] 2 6 10 14 18
[3,] 3 7 11 15 19
[4,] 4 8 12 16 20
#矩阵行列重命名
> cname <- c("C1","C2","C3","C4","C5")
> rname <- c("R1","R2","R3","R4")
> dimnames(v) <- list(rname,cname)
> v
C1 C2 C3 C4 C5
R1 1 5 9 13 17
R2 2 6 10 14 18
R3 3 7 11 15 19
R4 4 8 12 16 20
#分配维数
> dim(x) <- c(4,5)
> x
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 9 13 17
[2,] 2 6 10 14 18
[3,] 3 7 11 15 19
[4,] 4 8 12 16 20
m[2,] | 访问第二行 |
---|---|
m[1,2] | 访问一行二列的数字 |
m[1,c(2,3,4)] | 访问第一行二三四列的数字 |
m[-1,2] | 去除第一行,取第二列 |
colSums | 每一列的和 |
---|---|
rowSums | 每一行的和 |
colMeans | 每一列的平均值 |
diag | 返回对角线位置的值 |
m*n | 矩阵的内积 |
m %*% n | 矩阵的外积 |
t(m) | 将m进行转置 |
> z <- array(1:24)
> z
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
> dim1 <- c("A1","A2")
> dim2 <- c("B1","B2","B3")
> dim3 <- c("C1","C2","C3","C4")
> v <- array(z,c(2,3,4),dimnames = list(dim1,dim2,dim3))
> v
, , C1
B1 B2 B3
A1 1 3 5
A2 2 4 6
, , C2
B1 B2 B3
A1 7 9 11
A2 8 10 12
, , C3
B1 B2 B3
A1 13 15 17
A2 14 16 18
, , C4
B1 B2 B3
A1 19 21 23
A2 20 22 24
可以赋名称,类似于字典
> a <- (1:20)
> a
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
> b <- "Hello"
> b
[1] "Hello"
> c <- matrix(a,4,5)
> c
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 9 13 17
[2,] 2 6 10 14 18
[3,] 3 7 11 15 19
[4,] 4 8 12 16 20
#创建列表
> mlist <- list(a,b,c)
> mlist
[[1]]
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
[[2]]
[1] "Hello"
[[3]]
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 9 13 17
[2,] 2 6 10 14 18
[3,] 3 7 11 15 19
[4,] 4 8 12 16 20
> mlist[1]
[[1]]
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
#同时访问多个列表元素就需要用到向量
mlist$ (后边会自动引出列表元素)
> mlist$first
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
使用一个中括号表示引用列表第一个元素,使用两个中括号表示引用列表第一个元素的本身
> class(mlist[1])
[1] "list"
> class(mlist[[1]])
[1] "integer"
添加列表元素同样需要两个中括号
删除列表元素:给该位置赋值NULL
索引会出现行名列名
索引方式与上边类似
table() | 分类统计因子中含有的level |
---|---|
cut() | 分割函数 |
is.na(a) | 检查a中是否有NA,有就返回TRUE,可以用来测试数据集 |
---|---|
colSums() | 检测缺失值数目 |
oa.omit() | 去掉向量中的NA值 |
处理字符串的函数(R语言中字符串也满足正则表达式,可以使用正则表达式)
nchar() | 返回向量元素中字符串的长度(包含空格),就算元素不是字符串也会转换成字符串来处理 |
---|---|
length() | 返回向量元素个数 |
paste() | 粘贴字符串,后边元素加个sep="-"表示用-连接,当一个向量有多个字符串时是在各个元素后分别添加 |
substr() | 提取字符,可以提取每个字符串元素的start到stop |
toupper / tolower | 将字符串转换为大写 / 小写 |
gsub() | 首字母大小写转换 |
strsplit() | 分割字符串 |
> patientID <- c(1, 2, 3, 4)
> admdate <- c("10/15/2009","11/01/2009","10/21/2009","10/28/2009")
> age <- c(25, 34, 28, 52)
> diabetes <- c("Type1", "Type2", "Type1", "Type1")
> status <- c("Poor", "Improved", "Excellent", "Poor")
> data <- data.frame(patientID,age,diabetes,status)
> data
patientID age diabetes status
1 1 25 Type1 Poor
2 2 34 Type2 Improved
3 3 28 Type1 Excellent
4 4 52 Type1 Poor
> data2 <- data.frame(patientID=character(0),admdate=character(0),age=numeric(),diabetes=character(),status=character())
> data2 <- edit(data2) #输入这个会弹出一个方框可以修改数据,未定义的数据就是NA,一定要像这样找个变量保存,不然编辑器中修改的数据无法保存
> data2
patientID admdate age diabetes status
1 5 NA
2 6 NA
3 7 NA
4 5 NA
#也可以使用fix函数,可以直接保存
> read.table(gzfile("input.txt.gz"))
install.packages(openxlsx)
library(openxlsx)
a<-read.xlsx("exercise1.xlsx",sheet=1)#文件名+sheet的序号,简单粗暴
#将文件内容写入变量a中
> a <- read.xlsx("data.xlsx")
> library(openxlsx)
> write.xlsx(a,file = "c.xlsx",sheetName = "she")
> saveRDS(iris,file = "iris.RDS")
> iris <- readRDS("E:/mathmodel/R_studio/RS_project/iris.RDS") #双击打开RDS文件自动导入
> x <- readRDS("iris.RDS")
save.image() 保存工作空间
load 加载工作空间
> who <- read.csv("WHO.csv")
> who1 <- who[c(1:50),c(1:10)]
> View(who1)
> who4 <- who[which(who$CountryID>50 &who$CountryID<=100),]#注意逗号
> who5 <- subset(who,who$CountryID>50 & who$CountryID<=100)
> x <- 1:20
> sample(x,10)#replace参数默认为F,无重复抽样
[1] 13 5 11 1 17 4 8 20 6 12
> who7 <- who[sort(sample(who$CountryID,30,replace = F)),]
使用了自带数据集mtcars
mtcars[-1:-5,] #删除固定行
mtcars[,-1:-5] #删除固定列
cbind(两个数据集) #添加一列
rbind(两个数据集) #添加一行 要求两个数据集要有相同的列名
当有重叠时不会删除重复项
duplicated(数据集) #判断行名是否有重复值,返回T和F
data4[duplicated(data4),] #取出重复部分
data4[!duplicated(data4),] #取出非重复部分
也可以直接unique()函数一步到位
unique(data4)
transform(women,height=height*2.54) #这样women数据集中的height列就变成了原来的2.54倍
巧妙之处在于FUN这个参数
适用于数据框或者矩阵
MARGIN=1对行操作 ,=2对列操作
FUN:所使用的函数
> state.name
[1] "Alabama" "Alaska" "Arizona" "Arkansas"
[5] "California" "Colorado" "Connecticut" "Delaware"
[9] "Florida" "Georgia" "Hawaii" "Idaho"
[13] "Illinois" "Indiana" "Iowa" "Kansas"
[17] "Kentucky" "Louisiana" "Maine" "Maryland"
[21] "Massachusetts" "Michigan" "Minnesota" "Mississippi"
[25] "Missouri" "Montana" "Nebraska" "Nevada"
[29] "New Hampshire" "New Jersey" "New Mexico" "New York"
[33] "North Carolina" "North Dakota" "Ohio" "Oklahoma"
[37] "Oregon" "Pennsylvania" "Rhode Island" "South Carolina"
[41] "South Dakota" "Tennessee" "Texas" "Utah"
[45] "Vermont" "Virginia" "Washington" "West Virginia"
[49] "Wisconsin" "Wyoming"
> state.division
[1] East South Central Pacific Mountain West South Central
[5] Pacific Mountain New England South Atlantic
[9] South Atlantic South Atlantic Pacific Mountain
[13] East North Central East North Central West North Central West North Central
[17] East South Central West South Central New England South Atlantic
[21] New England East North Central West North Central East South Central
[25] West North Central Mountain West North Central Mountain
[29] New England Middle Atlantic Mountain Middle Atlantic
[33] South Atlantic West North Central East North Central West South Central
[37] Pacific Middle Atlantic New England South Atlantic
[41] West North Central East South Central West South Central Mountain
[45] New England South Atlantic Pacific South Atlantic
[49] East North Central Mountain
9 Levels: New England Middle Atlantic South Atlantic ... Pacific
> tapply(state.name,state.division,FUN=length) #操作的是因子
New England Middle Atlantic South Atlantic East South Central
6 3 8 4
West South Central East North Central West North Central Mountain
4 5 7 8
Pacific
5
数据中心化:指数据集中的给想数据减去数据集的均值
数据标准化:指在中心化之后再除以数据集的标准差
> library(reshape2)
> head(airquality)
> names(airquality) <- tolower(names(airquality))
> head(airquality)
> aql <- melt(airquality)
> head(aql)
> head(airquality)
ozone solar.r wind temp month day
> aql <- melt(airquality,id.vars=c("month","day"))
> aql
month day variable value
特点:较为简洁
每一列表示一个变量
每一行表示一个观测
一个变量和一个观测确定唯一值
dplyr::distinct() | 去除重复行叠加 |
---|---|
dplyr::filter() | 匹配项,使用布尔运算去除一些数值 |
dplyr::slice() | 切片,取出任意行 |
sample_n(数据集,10) | 随机抽取10行 |
sample_frac(数据集,0.1) | 按照0.1比例进行随机抽取 |
arrange | 排序(如果加上desc则是按照相反的顺序进行排序 |
d | 概率密度函数 |
---|---|
p | 分布函数 |
q | 分布函数的反函数 |
r | 产生相同分布的随机 |
给正态分布normal前加上dpqr前缀就构成函数名
rNormal:正态分布的随机数函数
其他概率分布函数也是如此
了解分布就可以绘制出各种曲线
分布名称 | 缩写 | 分布名称 | 缩写 |
---|---|---|---|
Beta分布 | beta | Logistic分布 | logis |
二项分布 | binom | 多项分布 | multinom |
柯西分布 | cauchy | 负二项分布 | nbinom |
(非中心)卡方分布 | chisq | 正态分布 | norm |
指数分布 | exp | 泊松分布 | pois |
F分布 | f | Wilcoxon符号秩分布 | signrank |
Gamma分布 | gamma | t分布 | t |
几何分布 | geom | 均匀分布 | unif |
超几何分布 | hyper | Weibull分布 | weibull |
对数正态分布 | lnorm | Wilcoxon秩和分布 | wilcox |
默认生成0到1的数
可以调节参数min和max
如果想要两次生成的随机数相同,可以
set.seed(66)#一个绑定号码
runif(50)
runif(50) #这里生成的随机数与前边不同
set.seed(66)
runif(50)#这里生成的随机数与前边相同
> library(vcd)
> mytable <- table(Arthritis$Treatment,Arthritis$Improved)
> mytable
None Some Marked
Placebo 29 7 7
Treated 13 7 21
> chisq.test(mytable)
Pearson's Chi-squared test
data: mytable
X-squared = 13.055, df = 2, p-value = 0.001463
> mytable <- table(Arthritis$Sex,Arthritis$Improved)
> chisq.test(mytable)
Pearson's Chi-squared test
data: mytable
X-squared = 4.8407, df = 2, p-value = 0.08889
Warning message:
In chisq.test(mytable) : Chi-squared approximation may be incorrect
> mytable <- xtabs(~Treatment+Improved,data=Arthritis)
> fisher.test(mytable)
Fisher's Exact Test for Count Data
data: mytable
p-value = 0.001393
alternative hypothesis: two.sided
> mytable <- xtabs(~Treatment+Improved+Sex,data=Arthritis)
> mantelhaen.test(mytable)
Cochran-Mantel-Haenszel test
data: mytable
Cochran-Mantel-Haenszel M^2 = 14.632, df = 2, p-value = 0.0006647
> mytable <- xtabs(~Sex+Treatment+Improved,data=Arthritis)
> mantelhaen.test(mytable)
Mantel-Haenszel chi-squared test with continuity correction
data: mytable
Mantel-Haenszel X-squared = 2.0863, df = 1, p-value = 0.1486
alternative hypothesis: true common odds ratio is not equal to 1
95 percent confidence interval:
0.8566711 8.0070521
sample estimates:
common odds ratio
2.619048
pcor(u,s)函数用来计算偏相关系数
u是一个数值向量,前两个数值表示要计算相关系数的变量下标,其余数值为条件变量的下标
jsbl <- c(1,5) #要计算的相关系数的变量下标
tjbl <- c(2,3,6) #条件(控制)变量的下标,即要排除影响的变量的下标
u <- c(jsbl,tjbl)
s <- cov(pcordata) #变量的协方差
r <- pcor(u,s) #偏相关系数
> cor.test(state.x77[,3],state.x77[,5])
Pearson's product-moment correlation
data: state.x77[, 3] and state.x77[, 5]
t = 6.8479, df = 48, p-value = 1.258e-08
alternative hypothesis: true correlation is not equal to 0
#置信区间:由样本统计量所构造的总体参数的估计区间,在统计学中一个概率样本的置信区间是对这个样本的某个总体参数的区间估计,置信区间展现的是这个参数的真实值由一定概率落在测量结果的周围的程度,置信区间给出的是被测量参数的测量值的可信程度
95 percent confidence interval: #置信区间
0.5279280 0.8207295
sample estimates:
cor
0.7029752
设置字体样式,颜色等参数
myfun <- function(选项参数)
{
函数体
}
回归regression:指那些用一个或多个预测变量,也称自变量或解释变量,来预测响应变量,也称为因变量、校标变量或结果变量的方法
> fit <- lm(weight ~ height,data = women)
> fit
Call:
lm(formula = weight ~ height, data = women)
Coefficients:
(Intercept) height
-87.52 3.45
> summary(fit)
Call:
lm(formula = weight ~ height, data = women)
Residuals: #残差:真实值与预测值的差 下边是残差分布,残差值越小越精确
Min 1Q Median 3Q Max
-1.7333 -1.1333 -0.3833 0.7417 3.1167
Coefficients: #检验 weight = 3.45height -87.52
Estimate Std. Error t value Pr(>|t|)
(Intercept) -87.51667 5.93694 -14.74 1.71e-09 *** #截距项
height 3.45000 0.09114 37.85 1.09e-14 *** #系数
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 #星星评定标准
Residual standard error: 1.525 on 13 degrees of freedom #残差标准误差
Multiple R-squared: 0.991, Adjusted R-squared: 0.9903 #R方判定系数 (0~1) 判断模型拟合质量 99.1%表示模型能表示99.1%的数据
F-statistic: 1433 on 1 and 13 DF, p-value: 1.091e-14 #F统计量,表示模型是否显著,用P值来衡量,p越小越显著
#判断模型顺序:从下到上
#先判断F,如果不小于0.05那么模型没有价值了,小于0.05再看R方
summary | 展示拟合模型的详细结果 |
---|---|
coefficients | 列出拟合模型的模型参数(截距项和斜率 |
confint | 提供模型参数的置信区间 |
fitted | 列出拟合模型的预测值 |
residuals | 列出拟合模型的残差值 |
anova | 生成一个拟合模型的方差分析表,或者比较两个或更多拟合模型的方差分析表 |
vcov | 列出模型参数的协方差矩阵 |
AIC | 输出赤池信息统计量 |
plot | 生成评价拟合模型的诊断图 |
predict | 用拟合模型对新的数据集预测响应变量值 |
#接上边
> plot(women$height,women$weight)
> abline(fit)
#拟合后生成曲线
#提高拟合度
> fit2 <- lm(weight ~ height+I(height^2),data = women) #增加一次,如果要三次就得再加I(height^3)
> lines(women$weight,fitted(fit2),col="red") #颜色区分
> states <- as.data.frame(state.x77[,c("Murder","Population","Illiteracy","Income","Frost")])
> class(states)
[1] "data.frame"
> fit <- lm(Murder~Population+Illiteracy+Income+Frost,data=states)
> fit
Call:
lm(formula = Murder ~ Population + Illiteracy + Income + Frost,
data = states)
Coefficients:
(Intercept) Population Illiteracy Income Frost
1.235e+00 2.237e-04 4.143e+00 6.442e-05 5.813e-04
> summary(fit)
Call:
lm(formula = Murder ~ Population + Illiteracy + Income + Frost,
data = states)
Residuals:
Min 1Q Median 3Q Max
-4.7960 -1.6495 -0.0811 1.4815 7.6210
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.235e+00 3.866e+00 0.319 0.7510
Population 2.237e-04 9.052e-05 2.471 0.0173 *
Illiteracy 4.143e+00 8.744e-01 4.738 2.19e-05 ***
Income 6.442e-05 6.837e-04 0.094 0.9253
Frost 5.813e-04 1.005e-02 0.058 0.9541
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 2.535 on 45 degrees of freedom
Multiple R-squared: 0.567, Adjusted R-squared: 0.5285
F-statistic: 14.73 on 4 and 45 DF, p-value: 9.133e-08
> options(digits = 4)
> coef(fit)
(Intercept) Population Illiteracy Income Frost
1.235e+00 2.237e-04 4.143e+00 6.442e-05 5.813e-04
多个变量时,要注意变量两两之间的关系,不确定两个变量的关系可以用冒号,如下
> fit <- lm(mpg~hp+wt+hp:wt,data=mtcars) #这两个变量由交互关系,但时不清楚是什么关系,那么可以用冒号连接
> summary(fit)
Call:
lm(formula = mpg ~ hp + wt + hp:wt, data = mtcars)
Residuals:
Min 1Q Median 3Q Max
-3.063 -1.649 -0.736 1.421 4.551
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 49.80842 3.60516 13.82 5.0e-14 ***
hp -0.12010 0.02470 -4.86 4.0e-05 ***
wt -8.21662 1.26971 -6.47 5.2e-07 ***
hp:wt 0.02785 0.00742 3.75 0.00081 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 2.15 on 28 degrees of freedom
Multiple R-squared: 0.885, Adjusted R-squared: 0.872
F-statistic: 71.7 on 3 and 28 DF, p-value: 2.98e-13
赤池信息准则
诊断问题
检验统一假设的方法
summary():生成各项指标
plot():输入lm分析后的数值产生四幅图
> opar <- par(no.readonly = TRUE)
> fit <- lm(weight~height,data=women)
> par(mfrow=c(2,2)) #设置四个图显示在一个画面内
> plot(fit)
满足OLS(最小二乘法)模型统计假设的条件才可以用lm()函数进行拟合,但是四个图并不能拿来判断独立性
抽样法验证模型
aov()函数来进行分析(变量顺序很重要)
设计 | 表达式 |
---|---|
单因素ANOVA | y~A |
含单个协变量的单因素ANCOVA | y~x+A |
双因素ANOVA | y~A*B |
含两个协变量的双因素ANCOVA | y~x1+x2+A*B |
随机化区组 | y~B+A(B是区组因子) |
单因素组内ANOVE | y~A+Error(Subject/A) |
含单个组内因子(W)和单个组间因子(B)的重复测量ANOVA | y~B*W+Error(Subject/W) |