在 R 中按组引导结果向量

2024-03-18

Question:如何使用引导程序来获取一组数据的置信区间 根据协方差矩阵的特征值计算的统计数据,分别为 数据框中的每个组(因子水平)?

Problem: 数据不太清楚 结构我需要包含这些适合的结果boot函数,或者一种在组上“映射”引导程序并以适合绘图的形式获得置信区间的方法。

Context: 在里面heplots包裹,boxM计算协方差矩阵相等性的 Box's M 检验。 有一种绘图方法可以生成有用的对数行列式图 测试。该图中的置信区间基于渐近理论近似。

> library(heplots)
> iris.boxm <- boxM(iris[, 1:4], iris[, "Species"])
> iris.boxm

        Box's M-test for Homogeneity of Covariance Matrices

data:  iris[, 1:4]
Chi-Sq (approx.) = 140.94, df = 20, p-value < 2.2e-16

> plot(iris.boxm, gplabel="Species")

绘图方法还可以显示特征值的其他函数,但没有理论依据 在这种情况下可以使用置信区间。

op <- par(mfrow=c(2,2), mar=c(5,4,1,1))
plot(iris.boxm, gplabel="Species", which="product")
plot(iris.boxm, gplabel="Species", which="sum")
plot(iris.boxm, gplabel="Species", which="precision")
plot(iris.boxm, gplabel="Species", which="max")
par(op)

因此,我希望能够使用引导程序计算这些 CI,并将它们显示在相应的图中。

我尝试过的:

以下是增强这些统计数据的函数,但对于总数 样本,不分组(Species) 考虑在内。

cov_stat_fun <- function(data, indices, 
            stats=c("logdet", "prod", "sum", "precision", "max")
            ) {
    dat <- data[indices,]
    cov <- cov(dat, use="complete.obs")
    eigs <- eigen(cov)$values

    res <- c(
        "logdet" = log(det(cov)),
        "prod" = prod(eigs),
        "sum" = sum(eigs),
        "precision" = 1/ sum(1/eigs),
        "max" = max(eigs)
        )
}

boot_cov_stat <- function(data, R=500,  ...) {
    boot(data, cov_stat_fun, R=R,  ...)
}

这有效,但我需要结果by group(也适用于总样本)

> iris.boot <- boot_cov_stat(iris[,1:4])
>
> iris.ci <- boot.ci(iris.boot)
> iris.ci
BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 500 bootstrap replicates

CALL : 
boot.ci(boot.out = iris.boot)

Intervals : 
Level      Normal              Basic             Studentized     
95%   (-6.622, -5.702 )   (-6.593, -5.653 )   (-6.542, -5.438 )  

Level     Percentile            BCa          
95%   (-6.865, -5.926 )   (-6.613, -5.678 )  
Calculations and Intervals on Original Scale
Some BCa intervals may be unstable
>

我还编写了一个函数来计算每个组的单独协方差矩阵,但我不知道如何在我的引导函数中使用它。有人可以帮忙吗?

# calculate covariance matrices by group and pooled
covs <- function(Y, group) {
   Y <- as.matrix(Y)
   gname <- deparse(substitute(group))
   if (!is.factor(group)) group <- as.factor(as.character(group))

   valid <- complete.cases(Y, group)
   if (nrow(Y) > sum(valid)) 
      warning(paste(nrow(Y) - sum(valid)), " cases with missing data have been removed.")
   Y <- Y[valid,]
   group <- group[valid]
   nlev <- nlevels(group)
   lev <- levels(group)
   mats <- aux <- list()
   for(i in 1:nlev) {
      mats[[i]] <- cov(Y[group == lev[i], ])
   }
   names(mats) <- lev
   pooled <- cov(Y)
   c(mats, "pooled"=pooled)
}

Edit: 在一个看似相关的问题中,按组引导 https://stackoverflow.com/questions/29028727/bootstrap-by-groups,建议使用以下方式提供答案strata论证boot(),但没有给出什么示例。 [啊:strata论证只是确保地层在引导样本中的表示与其在数据中的频率有关。]

尝试这个解决我的问题,我没有进一步启发,因为我想要得到的是separate每个的置信区间Species.

> iris.boot.strat <- boot_cov_stat(iris[,1:4], strata=iris$Species)
> 
> boot.ci(iris.boot.strat, conf=0.95, type=c("basic", "bca"))
BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 500 bootstrap replicates

CALL : 
boot.ci(boot.out = iris.boot.strat, conf = 0.95, type = c("basic", 
    "bca"))

Intervals : 
Level      Basic                BCa          
95%   (-6.587, -5.743 )   (-6.559, -5.841 )  
Calculations and Intervals on Original Scale
Some BCa intervals may be unstable
> 

