R 中计算 R2(R 平方)的函数

2023-11-22

我有一个包含观察数据和建模数据的数据框,我想计算 R2 值。我期望有一个可以调用的函数,但找不到。我知道我可以自己编写并应用它,但我是否遗漏了一些明显的东西?我想要类似的东西

obs <- 1:5
mod <- c(0.8,2.4,2,3,4.8)
df <- data.frame(obs, mod)

R2 <- rsq(df)
# 0.85

您需要一点统计知识才能看到这一点。两个向量之间的 R 平方就是它们的相关性的平方。所以你可以将你的函数定义为:

rsq <- function (x, y) cor(x, y) ^ 2

桑迪潘的回答将返回完全相同的结果(请参阅以下证明),但就目前情况而言,它看起来更具可读性(由于明显的$r.squared).


我们来统计一下

基本上我们拟合线性回归y over x,并计算回归平方和与总平方和的比率。

引理 1:回归y ~ x相当于y - mean(y) ~ x - mean(x)

lemma 1

引理 2:beta = cov(x, y) / var(x)

lemma 2

引理 3:R.square = cor(x, y) ^ 2

lemma 3


Warning

两个任意向量之间的 R 平方x and y(相同长度)只是它们线性关系的优度度量。三思而行!! R 的平方x + a and y + b对于任何恒定变化都是相同的a and b。因此,它对于“预测的准确性”来说是一个薄弱甚至无用的衡量标准。使用 MSE 或 RMSE 代替:

  • 如何从 lm 结果中获取 RMSE?
  • R - 给定训练集和测试集的训练模型,计算测试 MSE

我同意42-的评论:

R 平方由与回归函数相关的汇总函数报告。但前提是这样的估计在统计上是合理的。

R 平方可以是“拟合优度”的(但不是最好的)度量。但没有理由证明它可以衡量样本外预测的好坏。如果将数据分为训练部分和测试部分,并在训练部分拟合回归模型,则可以在训练部分获得有效的 R 平方值,但无法在测试部分合法计算 R 平方。有些人这样做了,但我不同意。

这是一个非常极端的例子:

preds <- 1:4/4
actual <- 1:4

这两个向量之间的 R 平方为 1。是的,当然,一个只是另一个向量的线性缩放,因此它们具有完美的线性关系。但是,你真的认为preds是一个很好的预测actual??


回复明智的话

感谢您的意见1, 2 and 你的详细回答.

您可能误解了该过程。给定两个向量x and y,我们首先拟合一条回归线y ~ x然后计算回归平方和和总平方和。看起来您跳过了这个回归步骤并直接进行平方和计算。这是错误的,因为平方和的划分不成立,并且您无法以一致的方式计算 R 平方。

正如您所演示的,这只是计算 R 平方的一种方法:

preds <- c(1, 2, 3)
actual <- c(2, 2, 4)
rss <- sum((preds - actual) ^ 2)  ## residual sum of squares
tss <- sum((actual - mean(actual)) ^ 2)  ## total sum of squares
rsq <- 1 - rss/tss
#[1] 0.25

但还有另一个:

regss <- sum((preds - mean(preds)) ^ 2) ## regression sum of squares
regss / tss
#[1] 0.75

此外,您的公式可以给出负值(正确的值应该是 1,如上面在Warning部分)。

preds <- 1:4 / 4
actual <- 1:4
rss <- sum((preds - actual) ^ 2)  ## residual sum of squares
tss <- sum((actual - mean(actual)) ^ 2)  ## total sum of squares
rsq <- 1 - rss/tss
#[1] -2.375

最后评论

