rstudent() 返回“mlm”的错误结果(装有多个 LHS 的线性模型)

2023-12-31

我知道对具有多个 LHS 的线性模型的支持是有限的。但是,当可以在“mlm”对象上运行函数时,我希望结果是可信的。使用时rstudent,产生奇怪的结果。这是一个错误还是有其他解释?

在下面的例子中fittedA and fittedB是相同的,但在以下情况下rstudent第二列不同。

y <- matrix(rnorm(20), 10, 2)
x <- 1:10
fittedA <- fitted(lm(y ~ x))
fittedB <- cbind(fitted(lm(y[, 1] ~ x)), fitted(lm(y[, 2] ~ x)))
rstudentA <- rstudent(lm(y ~ x))
rstudentB <- cbind(rstudent(lm(y[, 1] ~ x)), rstudent(lm(y[, 2] ~ x)))

Setup

set.seed(0)
y <- matrix(rnorm(20), 10, 2)
x <- 1:10
fit <- lm(y ~ x)           ## class: "mlm", "lm"
fit1 <- lm(y[, 1] ~ x)     ## class: "lm"
fit2 <- lm(y[, 2] ~ x)     ## class: "lm"

rstudent(fit)
#          [,1]        [,2]
#1   0.74417620  0.89121744
#2  -0.67506054 -0.50275275
#3   0.76297805 -0.74363941
#4   0.71164461  0.01075898
#5   0.03337192  0.03355209
#6  -1.75099724 -0.02701558
#7  -1.05594284  0.56993056
#8  -0.48486883 -0.35286612
#9  -0.23468552  0.79610101
#10  2.90701182 -0.93665406

cbind(rstudent(fit1), rstudent(fit2))
#          [,1]        [,2]
#1   0.74417620  1.90280959
#2  -0.67506054 -0.92973971
#3   0.76297805 -1.47237918
#4   0.71164461  0.01870820
#5   0.03337192  0.06042497
#6  -1.75099724 -0.04056992
#7  -1.05594284  1.02171222
#8  -0.48486883 -0.64316472
#9  -0.23468552  1.69605079
#10  2.90701182 -1.25676088

正如您所观察到的,只有第一个响应的结果才能正确返回rstandard(fit).


Why rstudent“传销”失败

问题是,没有“传销”方法rstudent.

methods(rstudent)
#[1] rstudent.glm* rstudent.lm*

你打电话时rstudent(fit),S3方法调度机制发现rstudent.lm相反,因为inherits(fit, "lm") is TRUE。很遗憾,stats:::rstudent.lm没有为“传销”模型进行正确的计算。

stats:::rstudent.lm
#function (model, infl = lm.influence(model, do.coef = FALSE), 
#    res = infl$wt.res, ...) 
#{
#    res <- res/(infl$sigma * sqrt(1 - infl$hat))
#    res[is.infinite(res)] <- NaN
#    res
#}

lm.influence没有给出正确的sigma对于“传销”。底层 C 例程C_influence只计算sigma对于一个“lm”。如果你给lm.influence“mlm”,仅返回第一个响应变量的结果。

## pass in "mlm"
.Call(stats:::C_influence, fit$qr, FALSE, residuals(fit), 10 * .Machine$double.eps)$sigma
# [1] 1.3130265 1.3216357 1.3105706 1.3171621 1.3638689 1.1374385 1.2668101
# [8] 1.3416338 1.3586428 0.9180828

## pass in "lm"
.Call(stats:::C_influence, fit1$qr, FALSE, residuals(fit1), 10 * .Machine$double.eps)$sigma
# [1] 1.3130265 1.3216357 1.3105706 1.3171621 1.3638689 1.1374385 1.2668101
# [8] 1.3416338 1.3586428 0.9180828

显然对于“传销”来说sigma应该是一个矩阵。现在给出这个不正确的sigma, 《回收规则》 https://cran.r-project.org/doc/manuals/r-devel/R-intro.html#The-recycling-rule被应用在后面"/"在下面的行中stats:::rstudent.lm,因为res它左边的(残差)是一个矩阵,但它右边的东西是一个向量。

res <- res / (infl$sigma * sqrt(1 - infl$hat))

实际上,计算结果仅对于第一个响应变量是正确的;所有其余的响应变量都会使用错误的sigma.


R核心团队需要修补一些诊断功能

请注意,文档页面中列出的几乎所有功能?influence.measures对于“传销”来说是有问题的。他们应该发出警告,说“传销”方法尚未实施。

lm.influnce需要在 C 级进行修补。一旦这件事完成,rstudent.lm将在“传销”上正常工作。

其他功能可以在 R 级别轻松修补,例如,stats:::cooks.distance.lm and stats:::rstandard。目前(R 3.5.1)它们是:

stats:::cooks.distance.lm
#function (model, infl = lm.influence(model, do.coef = FALSE), 
#    res = weighted.residuals(model),
#    sd = sqrt(deviance(model)/df.residual(model)), 
#    hat = infl$hat, ...) 
#{
#    p <- model$rank
#    res <- ((res/(sd * (1 - hat)))^2 * hat)/p
#    res[is.infinite(res)] <- NaN
#    res
#}

stats:::rstandard.lm
#function (model, infl = lm.influence(model, do.coef = FALSE), 
#    sd = sqrt(deviance(model)/df.residual(model)), type = c("sd.1", 
#        "predictive"), ...) 
#{
#    type <- match.arg(type)
#    res <- infl$wt.res/switch(type, sd.1 = sd * sqrt(1 - infl$hat), 
#        predictive = 1 - infl$hat)
#    res[is.infinite(res)] <- NaN
#    res
#}

并且可以对它们进行修补(通过使用outer) with

patched_cooks.distance.lm <-
function (model, infl = lm.influence(model, do.coef = FALSE), 
    res = weighted.residuals(model),
    sd = sqrt(deviance(model)/df.residual(model)), 
    hat = infl$hat, ...) 
{
    p <- model$rank
    res <- ((res / c(outer(1 - hat, sd))) ^ 2 * hat) / p
    res[is.infinite(res)] <- NaN
    res
}

patched_rstandard.lm <- 
function (model, infl = lm.influence(model, do.coef = FALSE), 
    sd = sqrt(deviance(model)/df.residual(model)), type = c("sd.1", 
        "predictive"), ...) 
{
    type <- match.arg(type)
    res <- infl$wt.res/switch(type, sd.1 = c(outer(sqrt(1 - infl$hat), sd)), 
        predictive = 1 - infl$hat)
    res[is.infinite(res)] <- NaN
    res
}

快速测试:

oo <- cbind(cooks.distance(fit1), cooks.distance(fit2))  ## correct result
all.equal(cooks.distance(fit), oo)
#[1] "Mean relative difference: 0.8211302"
all.equal(patched_cooks.distance.lm(fit), oo)
#[1] TRUE

rr <- cbind(rstandard(fit1), rstandard(fit2))  ## correct result
all.equal(rstandard(fit), rr)
#[1] "Mean relative difference: 0.5290036"
all.equal(patched_rstandard.lm(fit), rr)
#[1] TRUE
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