如果我理解您的问题,您可以按组运行引导函数,如下所示:

library(boot)
library(tidyverse)

# Pooled
iris.boot <- boot_cov_stat(iris[,1:4])
iris.ci <- boot.ci(iris.boot)

# By Species
boot.list = setNames(unique(iris$Species), unique(iris$Species)) %>% 
  map(function(group) {
    iris.boot = boot_cov_stat(iris[iris$Species==group, 1:4])
    boot.ci(iris.boot)
  })

# Combine pooled and by-Species results
boot.list = c(boot.list, list(Pooled=iris.ci))

boot.list
$setosa
BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 500 bootstrap replicates

CALL : 
boot.ci(boot.out = iris.boot)

Intervals : 
Level      Normal              Basic             Studentized     
95%   (-13.69, -11.86 )   (-13.69, -11.79 )   (-13.52, -10.65 )  

Level     Percentile            BCa          
95%   (-14.34, -12.44 )   (-13.65, -11.99 )  
Calculations and Intervals on Original Scale
Warning : BCa Intervals used Extreme Quantiles
Some BCa intervals may be unstable

$versicolor
BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 500 bootstrap replicates

CALL : 
boot.ci(boot.out = iris.boot)

Intervals : 
Level      Normal              Basic             Studentized     
95%   (-11.37,  -9.81 )   (-11.36,  -9.78 )   (-11.25,  -8.97 )  

Level     Percentile            BCa          
95%   (-11.97, -10.39 )   (-11.35, -10.09 )  
Calculations and Intervals on Original Scale
Warning : BCa Intervals used Extreme Quantiles
Some BCa intervals may be unstable

$virginica
BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 500 bootstrap replicates

CALL : 
boot.ci(boot.out = iris.boot)

Intervals : 
Level      Normal              Basic             Studentized     
95%   (-9.467, -7.784 )   (-9.447, -7.804 )   (-9.328, -6.959 )  

Level     Percentile            BCa          
95%   (-10.050,  -8.407 )   ( -9.456,  -8.075 )  
Calculations and Intervals on Original Scale
Warning : BCa Intervals used Extreme Quantiles
Some BCa intervals may be unstable

$Pooled
BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 500 bootstrap replicates

CALL : 
boot.ci(boot.out = iris.boot)

Intervals : 
Level      Normal              Basic             Studentized     
95%   (-6.620, -5.714 )   (-6.613, -5.715 )   (-6.556, -5.545 )  

