相关文章推荐
喝醉的米饭  ·  .Net 6 ...·  12 月前    · 
  • 45.2.1 evalCpp() 转换单一计算表达式
  • 45.2.2 cppFunction() 转换简单的C++函数—Fibnacci例子
  • 45.2.3 sourceCpp() 转换C++程序—正负交替迭代例子
  • 45.2.4 sourceCpp() 转换C++源文件中的程序—正负交替迭代例子
  • 45.2.5 sourceCpp() 转换C++源程序文件—卷积例子
  • 45.2.6 随机数例子
  • 45.2.7 bootstrap例子
  • 45.2.8 在Rmd文件中使用C++源程序文件
  • 46 R与C++的类型转换
  • 46.1 wrap() 把C++变量返回到R中
  • 46.2 as() 函数把R变量转换为C++类型
  • 46.3 as() wrap() 的隐含调用
  • 47 Rcpp 属性
  • 47.1 Rcpp属性介绍
  • 47.2 在C++源程序中指定要导出的C++函数
  • 47.2.1 特殊注释 //[[Rcpp::export]]
  • 47.2.2 修改导出的函数名
  • 47.2.3 可导出的函数
  • 47.3 在R中编译链接C++代码
  • 47.3.1 sourceCpp() 函数中直接包含C++源程序字符串
  • 47.3.2 cppFunction() 函数中直接包含C++函数源程序字符串
  • 47.3.3 evalCpp() 函数中直接包含C++源程序表达式字符串
  • 47.3.4 depends 指定要链接的库
  • 47.4 Rcpp属性的其它功能
  • 47.4.1 自变量有缺省值的函数
  • 47.4.2 异常传递
  • 47.4.3 允许用户中断
  • 47.4.4 把R代码写在C++源文件中
  • 47.4.5 invisible 要求函数结果不自动显示
  • 47.4.6 在C++中调用R的随机数发生器
  • 48 Rcpp提供的C++数据类型
  • 48.1 RObject类
  • 48.2 IntegerVector类
  • 48.2.1 IntegerVector示例1:返回完全数
  • 48.2.2 IntegerVector示例2:输入整数向量
  • 48.3 NumericVector类
  • 48.3.1 示例1:计算元素 \(p\) 次方的和
  • 48.3.2 示例2: clone 函数
  • 48.3.3 示例3:向量子集
  • 48.4 NumericMatrix类
  • 48.4.1 示例1:计算矩阵各列模的最大值
  • 48.4.2 示例2:把输入矩阵制作副本计算元素平方根
  • 48.4.3 示例3:访问列子集
  • 48.5 Rcpp的其它向量类
  • 48.5.1 Rcpp的LogicalVector类
  • 48.5.2 Rcpp的CharacterVector类型
  • 48.6 Rcpp提供的其它数据类型
  • 48.6.1 Named类型
  • 48.6.2 List类型
  • 48.6.3 Rcpp的DataFrame类
  • 48.6.4 Rcpp的Function类
  • 48.6.5 Rcpp的Environment类
  • 49 Rcpp糖
  • 49.1 简单示例
  • 49.2 向量化的运算符
  • 49.2.1 向量化的四则运算
  • 49.2.2 向量化的赋值运算
  • 49.2.3 向量化的二元逻辑运算
  • 49.2.4 向量化的一元运算符
  • 49.3 用Rcpp访问数学函数
  • 49.4 用Rcpp访问统计分布类函数
  • 49.5 在Rcpp中产生随机数
  • 49.6 返回单一逻辑值的函数
  • 49.7 返回糖表达式的函数
  • 49.7.1 is_na
  • 49.7.2 seq_along
  • 49.7.3 seq_len
  • 49.7.4 pmin pmax
  • 49.7.5 ifelse
  • 49.7.6 sapply lapply
  • 49.7.7 sign
  • 49.7.8 diff
  • 49.8 R与Rcpp不同语法示例
  • 49.9 用RcppArmadillo执行矩阵运算
  • 49.9.1 生成多元正态分布随机数
  • 49.9.2 快速计算线性回归
  • 50 用Rcpp帮助制作R扩展包
  • 50.1 不用扩展包共享C++代码的方法
  • 50.2 生成扩展包
  • 50.2.1 利用已有基于Rcpp属性的源程序制作扩展包
  • 50.2.2 DESCRIPTION文件
  • 50.2.3 NAMESPACE文件
  • 50.3 重新编译
  • 50.4 建立C++用的接口界面
  • 51 R编程例子
  • 51.1 R语言
  • 51.1.1 用向量作逆变换
  • 51.1.2 斐波那契数列计算
  • 51.1.3 穷举所有排列
  • 51.1.4 可重复分组方式穷举
  • 51.1.5 升降连计数
  • 51.1.6 高斯八皇后问题
  • 51.1.7 最小能量路径
  • 51.2 概率
  • 51.2.1 智者千虑必有一失
  • 51.2.2 圆桌夫妇座位问题
  • 51.3 科学计算
  • 51.3.1 城市间最短路径
  • 51.3.2 Daubechies小波函数计算
  • 51.3.3 房间加热温度变化
  • 51.4 统计计算
  • 51.4.1 线性回归实例
  • 51.4.2 核回归与核密度估计
  • 51.4.3 二维随机模拟积分
  • 51.4.4 潜周期估计
  • 51.4.5 ARMA(1,1)模型估计
  • 51.4.6 VAR模型平稳性
  • 51.4.7 贮存可靠性评估
  • 51.5 数据处理
  • 51.5.1 小题分题型分数汇总
  • 51.5.2 类别编号重排
  • 51.6 文本处理
  • 51.6.1 用R语言下载处理《红楼梦》htm文件
  • 52 使用经验
  • 52.1 文件管理
  • 52.1.1 文件备份
  • 52.1.2 工作空间
  • 52.2 程序格式
  • A R Markdown文件格式
  • A.1 R Markdown文件
  • A.2 R Markdown文件的编译
  • A.2.1 编译的实际过程
  • A.3 在R Markdown文件中插入R代码
  • A.4 输出表格
  • A.5 利用R程序插图
  • A.6 冗余输出控制
  • A.7 代码段选项
  • A.7.1 代码和文本输出结果格式
  • A.7.2 图形选项
  • A.7.3 缓存(cache)选项
  • A.8 章节目录链接问题
  • A.9 其它编程语言引擎
  • A.10 交互内容
  • A.11 属性设置
  • A.11.1 YAML元数据
  • A.11.2 输出格式
  • A.11.3 输出格式设置
  • A.11.4 目录设置
  • A.11.5 章节自动编号
  • A.11.6 Word输出章节自动编号及模板功能
  • A.11.7 HTML特有输出格式设置
  • A.11.8 关于数学公式支持的设置
  • A.11.9 输出设置文件
  • A.12 LaTeX和PDF输出
  • A.12.1 TinyTex的安装使用
  • A.12.2 Rmd中Latex设置
  • A.13 生成期刊文章
  • A.14 附录:经验与问题
  • A.14.1 Word模板制作
  • A.14.2 数学公式设置补充
  • B 用bookdown制作图书
  • B.1 介绍
  • B.2 一本书的设置
  • B.3 章节结构
  • B.4 书的编译
  • B.5 交叉引用
  • B.6 数学公式和公式编号
  • B.7 定理类编号
  • B.8 文献引用
  • B.9 插图
  • B.10 表格
  • B.10.1 Markdown表格
  • B.10.2 kable() 函数制作表格
  • B.10.3 R中其它制作表格的包
  • B.11 数学公式的设置
  • B.12 使用经验
  • B.12.1 学位论文
  • B.12.2 LaTeX
  • B.12.3 算法
  • B.12.4 中文乱码
  • B.12.5 图片格式
  • B.12.6 其它经验
  • B.13 bookdown的一些使用问题
  • C 用R Markdown制作简易网站
  • C.1 介绍
  • C.2 简易网站制作
  • C.2.1 网站结构
  • C.2.2 编译
  • C.2.3 内容文件
  • C.2.4 网站设置
  • C.3 用blogdown制作网站
  • C.3.1 生成新网站的框架
  • C.3.2 网页内容文件及其设置
  • C.3.3 初学者的工作流程
  • C.3.4 网站设置文件
  • C.3.5 静态文件
  • D 制作幻灯片
  • D.1 介绍
  • D.2 Slidy幻灯片
  • D.2.1 文件格式
  • D.2.2 幻灯片编译
  • D.2.3 播放控制
  • D.2.4 生成单页HTML
  • D.2.5 数学公式处理与输出设置文件
  • D.2.6 其它选项
  • D.2.7 slidy幻灯片激光笔失效问题的修改
  • D.3 MS PowerPoint幻灯片
  • D.4 Bearmer幻灯片格式
  • D.5 R Presentation格式
  • References
  • 编著:李东风
  • 考虑连续型随机变量之间的关系。相关系数定义为 \[\rho(X, Y) = \frac{E\left[ (X - EX)(Y-EY) \right]} {\sqrt{\text{Var}(X)\text{Var}(Y)}} 又称Pearson相关系数。

    \(-1 \leq \rho \leq 1\) \(\rho\) 接近于 \(+1\) 表示 \(X\) \(Y\) 有正向的相关; \(\rho\) 接近于 \(-1\) 表示 \(X\) \(Y\) 有负向的相关。

    相关系数代表的是 线性 相关性, 对于 \(X\) \(Y\) 的其它相关可能反映不出来, 比如 \(X \sim \text{N}(0,1)\) \(Y = X^2\) , 有 \(\rho(X, Y) = 0\)

    给定样本 \((X_i, Y_i), i=1,2,\dots,n\) ,样本相关系数为 \[r = \frac{\sum_{i=1}^n (X_i - \bar X) (Y_i - \bar Y)} {\sqrt{\sum_{i=1}^n (X_i - \bar X)^2 \sum_{i=1}^n (Y_i - \bar Y)^2}}

    用散点图和散点图矩阵直观地查看变量间的相关。

    例如,线性相关的模拟数据的散点图:

  • 取值 \(-1 \leq r \leq 1\)
  • \(r>0\) 表示正线性相关; \(r<0\) 表示负线性相关。
  • \(r=1\) \((x_i, y_i), i=1,\dots,n\) \(n\) 个点完全在一条正斜率的直线上, 属于确定性关系。
  • \(r=-1\) \((x_i, y_i), i=1,\dots,n\) \(n\) 个点完全在一条负斜率的直线上, 属于确定性关系。
  • 计算相关系数时与 \(x, y\) 的次序或记号无关。
  • 如果对变量 \(x\) 或者 \(y\) 分别乘以倍数,再分别加上不同的平移量, 相关系数不变。 即: \(a + bx\) \(c + dy\) 的相关系数, 等于 \(x, y\) 的相关系数。 这样,相关系数不受单位、量纲的影响。 相关系数是无量纲的。
  • 如果 \(x\) \(y\) 之间是非线性相关, 相关系数不一定能准确反映其关系, 只能作为一定程度的近似。
  • 设变量 \(X\) \(Y\) 的样本存放于R向量 x y 中, 用 cor(x,y) 计算样本相关系数。

    相关系数是从数据中得到的 \(x\) \(y\) 两个变量关系的一种描述, 不能直接引申为因果关系。

    例如,增加身高,不一定增长体重。

    实际中有许多错误理解相关与因果性的例子。 例如:研究发现喝咖啡的人群比不喝咖啡的人群心脏病发病率高。 于是断言喝咖啡导致心脏病危险增加。 进一步研究更多的因素发现, 喝咖啡放糖很多的人心脏病发病率才增高了。

    31.1.3 相关系数大小

  • 相关系数绝对值在0.8以上认为高度相关。
  • 在0.5到0.8之间认为中度相关。
  • 在0.3到0.5之间认为低度相关。
  • 在0.3以下认为不相关或相关性很弱以至于没有实际价值。
  • 当然,在特别重要的问题中, 只要经过检验显著不等于零的相关都认为是有意义的。
  • 31.1.4 相关系数的检验

    相关系数 \(r\) 是总体相关系数 \(\rho\) 的估计。 \[H_0: \rho=0 \longleftrightarrow H_a: \rho\neq 0\] 检验统计量 \[t = \frac{r \sqrt{n-2}}{\sqrt{1 - r^2}}\] 当总体 \((X, Y)\) 服从二元正态分布且 \(H_0: \rho=0\) 成立时, \(t\) 服从 \(t(n-2)\) 分布。 设 \(t\) 统计量值为 \(t_0\) ,p值为 \[P(|t(n-2)| > |t_0|)\]

    在R中用 cor.test(x,y) 计算检验。

    pwr包的 pwr.r.test() 可以计算相关系数检验的功效和样本量。 用相关系数绝对值作为效应大小, 常用值为:

  • 小: \(0.1\) ;
  • 中: \(0.3\) ;
  • 大: \(0.5\)
  • 比如,样本量为30, 检验“大”的效应, 计算其功效:

    如果 x 是一个仅包含数值型列的数据框, 则 cor(x) 计算样本相关系数矩阵; var(x) 计算样本协方差阵。

    corrgram::corrgram() 可以绘制相关系数矩阵的图形, 用颜色和阴影浓度代表相关系数正负和绝对值大小, 用饼图中阴影部分大小代表相关系数绝对值大小。

    当变量 \((X, Y)\) 正相关性很强时, 任意两个观测的 \(X\) 值的大小顺序应该与 \(Y\) 值的大小顺序相同; 如果独立, 一对观测的 \(X\) 值比较和 \(Y\) 值比较顺序相同与顺序相反的数目应该基本相同。 Kandall tau系数也是取值于 \([-1, 1]\) 区间, 用这样的思想表示两个变量的相关性和正负。

    31.2.1 模型

    考虑两个变量 \(Y\) \(X\) 的关系,希望用 \(X\) 值的变化解释 \(Y\) 值的变化。 \(X\) 称为自变量(independent variable), \(Y\) 称为因变量(response variable)。

    \[\begin{aligned} Y = a + b X + \varepsilon, \quad \varepsilon \sim \text{N}(0,\sigma^2) \end{aligned}

    在回归分析理论中通常假定 \(X\) 是非随机的, 因变量 \(Y\) 的随机性来自误差项 \(\varepsilon\) 。 实际应用中 \(X\) 常常也是随机的。

    设观测值为 \((X_i, Y_i), i=1,2,\dots,n\) ,假设观测值满足上模型。 \[\begin{aligned} Y_i = a + b X_i + \varepsilon_i, \quad \varepsilon_i \text{ iid }\sim \text{N}(0,\sigma^2) . \end{aligned}

    31.2.2 最小二乘法

    直观上看,要找最优的直线 \(y=a+bx\) 使得直线与观测到的点最接近。

    31.2.3.1 拟合优度指标

    按照最小二乘估计公式,只要 \(x_1, x_2, \dots, x_n\) 不全相等, 不论 \(x, y\) 之间有没有相关关系, 都能计算出参数估计值。 得到的回归直线与观测数据的散点之间的接近程度代表了回归结果的优劣。

    残差平方和 \[\text{SSE}=\sum_{i=1}^n (y_i - \hat a - \hat b x_i)^2\] 残差平方和越小, 说明回归直线与观测数据点吻合得越好。

    \(y\) 是因变量, 因变量的数据的离差平方和 \[\text{SST}=\sum_{i=1}^n (y_i - \bar y)^2\] 代表了因变量的未知变动大小, 需要对这样的变动用自变量进行解释, 称SST为总平方和。

    可以证明如下平方和分解公式: \[\text{SST} = \text{SSR} + \text{SSE}\] 其中SSR称为回归平方和。

    \(\hat y_i = \hat\beta_0 + \hat\beta_1 x_i\) 称为第 \(i\) 个拟合值, 回归平方和为 \[\text{SSR}=\sum_{i=1}^n (\hat y_i - \bar y)^2 = \hat b^2 \sum_{i=1}^n (x_i - \bar x)^2

    在总平方和中, 回归平方和是能够用回归斜率与自变量的变动解释的部分, 残差平方和是自变量不能解释的变动。 分解中,回归平方和越大,误差平方和越小, 拟合越好。 \[R^2 = \frac{\text{SSR}}{\text{SST}} = 1 - \frac{\text{SSE}}{\text{SST}}\] 称为回归的复相关系数,或判定系数。

    \(0 \leq R^2 \leq 1\) 。判定系数越大,回归拟合越好。 \(R^2=1\) 时,观测点完全落在一条直线上面。 一元回归中 \(R^2\) \(x\) \(y\) 的样本相关系数的平方。 在多元回归时只能用复相关系数。

    估计误差项方差 \(\sigma^2\) 为 \hat\sigma^2 = \frac{1}{n-2}\sum_{i=1}^n (y_i - \hat a - \hat b x_i)^2 = \frac{1}{n-2} \text{SSE}

    \(\hat\sigma\) \(\sigma\) 的估计, R的回归结果中显示为“residual standard error”(残差标准误差)。 \(\hat\sigma\) 是残差 \(e_i = y_i - \hat y_i\) 的标准差的一个粗略估计。

    31.2.3.2 线性关系显著性检验

    \(b=0\) 时,模型退化为 \(Y = a + \varepsilon\) \(X\) 不出现在模型中, 说明 \(Y\) \(X\) 不相关。检验 H_0: b=0 \longleftrightarrow H_\text{a}: b \neq 0 \[F = \frac{\text{SSR}}{\text{SSE}/(n-2)}\] 检验p值为 \(P(F(1, n-2) > c)\) (设 \(c\) \(F\) 统计量的值)。 取检验水平 \(\alpha\) , p值小于等于 \(\alpha\) 时拒绝 \(H_0\) , 认为 \(y\) \(x\) 有显著的线性相关关系, 否则认为 \(y\) \(x\) 没有显著的线性相关关系。

    也可以使用t统计量 \[t = \frac{\hat b}{\text{SE}(\hat b)}\] \text{SE}(\hat b) = \hat\sigma / \sqrt{\sum_{i=1}^n (x_i - \bar x)^2} 设t统计量的值为 \(c\) , 检验p值为 \(P(|t(n-2)| > |c|)\)

    31.2.4 R程序

    设数据保存在数据框d中,变量名为y和x,用R的 lm() 函数计算回归,如:

    除了系数的显著性检验以外, 对误差项是否符合回归模型假定中的独立性、方差齐性、正态性等, 可以利用回归残差进行一系列的回归诊断。 还可以计算一些异常值、强影响点的诊断。

    \(n\) 组观测值,回归模型为 y_i = a + b x_i + \varepsilon_i \hat y_i = \hat a + \hat b x_i 残差(residual)为 \[e_i = y_i - \hat y_i\]

    残差相当于模型中的随机误差, 但仅在模型假定成立时才是随机误差的合理估计。 所以残差能够反映违反模型假定的情况。

    \(e_i\) 有量纲,不好比较大小。 定义标准化残差(内部学生化残差): r_i = \frac{e_i}{S_e\sqrt{1 - \frac{1}{n} - \frac{(x_i - \bar x)^2}{\sum_{k=1}^n (x_k - \bar x)^2}}} 样本量较大时标准化残差近似服从标准正态分布, 于是取值于 \([-2,2]\) 范围外的点是可疑的离群点。

    R中用 residuals() 从回归结果计算残差, 用 rstandard() 从回归结果计算标准化残差。

    R中 plot(lmres) (lmres为回归结果变量)可以做简单回归诊断。

    \(X\) \(x_0\) \(Y\) 的预测值为 \(\hat y_0 = \hat a + \hat b x_0\) 。 置信水平为 \(1-\alpha\) 的预测区间为 \[\hat y_0 \pm \lambda \hat\sigma \sqrt{1 + \frac{1}{n} + \frac{(\bar x - x_0)^2}{\sum_i (x_i - \bar x)^2}} 其含义是 \(P(y_0 \in \text{预测区间}) = 1 - \alpha\) \(\lambda\) 是标准正态分布双侧 \(\alpha\) 分位数 qnorm(1 - alpha/2)

    predict(lmres) 得到 \(\hat y_i, i=1,\dots,n\) 的值, lmres 表示回归结果变量。

    predict(lmres, interval="prediction") 同时得到预测的置信区间, 需要的话加入 level= 选项设定置信度。

    回归的置信区间有两种, 上述的区间是“预测区间”(CLI), 使得 \(P(y_0 \in \text{预测区间}) = 1 - \alpha\) ; 另一种区间称为均值的置信区间(CLM), 使得 \(P(Ey_0 \in \text{均值置信区间}) = 1 - \alpha\)

    31.2.7 控制

    如果需要把 \(Y\) 的值控制在 \([y_l, y_u]\) 范围内,问如何控制 \(X\) 的范围, 可以求解 \(x_0\) 的范围使上面的置信区间包含在 \([y_l, y_u]\) 内。

    近似地可以解不等式 \[\begin{aligned} \hat a + \hat b x_0 - z_{1-\frac{\alpha}{2}} \hat \sigma \geq & y_l \\ \hat a + \hat b x_0 + z_{1-\frac{\alpha}{2}} \hat \sigma \leq & y_u \end{aligned}\] 其中 \(z_{1-\frac{\alpha}{2}}\) 为标准正态分布双侧 \(\alpha\) 分位数 (用 qnorm(1-alpha/2) 计算)。