rstudent() 返回“mlm”的错误结果(装有多个 LHS 的线性模型) 的相关文章

  • 建模前减少因子水平数量

    我有一个 2600 个级别的因子 我想在建模之前将其减少到 10 我想我可以通过这样的操作来做到这一点 如果一个因素列出的次数少于 x 次 则应将其放入名为 其他 的存储桶中 这是一些示例数据 df lt data frame colour
  • 分组和计数以获得接近值

    我想计算每country的次数status is open以及次数status is closed 然后计算closerate per country Data customer lt c 1 2 3 4 5 6 7 8 9 country
  • 抑制 R 中的错​​误消息

    我正在 R 中运行模拟研究 有时 我的模拟研究会产生错误消息 当我在函数中实现模拟研究时 当出现此错误消息时模拟停止 我知道抑制错误是不好的做法 但此时对我来说 除了抑制错误然后继续下一个模拟 直到达到我喜欢运行的模拟总数为止 没有其他选择
  • 将天气 iframe 嵌入到 Shiny Dashboard 中

    我正在尝试将 Forecast io 的天气预报嵌入到闪亮的仪表板中 我最初在使用 符号时遇到了麻烦 但看到一篇文章提供了如何使用特殊字符格式化 HTML 代码的示例 但是 当我运行该应用程序时 我看到一个简单的 未找到 即使我知道该链接有
  • 使用starts_with() 将 NA 替换为 0

    我正在尝试替换我的一组特定列的 NA 值tibble 这些列都以相同的前缀开头 所以我想知道是否有一种简洁的方法来使用starts with 函数从dplyr包可以让我做到这一点 我已经看到了有关 SO 的其他几个问题 但是它们都需要使用特
  • kmeans 对分组数据进行聚类

    目前 我尝试在分组数据中找到簇的中心 通过使用示例数据集和问题定义 我能够创建kmeans每个组内的集群 然而 当涉及到给定组的集群的每个中心时 我不知道如何获取它们 https rdrr io cran broom man kmeans
  • 如何将 R 数据框中的多个字符列合并为单个列

    我正在处理人口普查数据 需要将四个字符列合并为一列 Example LOGRECNO STATE COUNTY TRACT BLOCK 60 01 001 021100 1053 61 01 001 021100 1054 62 01 00
  • 使用滑动窗口动画 ggplot 时间序列图

    我正在寻找在不失去分辨率的情况下对长时间序列图进行动画处理的方法 我希望视图能够 平移 数据 显示从开始到结束的滑动子集 假设我有以下内容 library ggplot2 library dplyr library gganimate df
  • R texreg:如何选择要显示的 gof 统计信息?

    我正在使用 texreg 通过 plm 生成面板回归的输出表 我想抑制所有 gof 统计数据的输出 这不是显示 R2 adj R2 和 N 我只想显示 adj R2 有谁知道一个简单的方法来做到这一点 好吧 这实际上很简单 只需在调用中包含
  • 将所有分号替换为空格 pt2

    我尝试对 2000 多行关键字的列表运行文本分析 但它们的列出方式如下 战略 管理风格 组织 所以当我使用 tm 删除标点符号时 它就变成了 组织的战略管理风格 我认为这在某种程度上破坏了我常用术语的分析 我尝试过使用 vector lt
  • R闪亮:使用闪亮的JS从数据表中获取信息

    我想读出所有列名称以及它们在数据表中显示的顺序 由于不同的原因 我无法使用 stateSave 等选项 我对 JS 没有什么把握 但我确信用它可以完成 所以我需要你帮助我 我尝试过类似的代码片段 datatable data callbac
  • 在`rmarkdown`中,如何在句子中添加图标?

    In rmarkdown 如何在句子中添加图标 例如如下 如何添加markdown icon单词 Markdown 和 is 之间 有一个很好的 R 包 可以轻松下载 RMarkdown 文档并将图标添加到其中 icons https gi
  • R 错误:无法更改锁定绑定的值

    我试图估计无限数字流的平均值和标准差 当我运行代码时 出现错误消息 无法更改锁定绑定的值 我做了一些研究 发现这个错误与我使用全局变量有关 但我无法弄清楚 任何帮助将非常感激 在此先感谢您的帮助 define global variable
  • 如何读取 R 中的每个 .csv 文件并将其导出到单个大文件中

    你好 我有以下格式的数据 101 20130826T155649 3 1 round 0 10552 180 yellow 12002 1 round 1 19502 150 yellow 22452 1 round 2 28957 130
  • 根据 row_number() 过滤 data.frame

    更新 自从提出这个问题以来 dplyr 已经更新 现在按照 OP 的要求执行 我正在尝试获取第二行到第七行data frame using dplyr 我正在这样做 require dplyr df lt data frame id 1 1
  • 如何总结此R问题中的销售数量、售出酒类数量和花费金额

    我使用以下代码在 R 上上传我的数据 if file exists ames liquor rds url lt https github com ds202 at ISU materials blob master 03 tidyvers
  • 修改linux下的路径

    虽然我认为我已经接近 Linux 专业人士 但显然我仍然是一个初学者 当我登录服务器时 我需要使用最新版本的R 统计软件 R 安装在 2 个地方 当我运行以下命令时 which R I get usr bin R 进而 R version
  • 空间数据xyz到矩阵

    我有一个大数据框 100 000 行 其中包含 LON LAT VALUE 我想将其转换为矩阵 EPSG 中的坐标 3035 我使用以下命令尝试了 reshape2 包 acast df lon lat value var value 效果
  • 通过 r markdown 中的循环创建代码片段

    如同如何使用R中的knitr创建一个包含代码块和文本的循环 https stackoverflow com questions 36373630 how to create a loop that includes both a code
  • R data.table 1.9.2 关于 setkey 的问题

    这似乎是 1 8 10 后引入的一个错误 与包含列表的 DT 的 setkey 相关 运行下面两个代码来查看问题 library data table dtl lt list dtl 1 lt data table scenario 1 p