Level     Percentile            BCa          
95%   (-6.803, -5.906 )   (-6.624, -5.779 )  
Calculations and Intervals on Original Scale
Some BCa intervals may be unstable
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 R 中按组引导结果向量 的相关文章

  • 条件格式 DT 中的样式

    我想根据 B 列中的值对 A 列中的行进行着色 下面的代码基于小插图中的示例Link https rstudio github io DT 010 style html 但仅显示两列的条件 mobile number by mobile f
  • 泛化 R %in% 运算符以匹配元组

    前几天我花了一段时间寻找一种方法来检查行向量是否包含在 R 中的某些行向量集中 基本上 我想概括 in 运算符来匹配元组而不是向量中的每个条目 例如 我想要 row vec c A 3 row vec 1 A 3 data set rbin
  • 如何使用 dplyr 的 filter() 和 R-base 的 ifelse() 过滤数据框?

    我的数据框df看起来像这样 Home Away Inning Boston NYC Top NYC Boston Bottom NYC Boston Top 我想使用 dplyr 的filter 制作一个数据框 从ifelse query
  • 使用plot(...,add=T) 叠加栅格图会导致最终图任意错位

    我发现 当我尝试使用plot add T 叠加多个栅格时 如果我尝试将超过3 个栅格叠加在一起 则后续图不会正确对齐栅格 我的初衷是创建一个模拟土地覆盖的分类地图 其中代表覆盖类别的颜色深浅随着我们模型投影的确定性而变化 为此 我创建了一个
  • 如何在 R 中解析年份+周数?

    有没有一种好方法可以将年 周数转换为R中的日期 我已经尝试过以下方法 gt as POSIXct 2008 41 format Y U 1 2008 02 21 EST gt as POSIXct 2008 42 format Y U 1
  • 如何解决这个错误--dbWriteTable()

    我成功连接到 MYSQL DB 并尝试将结果写回数据库 dbWriteTable con predicted min forecast min 其中 Forecast min 只是双精度向量 我收到此错误消息 函数 类 fdef mtabl
  • 传说在北卡罗来纳州地理地图上消失?

    我正在使用 R 编程语言 使用北卡罗来纳州的内置地图 我生成了 3 个随机变量 收入 孩子数量 体重 然后为此数据创建了地图 使用 传单 库 通过循环 library sf library mapview library leaflet l
  • 提取数据框中值前后的 n 行

    我有一个数据框 其中包含某些值Mark柱子 我想提取n标记出现之前和之后的值 包括带有标记的行 我通过使用找到我需要的值indices lt which df Mark 1 where 1是我正在寻找的价值 现在我需要例如之前 5 行和之后
  • 将误差线添加到多条线上以在 R 中的绘图上显示标准差

    我有一个包含许多不同线条的图 我想为每条线上的每个点添加误差线 df lt matrix runif 25 5 5 plot 1 5 seq 0 1 1 4 type n mapply lines as data frame df col
  • 有人可以解释一下这段代码吗?尤其是“函数x和[[x]]”的作用?

    这是 R 中的代码 我无法理解其作用function x and qdata x 在这行代码中 有人能给我详细解释一下吗 这段代码不是我写的 谢谢 outs lapply names qdata 12 35 function x hist
  • R 中的闭包类似于 Python

    首先考虑以下 Python 代码 该代码计算函数被调用的次数 def counter fn count 0 def inner args kwargs nonlocal count count 1 print Function 0 was
  • 如何将管道链 (magrittr) 的结果提供给对象

    这是一个相当简单的问题 但我无法通过 google stackexchange 找到答案并查看 magrittr 的文档 如何提供通过 gt 连接的函数链的结果来创建向量 我看到大多数人做的是 a lt data frame x c 1 3
  • 如何从闪亮模块调用闪亮模块?

    如何从闪亮模块中调用闪亮模块并传递第一个模块中的选择 作为一个例子 我编写了一个应用程序来显示星球大战主题dplyr在 DT data 表中 模块StarWars 来自同一数据集的相关电影应显示在另一个子选项卡 模块电影 的另一个 DT d
  • R中按字母顺序对每一行字符串进行排序

    我环顾四周 似乎找不到解决这个问题的好方法 我有一个包含行名称的列 我想按字母顺序对每一行进行排序 以便稍后可以识别具有相同名称但顺序不同的行 数据如下 names lt c John D Josh C Karl H John D Bob
  • 如何调整ggplot2中的标题位置

    这是代码 require ggplot2 require grid pdf a pdf png a png a lt qplot date unemploy data economics geom line opts title A b l
  • 修改 GGplot2 对象

    然而 我很好奇 是否可以添加任何特定的图例或将哪个物种对应于观察到的预期绘图中 以分别知道它是哪个圆圈 我目前使用的是一个名为 finches 的假数据集 该包称为 cooccurr 它创建一个 ggplot 对象 我很好奇如何实际编辑它以
  • sapply 函数从命名向量中的值填充数据帧的列,需要很长时间。有更快的方法吗?

    这是我正在做的一个例子 x lt c a 2 b 4 c 2 d 9 df lt data frame names c d c a b x是一个命名向量 其值的顺序与它们在中出现的顺序不同df names 我需要在数据框中形成一个新列 该列
  • rvest - 在 1 个标签中抓取 2 个类

    我是新来的 如何提取标签中具有 2 个类名或仅 1 个类名的元素 这是我的代码和问题 doc lt paste span class a1 b1 text1 span span class b1 text2 span library rve
  • R:变换不规则时间字符串

    我有两个不同的时间序列 来自不同的数据帧 具有不同的不规则格式 但问题是相同的 我只想提取小时 分钟 秒和毫秒 时代系列看起来像这样 ts1 08 27 23 445 08 27 24 280 08 27 25 115 I tried st
  • 反转默认比例梯度ggplot2

    我是新手 我正在尝试设计热图 这是我的代码 ggplot gd aes Qcountry Q6 1 Q6d order TRUE geom tile aes fill prob colour white theme minimal labs