当我两年前发布最初的答案时,我从未想到这个答案最终会这么长。然而,考虑到该帖子的高观点,我觉得有必要添加更多统计细节和讨论。我不想误导人们,因为他们可以如此轻松地计算 R 平方,所以他们可以在任何地方使用 R 平方。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R 中计算 R2(R 平方)的函数 的相关文章

  • dplyr 中的 Summarize 是否可以不删除数据框中的其他列?

    我有一个包含三列的数据框 我正在尝试进行简单的总结以查找数据框中每个城市的最高温度 但同时保留每个最高温度列出的日期 这是数据框 我们称之为 maxT new ID Date Max TemperatureF 1 TUS 1960 04 0
  • 可以声明对 Rust 中未使用的结果发出警告的函数吗? [复制]

    这个问题在这里已经有答案了 Rust 是否有办法声明一个函数 对于任何类型 不使用其结果都会发出警告 类似于 GCC 的东西 attribute warn unused result 自 1 27 起 must use 也适用于函数 看来
  • 分离并重新附加“tools:rstudio”

    又名玩火 以下不起作用 rstd obj lt as environment tools rstudio detach tools rstudio attach rstd obj name tools rstudio 好吧 它似乎有效 但随
  • 使用底格里斯河从纬度/经度获取人口普查区

    我有相对较多的坐标 我想获取其人口普查区 除了 FIPS 代码 我知道我可以使用以下命令查找各个纬度 经度对call geolocator latlon 已完成here https stackoverflow com questions 5
  • 将值替换为其各自列的名称

    我有一个数据框 Code 401k CVS 101A true 231N true FD54 true 99JB 85F4 true 我试图用相应的列名称 例如 401k 替换 true 字符值 这是我想要的输出 Code 401k CVS
  • 使用 R 的 flextable 包时,有没有办法将传递给 add_header_lines() 的字符串部分加粗

    我正在使用我喜欢的 flextable 包为 Word 文档创建几个表格 但是 我在将表格标题中的部分文本加粗时遇到了一些麻烦 例如 我希望标题为 Table 1 我的表格标题的其余部分 而不是 表 1 我的表格标题的其余部分 I 找到这个
  • 如何在不循环的情况下添加组ID?

    我有数据框 例如 productid ordernum p1 10 p2 20 p3 30 p4 5 p5 20 p6 8 我想添加另一列 称为 groupid 它将产品按顺序分组在一起 一旦 sum ordernum 达到 30 分配一个
  • 如何获得属于五分位数的x?

    我正在大学学习使用 R 进行计量经济学项目 所以请原谅我的笨拙 基本上 使用并给出 一个矩阵 股票价格 行 天 列 公司股票价格 另一个矩阵 市值 行 天 列 公司市值 我必须收集第三个矩阵每天观察的属于市值分布第一五分位数的股票价格 然后
  • 错误:“rjags”的包或命名空间加载失败

    在终端的 conda 环境之一中 我能够成功安装包 rjags 但是 当我在该环境中运行 R 并运行库 rjags 时 出现以下错误 加载所需的包 coda 错误 rjags 的包或命名空间加载失败 rjags 的 loadNamespac
  • R.matlab/readMat:readTag(this) 中出错

    我正在尝试使用 R matlab 将 matlab 文件读入 R 但遇到此错误 require R matlab r lt readMat file mat verbose T Trying to read MAT v5 file stre
  • 如何按 data.table 中的十分位数组计算统计数据

    我有一个 data table 想按组计算统计数据 R set seed 1 R DT data table a rnorm 100 b rnorm 100 这些组应该定义为 R quantile DT a probs seq 1 9 1
  • 为绘图制作 2D 图例 - 双变量分区统计图

    我一直在玩双变量 choropleth 地图 并且一直在如何创建类似于 2d 图例的问题上陷入困境约书亚 史蒂文斯 http www joshuastevens net cartography make a bivariate chorop
  • glmnet 未从 cv.glmnet 收敛 lambda.min

    我跑了20倍cv glmnet套索模型以获得 lambda 的 最佳 值 但是 当我尝试重现结果时glmnet 我收到一个错误 内容如下 Warning messages 1 from glmnet Fortran code error c
  • 为什么这些数字不相等?

    下面的代码显然是错误的 有什么问题 i lt 0 1 i lt i 0 05 i 1 0 15 if i 0 15 cat i equals 0 15 else cat i does not equal 0 15 i does not eq
  • r 中的 5 维图

    我正在尝试在 R 中绘制 5 维图 我目前正在使用rgl包以 4 个维度绘制数据 使用 3 个变量作为 x y z 坐标 另一个变量作为颜色 我想知道是否可以使用这个包添加第五个变量 例如空间中点的大小或形状 这是我的数据和当前代码的示例
  • 带 R 的多彩标题

    我想添加颜色某些词在我的图表标题中 我已经能够在这里找到一些先例 http blog revolutionanalytics com 2009 01 multicolor text in r html 具体来说 我希望用撇号括起来的文本 在
  • 表单提交时出现 rvest 错误

    我想从以下网页中抓取数据 https swgoh gg u zozo collection 180 emperor palpatine https swgoh gg u zozo collection 180 emperor palpati
  • R:将 JSON 时间格式转换为 POSIX

    我有一个 JSON 字符串 并将其放入数据框中 我能够做到这一点 但我在使用 apply 函数之一将所有时间字符串转换为 POSIX 格式时遇到问题 See here https stackoverflow com questions 90
  • 如何在button.addTarget操作中发送多个按钮?斯威夫特3

    如何将button和button2发送到我的pressButton2函数中 当用户触摸按钮2时 我需要更改按钮和按钮2的颜色 当我的 button2 addTarget 看起来像这样时 我收到错误 表达式列表中存在预期表达式 import
  • 使用 dplyr::filter 的整洁方式是什么?

    使用下面的函数调用foo c b 输出以内联方式显示 正确的写作方式是什么df gt filter x gt x 我已经包含了一个使用的示例mutate以整洁的风格与之对比filter foo lt function variables x

