Analysis of Variance 方差分析
title: "Analysis of Variance"
author: '01'
date: "2022-11-23"
output: html_document
editor_options:
markdown:
wrap: 72
library(dplyr)
library(ggplot2)
library(knitr)
library(palmerpenguins)
library(tidyr)
library(ISLR2)
Analysis of Variance 方差分析
Assumptions
- 每个样本服从正态分布。
- 每个样本方差\(\sigma^2\)相同。
- 样本之间相互独立 levels:a factor has many levels.
要做的事情:比较各总体(每个水平下的总体)的均值是否相等
One Way ANOVA
举例:比较三种疗法的好坏 如果是两种,可以使用t test
这里,可以把三种疗法看作3个因子,(因子变量/分类变量),响应变量:治疗效果
Treatment is a between-groups factor with 3 levels.
This model is called one-way ANOVA, bacause there's only one
classification variable.
So this is a one-way between-groups ANOVA.
这里可以看作是独立的,对于其中两组可以做独立T检验。
对于某一种疗法,下面引入一个新的变量------时间。例如:在5周之后做测量,在6个月之后做测量。
Time is within-groups factor with 2 levels.
This model is called one-way within-groups ANOVA. (因为疗法都是一样的)
这里不是独立的,对于其中两组做T检验时,paired=TRUE
如果同时考虑疗法和时间: This model is a two-factor ANOVA.
对于两个因子,可以考虑它们时间是否有交互作用。
Eg. 5种药物
library(tidyverse)
data(cholesterol, package = "multcomp")
plotdata <- cholesterol %>%
group_by(trt) %>%
summarize(n = n(), #n()表示出现系数。
mean = mean(response),
sd = sd(response))
plotdata
ggplot(plotdata, aes(x = trt, y = mean, group = 1)) +
geom_point(size = 3, color = "red") +
geom_line(linetype = "dashed", color = "darkgrey") +
geom_errorbar(aes(ymin = mean - qt(0.975, df = n - 1) * sd / sqrt(n),
ymax = mean + qt(0.975, df = n - 1) * sd / sqrt(n)), width = .1) +
labs(x = "Treatment", y = "Response", title = "Mean plot with 95% confidence interval")
# geom_errorbar()是在算95%的置信区间
One-way ANOVA
fit <- aov(response ~ trt, data = cholesterol)
summary(fit)
原假设:所有方法都一样 备择假设:至少有一个方法不一样
所以此处可以拒绝原假设
stands for sample i in class j.
$\mu$ = 总体的均值
$\alpha_j$ = $\mu_j - \mu$
$K$ = total number of class
$n_j$ = total number of samples in class j
$n$ = total number of samples
$\epsilon_{ij}$ 这里假设是正态的,均值为0,方差相等为$\sigma^2$
$$Y_{ij} = \mu + 0\alpha_1+ ... + 1\alpha_j+...+0\alpha_K + \epsilon+{ij}\]
于是,我们对这样一个模型做linear regression:
\]
当Y属于第j类时,\(X_j\) = 1,否则\(X_j\) = 0
注意在这里\(\mu\)可以直接用总体来估计。 并且\(\sum{\alpha_{ij}} = 0\)
\(\hat b = ( X^T X) X^T Y\)
mean(cholesterol$response)
fit2 <- lm(response - mean(response) ~ 0 + trt, data = cholesterol) #这里的结果表示
fit2 <- lm(response ~ 0 + trt, data = cholesterol) #这里的结果表示:trt1time的效果比平均效果差6.95
fit2 <- lm(response ~ trt, data = cholesterol) #这里的结果表示:截距就是trt1time的疗效。trt1time的结果是5.78,trt2time的结果比trt2time的高3.443
fit2
要验证\(H_0: \alpha_1 = \alpha_2 = \alpha_3 = \alpha_4 = \alpha_5 = 0\)
\(H_1\) = 至少有一个\(\alpha_j\)不为0。
这里可以选择验证\(\sum {\alpha_i^2} = 0\)
\]
它服从卡方分布。 d.f. = K - 1
这里方差未知,需要估计$$\hat \sigma^2 = s^2 = \frac{1}{n-K} \sum \sum (Y_{ij} - \bar Y_{ij})^2 $$它服从卡方分布。
d.f. = n - K
用这两个卡方分布去构造一个F分布的统计量。
说白了就是一开始就想知道$$\frac{1}{\sigma^2}\sum_{j = 1}^{K} n_j (\bar Y.,j - \bar Y ..)^2$$是不是接近0,所以去找了它的分布,然后发现它是一个卡方分布,然后就可以构造求p值
$$$$
我们发现在$$Y = \mu + \alpha_j + \epsilon_{ij}$$
中前两项是已知的,最后一项可以生成,所以我们可以生成Y,
\(sdf\)
Eg. two-way factorial ANOVA
data(ToothGrowth)
ToothGrowth$dose <- factor(ToothGrowth$dose) # what happens if we remove this line?
stats <- ToothGrowth %>%
group_by(supp, dose) %>%
summarize(n = n(),
mean = mean(len),
sd = sd(len),
std.error = sd/sqrt(n))
stats
fit1 <- aov(len ~ supp * dose, data = ToothGrowth)
summary(fit1)
fit2 <- aov(len ~ supp + dose, data = ToothGrowth)
summary(fit2)
注意:把dose看作double和把dose看作一个因子,得到的是有差异的。
单因子H_0:所有的alpha都是0 多因子H_0:所有的alpha都是0,
\(y\) supp: \alpha_1 -> OJ, \alpha_2 -> VC dose: \beta_1 -> 0.5,
\beta_2 -> 1 \beta_3 -> 1
\(y_{ijk}\), i-th supp, j-th dose, k-th sample
\(y_{ijk} = \mu + \alpha_i + \beta_j + \epsilon_{ijk}\)
\(\mu + \alpha_1\) 表示OJ维生素的样本的均值
同样假设 \(\epsilon_{ijk} \sim N(0, \sigma^2)\)
\(n_{ij} = 10, i \in (0,2], j \in (0,3]\) the number of samples that take
i-th vitamin and j-th dose
\]
\]
\(H_0: \alpha_1 = \alpha_2 = 0\) \(\alpha_1^2 + \alpha_2^2\) 小即可
即\(\sum_{i=1}^2 (y_i - \bar y)^2\) 就是上面表里的205,sum of square, d.f.
= 2-1 = 1 (\(\alpha_1 + \alpha_2 = 0\)) Residual sum of square:
\(\sum (y_{ijk} - \bar y_{ij.})^2}\)
total sum of square \(\sum_{ijk}(y_{ijk} - \bar y_{...})^2\) d.f. = 60 - 1
= 59,最后residual的那个d.f. = 59 - 1 - 2 = 56.
# validate 交互效应
#y ~ supp + dose + supp:dose
#也就是乘法
同样的剂量和不同的维生素之间是有差异的,
如果没有交互效应,两条线应该是平行的。
data(ToothGrowth)
lm(len ~ supp + dose, data = ToothGrowth)
ToothGrowth$dose = as.double(ToothGrowth$dose)
lm(len ~ supp + dose, data = ToothGrowth)
intercept表示当不用suppVC也不用dose就是9.272
suppVC表示,使用suppVC效果会差3.7
dose表示,固定其他的东西的情况下,多使用一个单位的剂量,效果会好9,764
这里因为factor类型的只有一个supp, 所有条件 if OJ y = 9.272 + 9.764dose
if VC y = 9.272 - 3.700 + 9.764dose
注意如果当dose是分类变量的时候会不一样。会出现dose1,dose2,相应的所有变量的解释会变得不一样。
同时,d.f.也会不一样。
summary: perdictor-response 1. quan-quan :regression 2. cate-quan :
anova 3. mix-quan: anova
Classification
when response is categorical.
\(E(Y|X) = \beta_0 + \beta_1 X\) \(Var(Y|X) = \sigma^2\)
P(Y = 1|X) = \(\beta_0 + \beta_1 X\) P(Y = 0|X)
用线性模型来拟合概率,但是线性模型求出的概率可能为负数。
这时,我们使用logit。 利用logistic function\(y = \frac{e^x}{1+e^x}\)
此时\(P(Y = 1|X) = \frac{e^{\beta_0+\beta_1X}}{1 + e^{\beta_0 + \beta_1 X}}\)
Eg. Default dataset
data(Default)
b <- ggplot(Default[1:1000,],aes(x=balance,y=income))
b + geom_point(aes(color=student))
Eg. IRIS dataset
b <- ggplot(iris,aes(x=Sepal.Length,y=Sepal.Width))
b + geom_point(aes(color=Species))
response variable Y = 1,2,3 它们之间实际上没有顺序关系,不能用线性回归,
Logistic regression
\]
odds = $\frac{p(X)}{1 - p(X)} $
表示划分为一类的概率和划分为另一类的概率之比。
\]
X每增加一个单位,odds就增加\(e^{\beta_1}\)倍。
这里既然涉及概率,用Maximum Likelihood来求解。
联合概率是:\(P(Y_1 = y_1,... Y_n = y_n | X_1,...,X_n) = \Pi_{i=1}^n P(Y_i = y_i | X_i = x_i)\)
其中 if \(y_i = 0\)
\(P(Y_i = y_i | X_i = x_i) = P(Y_i = 0 | X_i = x_i) = 1 - P(Y_i = 1 | X_i = x_i) = 1 - \frac{e^{\beta_0+\beta_1 x_i}}{1+e^{\beta_0+\beta_1 x_i}} = \frac{1}{1+e^{\beta_0+\beta_1 x_i}}\)
if \(y_i = 1\)
\(P(Y_i = y_i | X_i = x_i) = P(Y_i = 0 | X_i = x_i) = 1 - P(Y_i = 1 | X_i = x_i) = 1 - \frac{e^{\beta_0+\beta_1 x_i}}{1+e^{\beta_0+\beta_1 x_i}} = \frac{1}{1+e^{\beta_0+\beta_1 x_i}}\)
\]
没有解析解,只能求数值解,
set.seed(1)
n <- nrow(Default)
relabel <- sample(n,n)
train.index <- relabel[1:9000]
test.index <- relabel[9001:10000]
train.data <- Default[train.index,]
glm.fit <- glm(student~income,data=Default,family="binomial")
glm.fit$coefficients
如果family = "gaussian"就是linear regression
Hypothesis tests
\(H_0: \beta_1 = 0\)
z-score = \(\frac{\hat \beta_1}{SE(\hat \beta_1)}\)
还是想知道\(\beta_1\)的分布,但是只能知道它的渐进分布为正态分布。
summary(glm.fit)
x.new=data.frame(c(10000,40000))
colnames(x.new) = 'income' #要把列名强调好
predict(glm.fit,newdata = x.new,type = "response")
test.data <- Default[test.index,]
glm.prob <- predict(glm.fit,test.data,type="response")
glm.pred <- rep("No",1000)
glm.pred[glm.prob > 0.5] <- "Yes"
table(glm.pred,test.data$student)
mean(glm.pred != test.data$student)
Multiple Logistic Regression
\]
\(\beta_1\)表示固定其他的不变,在X_1增加一个单位时,左边会增大\(e^\{\beta_1}\)倍。
\]
glm.fit2 <- glm(student~balance+income,data=train.data,family='binomial')
glm.fit2$coefficients
summary(glm.fit2)$coef
test.data <- Default[test.index,]
glm.prob2 <- predict(glm.fit2,test.data,type="response")
glm.pred2 <- rep("No",1000)
glm.pred2[glm.prob2 > 0.5] <- "Yes"
table(glm.pred2,test.data$student)
mean(glm.pred2 != test.data$student)
发现增加了一个predictor效果还变差了。需要找个一个评估模型的方法。例如:cross-validation
Multinomial Logistic Regression
library(nnet)
multinom.fit <- multinom(Species ~ ., data=iris,trace = FALSE)
summary(multinom.fit)$coefficients
table(iris$Species,predict(multinom.fit))
Analysis of Variance 方差分析的更多相关文章
- Analysis of variance(ANOVA)
方差分析,也称为"变异数分析",用于两个及两个以上样本均值(group means)差别的显著性检验.在 ANOVA 的环境下,一个观测得到的方差视为是由不同方差的源组合而成.
- Hotelling T2检验和多元方差分析
1.1 Hotelling T2检验 Hotelling T2检验是一种常用多变量检验方法,是单变量检验的自然推广,常用于两组均向量的比较. 设两个含量分析为n,m的样本来自具有公共协方差阵的q维正态 ...
- 方差分析(ANOVA)(转)
转自:http://blog.sciencenet.cn/blog-116082-218338.html 方差分析(analysis of variance,ANOVA),即变量分析,是对多个样本平均 ...
- 方差分析 | ANOVA | 原理 | R代码 | 进阶 | one way and two way
原理 比较两组就用t-test,比较三组及以上就用ANOVA.注意:我们默认说的都是one way ANOVA,也就是对group的分类标准只有一个,比如case和control(ABCD多组),tw ...
- 使用spss做方差分析
还记得上学那会老师专门敲了黑板,强调方差分析很重要..单因素方差分析(Analysis of Variance, ANOVA),如果变量多,就是多因素方差分析,还需要考虑到多重共线性, 也就是线性代数 ...
- 实验的方差分析(R语言)
实验设计与数据处理(大数据分析B中也用到F分布,故总结一下,加深印象)第3课小结--实验的方差分析(one-way analysis of variance) 概述 实验结果\(S\)受多个因素\(A ...
- 方差分析anova
方差分析 参考:http://wiki.mbalib.com/wiki/%E6%96%B9%E5%B7%AE%E5%88%86%E6%9E%90 方差分析(Analysis of Variance, ...
- R in action读书笔记(12)第九章 方差分析
第九章方差分析 9.2 ANOVA 模型拟合 9.2.1 aov()函数 aov(formula, data = NULL, projections =FALSE, qr = TRUE, contra ...
- SAS学习笔记26 方差分析
对于多于两组(k>2)样本均数的比较,t检验不再适用,方差分析(analysis of variance, ANOVA)则是解决上述问题的重要分析方法.方差分析由R.A.Fisher(1923) ...
- 方差分析(python代码实现)
python机器学习-乳腺癌细胞挖掘(欢迎关注博主主页,学习python视频资源,还有大量免费python经典文章) https://study.163.com/course/introduction ...
随机推荐
- MySQLdb._exceptions.OperationalError: (2026, 'SSL connection error: unknown error number')
MySQLdb._exceptions.OperationalError: (2026, 'SSL connection error: unknown error number') 问题发生在我远程连 ...
- Linux系列(8)-添加用户并设置密码
#添加用户[root@iZm5ehnt0e8indgne1hibuZ ~]# useradd -m linsiyu #设置用户密码[root@iZm5ehnt0e8indgne1hibuZ ~]# p ...
- Javascript 事件派发 dispatcher
基本使用 基础事件 let event = new Event("click") //新建click事件 node.addEventListener("click&quo ...
- ARMV8 short notes
offset addressing pre-index addressing define like: load the compass content of the operand 2 to ope ...
- .net 生成Excel并保存
void SaveQuestionToExcel(List<Question> datas, string path) { using (Workbook workbook = new H ...
- 备份linux系统日志脚本
#!/bin/bash#script_name bkup_log.sh#7 0 * * 1 cd /home/tools/;./bkup_log.sh >& /dev/nullproce ...
- Blog作业01
目录 前言 设计与分析 踩坑心得 改进建议 总结 前言 这三次作业的知识点覆盖的很全面,从最开始的int赋值变量,循环,到Boolean值,sort等一些函数,到后来的对象,类的创建和声明,gette ...
- [代码片段] 获取分辨率DPI和像素、毫米、英寸互相转换
private static float DEFAULT_DPI_X = 0; private static float DEFAULT_DPI_Y = 0; /// <summary>获 ...
- 6. 基础查(会员信息) - 创建查询Web Api - 配置Table Permission
Power Portal中的Web API可以对门户页面中所有的Microsoft Dataverse实体进行创建.更新和删除操作.我们可以直接使用门户Web API对产品创建新客户.更新联系人或 ...
- redis的数据操作和python操作redis+关系非关系数据库差异
关系型数据库(RMDBS) 数据库中表与表的数据之间存在某种关联的内在关系,因为这种关系,所以我们称这种数据库为关系型数据库. 典型:Mysql/MariaDB.postgreSQL.Oracle.S ...