随机推荐

  • 可以突出显示街道的一部分吗?

    我需要突出显示两个十字路口之间的街道部分 我发现一年多前就有人提出过类似的问题 请参阅here https stackoverflow com questions 2155032 highlighting whole street with
  • Kotlin 中的 Swift 'if let' 语句等效项

    在 Kotlin 中是否有与下面的 Swift 代码等效的代码 if let a b val else 您可以使用let 函数如下 val a b let If b is not null run If b is null 请注意 您需要调
  • 将双变量视为布尔值

    测试 double 变量是否等于 0 的更好方法 效率 最佳实践 是什么 1 if a double else OR 2 if a double 0 else 第二个通常更好 更明确地说明您正在做什么 我通常更喜欢if a double 0
  • Zend Framework:如何将旧路由 301 重定向到新的自定义路由?

    我有大量旧路线 需要将其重定向到新路线 我已经在 Bootstrap 中定义了我的自定义路由 protected function initRoutes router Zend Controller Front getInstance gt
  • 如何将模板添加到 Kendo 网格工具栏

    我正在尝试将自定义模板添加到 Kendo MVC 网格 我的模板应该包含两件事 创建按钮以将新记录添加到网格中 自动完成框用于过滤网格中的数据 我正在尝试以下代码 ToolBar toolbar gt toolbar Template
  • 启用/禁用每个控制器/操作方法的会话状态

    我们正在构建一个 ASP NET MVC 应用程序 该应用程序将部署在支持缓存等功能的硬件负载平衡器后面 我们的建议是手动定义负载均衡器应缓存哪些 URL 模式 这对我们来说将是一个相当简单的过程 因为我们有相对静态的 目录 页面 然后是非
  • 将文本绕成 svg 或 canvas 中的圆形

    将文本适合网站上的圆圈 使其随圆圈的曲线流动而不是矩形边界框的一个好的解决方案是什么 这就是我想要实现的目标 页面上有许多黑色圆圈 固定大小 每个圆圈旁边都有一个文本区域 当文本输入到文本区域时 它会出现在黑色圆圈中 以两个轴为中心 如果输
  • Python - 检查字符串是否包含列表中的任何元素

    我需要检查字符串是否包含列表的任何元素 我目前正在使用这个方法 engWords the a and of be that have it for not engSentence the dogs fur is black and whit
  • AngularJS 发送 OPTIONS 请求而不是 POST

    我正在尝试将图片上传到我的 S3 存储桶 我正在使用 AngularJS v1 2 13 当我使用他们的文档中显示的简单案例时 使用以下命令提交表单 action标签 一切正常 但是 如果我想用 Angular 的方式来做ng clickA
  • 优化磁盘IO

    我有一段代码可以分析来自非常大 10 100GB 二进制文件的数据流 效果不错 是时候开始优化了 目前磁盘IO是最大的瓶颈 使用的文件有两种类型 第一种类型的文件由 16 位整数流组成 在 I O 后必须对其进行缩放 以转换为具有物理意义的
  • 当搜索过滤器值从 javascript 更改时,智能表不会更新[重复]

    这个问题在这里已经有答案了 我在用角度智能桌 https github com lorenzofox3 Smart Table 当我使用 st search 指令的搜索过滤器时 当我从 javascript 表更改其值时 不会得到更新 这是
  • MySQL 基于日期列按周分组?

    我有一个带有日期列的表 我想尝试进行分组 使用一周作为时间参考来计算每周发生的行数 我已经这样做了好几天了 使用 GROUP BY Date Date Column 但我不确定如何按周执行此操作 Thanks SELECT FROM GRO
  • Actor 内的异步 API 调用和异常

    我知道关于PipeTo https stackoverflow com a 25225274 1180426 but 有些东西 比如嵌套延续上的同步等待 似乎违背了异步和等待的方式 https github com petabridge a
  • 如何使用 protobuf-net 或其他序列化程序序列化第 3 方类型?

    I have List
  • 如何检查连接字符串是否有效?

    我正在编写一个应用程序 其中用户手动提供连接字符串 我想知道是否有任何方法可以验证连接字符串 我的意思是检查它是否正确以及数据库是否存在 你可以尝试连接一下吗 为了快速 离线 验证 也许可以使用DbConnectionStringBuild
  • 如何在 C 中便携式打印 int64_t 类型

    C99 标准具有字节大小的整数类型 如 int64 t 我正在使用 Windows 的 I64d当前格式 或未签名 I64u like include
  • Spark:广播对象时内存不足

    我尝试广播一个不太大的地图 作为文本文件保存到 HDFS 时约为 70 MB 但出现内存不足错误 我尝试将驱动程序内存增加到11G 执行程序内存增加到11G 但仍然出现相同的错误 memory fraction设置为0 3 缓存的数据也不多
  • 从 url 下载 zip 并使用 SBT 将其解压到资源中

    我想从 URL 下载 zip 文件 我的数据库 并将其解压到特定文件夹 例如资源 中 我想在我的项目构建 sbt 文件中执行此操作 这样做的适当方法是什么 我知道sbt IO已经解压并下载 我找不到使用下载的好示例 我发现的示例不起作用 有
  • 如何在数据库中存储 8000 亿个 GPS 标记 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • rstudent() 返回“mlm”的错误结果(装有多个 LHS 的线性模型)

    我知道对具有多个 LHS 的线性模型的支持是有限的 但是 当可以在 mlm 对象上运行函数时 我希望结果是可信的 使用时rstudent 产生奇怪的结果 这是一个错误还是有其他解释 在下面的例子中fittedA and fittedB是相同