随机推荐

  • MySQL - 自动增量到guid

    我有一个带有自动递增 ID 字段的表 如下所示 company id name 1 International Client 2 Oracle 3 test 4
  • 将字符串转换为 Joda LocalTime 格式 (HH:mm:ss) 并删除毫秒

    DateTimeFormatter fmt DateTimeFormat forPattern HH mm ss LocalTime localTime fmt parseLocalTime 02 51 20 System out prin
  • 如何获得对右值的引用?

    我用过std move and std forward在C 中 我的问题是 标准库实际上是如何实现这些功能的 如果您可以获取左值的地址 并且右值完全不是左值 那么您如何实际实现这些引用 这些新设施是否允许 auto x 3 或类似的东西 你
  • 如何仅水平设置表格中的单元格间距

    我想设计下面写的表格的样式 table border 1 cellspacing 10 tr th Month th th Savings th tr tr td January td td 100 td tr table 问题是单元格间距
  • firebase-core 和 firebase-analytics 库有什么区别?

    谷歌最近发布了新版本的Firebase 所以我尝试迁移到 Firebase 分析 那么这些库有什么区别 com google firebase firebase analytics 9 0 0 and com google firebase
  • .Net Machinekey.Protect - 使用什么算法?

    我正在使用 Machinekey Protect 和 Machinekey Unprotect 来加密应用程序中的值 一个潜在客户正在执行安全审核 并询问了此方法使用的加密算法 我正在努力使用谷歌找到答案 任何有关可验证链接的帮助将不胜感激
  • 谷歌地图信息窗口位于右侧

    如何在左侧显示带有箭头的信息窗口 而不是在底部 屏幕截图示例在这里 已经有一段时间了 也许您确实对这个话题产生了兴趣 但我想说 无需使用任何第三方工具就可以 只需添加pixelOffset to the infowindow像这样 var
  • 同时按下多个按钮

    在我的 WP 7 1 应用程序中 我有一个包含多个按钮的页面 我注意到 当按下任一按钮时 无法按下其他按钮 我怎样才能克服这个问题 我需要能够允许用户同时按下多个按钮 不幸的是 您无法同时处理多个按钮点击 不过 有一种方法可以解决这个问题
  • 如何向 HTML5 Canvas 添加撤消功能?

    我有一个用 HTML5 和 Javascript 完成的草图应用程序 我想知道如何创建一个撤消按钮 这样您就可以撤消您最后绘制的内容 任何想法 您必须将所有修改存储在数据结构中 然后如果用户想要的话可 以删除最新的修改undo它 然后 您再
  • 带有基于文件的电子邮件后端服务器的 Django 测试框架

    我在Django框架中制定了测试用例 使用案例 我正在使用 API 通过向用户发送电子邮件来注册用户 当他们单击电子邮件中提供的链接时 他们的帐户就会被激活 在我的 settings py 中我使用 EMAIL FILE PATH djan
  • 将图标与 JCheckBox 一起使用

    我有一个 swing 应用程序 我想在其中使用带有图标的 JCheckbox 我构建的图标如下 JCheckBox unsubmit new JCheckBox Unsubmit applet undo 当我这样做时 标签和图标出现在我的
  • Rails 使所有路由默认格式为::json

    您可以将所有路由默认为json 我有以下 api 范围 但我想知道您是否可以对全局范围执行相同的操作 scope api defaults format json do get search query location gt search
  • Hive - LIKE 运算符

    我不知道如何处理这个问题 这是我的数据 Table1 Table2 BRAND PRODUCT SOLD Sony Sony ABCD 1233 Apple Sony adv 1233 Google Sony aaaa 1233 IBM A
  • 角度 2 贝宝

    我正在使用 Angular 2 和 Firebase 建立一个新的电子商务项目 我的问题是如何集成贝宝按钮 当客户点击它时 他们将被重定向到贝宝并付款 然后重定向回我的网站 目前 我设法让他们回来 要么按照这个 github 存储库中的指示
  • gnuplot 多条线,X 轴上有时间

    我已经查看了问题 但仍然无法正常工作 我的数据集是这样的 date cpu mem 23 00 39 21 9 2 1 23 00 44 21 8 2 1 23 00 49 21 8 2 1 23 00 54 21 8 2 1 23 00
  • 虚拟函数的Vtable如何工作

    我对虚拟表有一个小疑问 每当编译器遇到类中的虚拟函数时 它都会创建Vtable并将虚拟函数地址放在那里 对于其他继承的类 也会发生类似的情况 它是否在每个类中创建一个指向每个 Vtable 的新指针 如果不是 当创建派生类的新实例并将其分配
  • 我可以使用IdUDPClient发送M-SEARCH请求吗?

    我的网络中几乎没有 uPNP 设备 我正在尝试向网络发送 M SEARCH 请求 并希望收到一些响应 这就是我正在尝试的 var sIP sOut string iPort Word S TStringBuilder begin S TSt
  • 在 Bootstrap 中打开放大图像模式

    我如何open enlarge使用 jquery js 的模式中的图像和不是数据属性 每当用户将图像插入内容编辑器时 我都需要它可单击以使用 js 在模式中展开 因此我不能依赖用户输入他们不知道如何使用的数据属性 我试过 a href my
  • 解析 EDGAR 文件

    我想使用 python2 7 删除 EDGAR 文件中非文档文本的任何内容 可在线获取 txt 文件 这些文件的示例如下 Example EDGAR 从该文件的第 48 页开始提供其文档类型定义 DTD 我的程序的第一部分将 txt 文件从
  • R 中计算 R2(R 平方)的函数

    我有一个包含观察数据和建模数据的数据框 我想计算 R2 值 我期望有一个可以调用的函数 但找不到 我知道我可以自己编写并应用它 但我是否遗漏了一些明显的东西 我想要类似的东西 obs lt 1 5 mod lt c 0 8 2 4 2 3