随机推荐

  • 增加蚂蚁的记忆

    我有一个关于内存使用的问题 我有 8 GB RAM 我的 ant 设置如下 set ANT OPTS Xmx512m XX MaxPermSize 2G 现在 我已经安装了 16 GB 的 RAM 但是当我运行 ant clean all
  • Android 上 lib 的 Emma 代码覆盖率

    我目前对 Android 应用程序进行了一些单元测试 这些应用程序调用库 jar 文件 我想查看 jar 的代码覆盖率 但是当我运行 ant emma 并查看coverage html 时 它只报告应用程序项目的覆盖率 有没有办法指定我也想
  • 从 google plus 登录重定向到 iOS 应用程序后出现错误

    我在我的 iPhone 应用程序中使用 Google plus api 登录 以前我使用我的 Gmail 帐户在 google plus api 中创建了我的应用程序 那一次效果很好 但是 由于某些原因 我使用 gmail 在我的公司帐户中
  • 对服装照片进行分类有哪些好的功能? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想构建一个服装分类器 拍摄一件衣服的照片并将其分类为 牛仔裤 连衣裙 运动鞋 等 一些例子 这些图像来自零售商网站 因此通常是从相同
  • 将 XML 数据集数据表合并为一个数据表

    我需要使用 C 解析 XML 文档以将数据存入数据库 目前 我正在使用 SSIS 和此 C 代码将文档读入数据集 var xmlString File ReadAllText Variables filepath var stringRea
  • Android 本地化问题:切换区域设置时布局中的所有项目均无法正确更新

    问题是 当我在后台运行一个活动 切换区域设置 然后切换回应用程序时 所有内容都会更新 除了设置了 android id 属性的复选框和单选按钮 如果复选框和单选按钮没有 android id 属性 那么它们会更新正常 其他字段不存在此问题
  • Random.Next 始终返回相同的值[重复]

    这个问题在这里已经有答案了 这真的很奇怪 我不明白为什么会发生这种情况 在 foreach 循环中 我迭代 A 类集合 对于每个类 我调用Count 方法 其中r1 and r2数字是从范围 1 1 生成的 问题是Random Next为每
  • 如何在Linux上停止时间倒流?

    这是我编写的一个小测试 用于验证时间确实只在 Linux 中向前运行 include
  • 将变量从 Jupyter Notebook 传递到 Python 脚本

    我想在 Jupyter 笔记本中定义一个变量 然后将其传递给 python 脚本 例如 在笔记本中 a 1 2 3 4 run example py print foo 在 example py 中 b 5 8 9 10 foo a b 当
  • JavaFX:如何清除画布

    假设我在画布上画了一个矩形 我想清理它以绘制其他图形 多边形 弧 我该怎么做 我尝试过很多方法 但没有一个有效 我认为这可能有效 但我不确定 GraphicsContext gc myCanvas getGraphicsContext2D
  • Scala 解决了 Comparator.thenComparing 中的错误覆盖问题

    我正在尝试翻译以下 Java 代码 import java util Comparator public class ComparatorTestJava public static void test Comparator
  • Visual Studio 2015 Update 2 导致 IDE 挂起

    安装 Visual Studio 2015 Update 2 后 IDE 挂起并且不会在启动屏幕上启动 唯一的修复方法是运行 devenv setup 或者进行修复看起来像是未更新缓存的已知问题 但这是针对预发布更新的 我检查了我的日志 得
  • SwiftUI onAppear 中的异步数据获取

    我有课getDataFromDatabase有功能readData 这就是从 Firebase 读取数据 class getDataFromDatabase ObservableObject var arrayWithQuantity In
  • 删除条形图之间的空间ggplot2

    这是我的代码 ggplot df aes x timepoint y mean fill group geom bar position position dodge 3 colour black stat identity width 0
  • ValueTuple.Create 中的命名参数

    我正在研究 C 中的值元组 首先是一些演示数据 region Data public class Product public string Name get set public int CategoryID get set public
  • 从 Word 中的内容控件提取数据到 Excel

    我有一个 可填写表单 的 Word 文档 即其中包含内容控制对象 例如富文本和日期选择器内容控件 我希望将特定字段的数据提取到 Excel 中 例如 每个表单都有项目标题 开始日期和经理 我想要该表格的 1 行包含这三项数据 最终 每隔几个
  • 如何使用 python 解析 json 对象?

    我正在尝试解析 json 对象并遇到问题 import json record shirt red quanitity 100 blue quantity 10 pants black quantity 50 inventory json
  • 为什么 JavaScript 展开表示法在这里不起作用

    我正在学习 React 有一个我无法解决的简单问题 我创建了一个代码沙盒 https codesandbox io s react dropzone sha256 5ngg7 file src FileUpload js 在图像中 file
  • 在 ArrayController 模型的过滤子集上设置 itemController

    问题摘要 虽然我可以让集合的子级 在 ArrayController 上定义 为个体使用特定的对象控制器 但这不适用于已过滤的子级子集 简短的上下文 我有订阅 其中有项目 我想按类型过滤视图中的订阅 并让这些订阅中的项目按时间戳排序 这是订
  • 在 R 中按组引导结果向量

    Question 如何使用引导程序来获取一组数据的置信区间 根据协方差矩阵的特征值计算的统计数据 分别为 数据框中的每个组 因子水平 Problem 数据不太清楚 结构我需要包含这些适合的结果boot函数 或者一种在组上 映射 引导程序并以