使用过程中发现自己的R语言基础太差了,回头补课。P51-P64
所学视频:
https://www.bilibili.com/video/BV19x411X7C6?p=31&spm_id_from=pageDriver
面向纯小白的R语言入门,我看过的最棒教材。授课老师平平无奇的东北口音、该死的幽默,扶我起来,我还可以再肝!
数据分析实战
老师的吐槽大会,乐死我了。hhh
线性回归
regression,通常指用一个或者多个预测变量,也称自变量或者解释变量,来预测响应变量,也称为因变量、效标变量或者结果变量的方法
-
普通最小二乘回归法OLS
plot(women$height, women$weight)
lm()
fit <- lm(weight~ height, data = women)#拟合,寻找模型
summary(fit)
summary.lm(fit)
#残差越小,拟合越精确,若全是0,则为线性方程
coefficients(fit)
fitted(fit)
residuals(fit)
predict(fit,women)
plot()
abline(fit)
fit2 <- lm(weight~ height + I(height^2),data = women ) # lm(y~x),注意I()
fit2
summary(fit2)
plot(women$height,women$weight)
abline(fit) #低级绘图函数,添加在plot上
lines(women$height,fitted(fit2),col = 'red')# 低级绘图函数,添加在plot上
fit3 <- lm(weight~ height + I(height^2)+ I(height^3),data = women )
lines(women$height,fitted(fit3),col = 'blue')
#不可拟合不足,也不可拟合过度
#什么时候需要加多项式? 需要先了解数据,多尝试
多元线性回归
## 多元线性回归
state <- as.data.frame(state.x77[,c("Murder","Population","Illiteracy","Income","Frost")])
state.x77
fit <- lm(Murder~Population+Illiteracy+Income+Frost,data = state)
summary(fit)
options(digits = 4)#保留四位小数
coef(fit)
存在多个变量
fit <- lm(mpg~ hp+ wt+ hp:wt,data = mtcars)# hp 和wt存在交互,但是不清楚具体过程
summary(fit)
多个变量怎么看拟合好坏
AIC 考虑模型统计拟合度、用来拟合的参数数目
AIC值越小,越好
fit1 <- lm(Murder~Population+Illiteracy+Income+Frost,data = state)
fit2 <- lm(Murder~Population+Illiteracy,data = state)
AIC(fit1,fit2)
df AIC
fit1 6 241.6
fit2 4 237.7
#fit2拟合效果更好
更多的变量:
- 逐步回归法
- 全子集回归法【检测所有模型】
library(leaps)
state <- as.data.frame(state.x77[,c("Murder","Population","Illiteracy","Income","Frost")])
leaps <- regsubsets(Murder~Population+Illiteracy+Income+Frost,data = state, nbest = 4 )
plot(leaps, scale= 'adjr2')
回归诊断
图一:是否呈线性关系, 是
图二:是否呈正态分布,一条直线,正态分布
图三:位置与尺寸图,描述同方差性,如果方差不变,水平线周围的点应该是随机分布
图四:残差与杠杆图,对单个数据值的观测,鉴别离群点、高杠杆点、强影响点
opar <- par(no.readonly = TRUE)# 全局起作用,设置一次,后面都是将四张图绘制在一起。
fit <- lm(weight~ height,data = women)
par(mfrow= c(2,2))
plot(fit)
par(opar)
fit2<- lm(weight~ height+I(height^2),data = women)
par(mfrow= c(2,2))
plot(fit2)
par(opar)
抽样法验证
模型建好,用predict函数对剩余500个样本进行预测,比较残差值,若预测准确,说明模型可以。
方差分析
analysis of variance,简称ANOVA,也称为变异数分析。用于两个及两个以上样本均数差别的显著性检验。广义上,方差分析也是回归分析的一种,只不过线性回归的因变量一般是连续型变量。自变量是因子时,研究关注的重点通常会从预测转向不同组之间的差异比较。也就是方差分析。
- 因子的应用【很重要!!
计算频数、独立性检验、相关性检验、方差分析、主成分分析、因子分析 - 方差分析分类ANOVA
单因素方差分析(组内、组间)ANOVA
双因素方差分析ANOVA
协方差分析ANCOVA
多元方差分析MANOVA
多元协方差分析MANCOVA -
方差分析公式中特殊符号
##单因素
library(multcomp)#胆固醇接受疗法
attach(cholesterol)# 单因素,看组间差异是否显著
#attach 直接将数据集的列写入内存,可直接只用trt 和response等变量名
table(trt)
aggregate(response, by= list(trt), FUN = mean)
fit <- aov(response~trt,data = cholesterol)
summary(fit)
plot(fit)
fit.lm <- lm(response~trt,data = cholesterol)
##单因素协方差
library(multcomp)
table(litter$dose)
attach(litter)
aggregate(weight,by = list(dose), FUN= mean)
fit <- aov(weight~gesttime + dose, data = litter)# gesttime 是协变量,放前面。
summary(fit)
## 双因素Two way anova
ToothGrowth
attach(ToothGrowth)
xtabs(~supp+dose)
aggregate(len,by = list(supp,dose),FUN = mean)
ToothGrowth$dose <- as.factor(ToothGrowth$dose)
ToothGrowth$dose <- factor(ToothGrowth$dose)
class(ToothGrowth$dose)
fit <- aov(len~ supp* dose, data = ToothGrowth)
summary(fit)
# 结果可视化
install.packages('HH')
library(HH)
interaction.plot(dose, supp, len, type = 'b',
col = c('red','blue'), pch = c(16,18),
main = 'Interaction between Dose and Supplement Type')
# 多元方差分析
library(MASS)
attach(UScereal)
shelf <- factor(shelf)
aggregate(cbind(calories, fat, sugars), by= list(shelf),FUN = mean)
fit <- manova(cbind(calories, fat, sugars)~shelf, data= UScereal )#使用cbind,而不能用加号。加号是右边使用的
summary(fit)
summary.aov(fit)#挨个因素分析
功效分析
power analysis,可以帮助在给定置信度的情况下,判断检测到给定效应值所需的样本量。也可以在给定置信度水平情况下,计算在某样本量内能检测到给定效应值的概率
library(pwr)
#线性模型
pwr.f2.test(u = 3, f2=0.0769, sig.level = 0.05, power = 0.9)
pwr.anova.test(k = 2,f =0.25, sig.level = 0.05, power = 0.9)
广义线性模型
拓展了线性模型的框架,包含了非正态因变量的分析。线性回归、方差分析都是基于正态分布的假设
-泊松回归 ,用来为计数资料和列联表建模的一种回归分析。泊松回归假设因变量是泊松分布,并假设它平均值的对数可被未知参数的线性组合建模
glm()
#泊松回归
data(breslow.dat, package = 'robust')
breslow.dat
summary(breslow.dat)
attach(breslow.dat)
fit <- glm(sumY~ Base + Trt+Age, data = breslow.dat,family = poisson(link = "log"))
summary(fit)
exp(coef(fit))
-logistic 回归
logistic 回归
通过一系列连续型或者类别型预测变量来预测二值型结果变量是,logistic 回归是一个非常有用的工具。流行病学研究中用的多。
library(AER)
Affairs
data(Affairs,package = 'AER')
summary(Affairs)
table(Affairs$affairs)
prop.table(table(Affairs$affairs))
#创造一个二分型 变量
Affairs$ynaffairs[Affairs$affairs >0] <- 1
Affairs$ynaffairs[Affairs$affairs == 0] <- 0
Affairs$ynaffairs <- factor(Affairs$ynaffairs, levels = c(0,1),labels = c('No','Yes'))
table(Affairs$ynaffairs)
attach(Affairs)
fit <- glm(ynaffairs~ gender+ age+yearsmarried+ children +religiousness +education+ occupation+rating, data = Affairs, family = binomial)
summary(fit)
fit1 <- glm(ynaffairs~ age+yearsmarried +religiousness +rating, data = Affairs, family = binomial)
summary(fit1)
#卡方检验
anova(fit,fit1,test = 'Chisq')#两次结果差别不大
coef(fit1)#回归系数,这里是对数优势比
exp(coef(fit1))
主成分分析
Principal Component Analysis,PCA,探索和简化多变量复杂关系的常用方法。 是一种数据降维技巧。可以将大量相关变量转化为一组很少的不相关变量。这些无关变量成为主成分。主成分是对原始变量重新进行线性组合,将原先众多具有一定相关性的指标,重新组合为一组的心得相互独立的综合指标。
- 步骤:
数据预处理、选择分析模型、判断要选择的主成分/因子数目、选择主成分/因子、旋转主成分/因子【可选】、解释结果、计算主成分/因子得分【可选】。 - 主成分分析
library (psych)
USJudgeRatings
pc <- principal(USJudgeRatings,nfactors = 1)
pc <- principal(USJudgeRatings,nfactors = 1, scores = TRUE)
pc$scores
fa.parallel(USJudgeRatings,fa = 'pc', n.iter = 100)#观察主成分为1
pc <- principal(USJudgeRatings, nfactors = 1,rotate = 'none',scores = FALSE)
pc
Harman23.cor
fa.parallel(Harman23.cor$cov, n.obs = 302, fa = 'pc', n.iter = 100,show.legend = F) #虚线上碎石点数目 = 主成分数目 , 2
pc <- principal(Harman23.cor$cov,nfactors = 2,rotate = 'none')
- 主成分旋转,
正交旋转: 方差极大旋转
斜交旋转
pc <- principal(Harman23.cor$cov,nfactors = 2,rotate = 'varimax')
因子分析
探索性因子分析法 exploratory factor analysis,简称为EFA,是一系列用来发现一组变量的潜在结构的方法。通过找寻一组更小的、潜在的活隐藏的结构来解释已观测到的、显式的变量间的关系
因子分析步骤与PCA一致
library(psych)
ability.cov
ability.cov$cov
options(digits = 2)
covariances <- ability.cov$cov
correlations <- cov2cor(covariances)#转化为相关系数矩阵
correlations
fa.parallel(correlations, fa= 'both', n.obs = 112, n.iter = 100)
fa <- fa(correlations, nfactors = 2, rotate = 'none', fm = 'pa')
fa
fa <- fa(correlations, nfactors = 2, rotate = 'varimax', fm = 'pa')#正交
购物篮分析
啤酒与尿布
library(arules)
data(Groceries)
inspect(Groceries)#查看数据集内容
fit <- apriori(Groceries, parameter = list(support= 0.01,confidence = 0.5))
summary(fit)
inspect(fit)