R中启动库的cv.glm中的成本函数

2024-03-10

我正在尝试使用 R 中启动库中的交叉验证 cv.glm 函数来确定应用 glm 逻辑回归时错误分类的数量。

该函数具有以下签名:

cv.glm(data, glmfit, cost, K)

前两个表示数据和模型,K 指定 k 倍。 我的问题是成本参数,其定义为:

成本:指定成本函数的两个向量参数的函数 用于交叉验证。 cost 的第一个参数应该对应 到观察到的响应,第二个参数应该对应于 广义线性模型的预测或拟合响应。 cost 必须返回非负标量值。默认值是 平均平方误差函数。

我想对于分类来说,有一个返回错误分类率的函数是有意义的,例如:

nrow(subset(data, (predict >= 0.5  & data$response == "no") | 
                  (predict <  0.5  & data$response == "yes")))

这当然在语法上也是不正确的。

不幸的是,我有限的 R 知识让我浪费了很多时间,我想知道是否有人能给我指出正确的方向。


听起来你可能只使用成本函数(即名为cost)在“示例”部分进一步定义?cv.glm。引用该部分:

 # [...] Since the response is a binary variable an
 # appropriate cost function is
 cost <- function(r, pi = 0) mean(abs(r-pi) > 0.5)

这基本上就是您在示例中尝试执行的操作。将“不”和“是”替换为0 and 1,假设你有两个向量,predict and response. Then cost()设计得很好,可以获取它们并返回平均分类率:

## Simulate some reasonable data
set.seed(1)
predict <- seq(0.1, 0.9, by=0.1)
response <-  rbinom(n=length(predict), prob=predict, size=1)
response
# [1] 0 0 0 1 0 0 0 1 1

## Demonstrate the function 'cost()' in action
cost(response, predict)
# [1] 0.3333333  ## Which is right, as 3/9 elements (4, 6, & 7) are misclassified
                 ## (assuming you use 0.5 as the cutoff for your predictions).

我猜最棘手的一点就是让你的思想完全围绕着将函数作为参数传递的想法。 (至少对我来说,在很长一段时间里,这是使用boot包,这需要移动相当多的地方。)


2016年3月22日添加:

功能cost(),在我看来,上面给出的内容是不必要的混淆;下面的替代方案做了完全相同的事情,但以更具表现力的方式:

cost <- function(r, pi = 0) { 
        mean((pi < 0.5) & r==1 | (pi > 0.5) & r==0)
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R中启动库的cv.glm中的成本函数 的相关文章

  • 查找数据帧列表中同一列中的所有重复值并将其转换为 NULL

    我有一个清单BELGIAN COAST list包含数百个数据帧 df1 df2 15 列 X 1000 行 每个数据帧的最后一列称为Chemicals并包含一些字符 例如Sulfate or Ammonia 但是这一列有很多行Chemic
  • 从 R 环境中删除对象

    我正在阅读 Hadley 的 Advanced R 在第 8 章中 他说我们可以使用以下方法从环境中删除对象 rm 但是 移除该物体后我仍然可以看到该物体 这是我的代码 e lt new env e a lt 1 e b lt 2 e a
  • 在另一个 Rmd 中运行选定的块

    我已经在源 Rmd 文件中运行了分析 并且希望仅使用few来自源的块 我已经看到了一些关于从源 Rmd 中提取所有块的答案来自另一个 Rmd 中的 Rmd 文件的源代码 https stackoverflow com questions 4
  • 将函数应用于 3d 数组的每一层,返回一个数组

    假设您有一个包含行 列和层的 3 维数组 A lt array 1 27 c 3 3 3 想象你有一个函数 它接受一个矩阵作为输入并返回一个矩阵作为输出 就像t 如何将该函数应用于数组的每一层 返回与第一层大小相同的另一个数组 我觉得我应该
  • 解析,用三点参数替换

    让我们考虑一个典型的deparse substitute R call f1 lt function u x y print deparse substitute x varU vu varX vx varY vy f1 u varU x
  • 如何将此“for”循环转换为向量解

    这个问题与 将嵌入其他文本的长州名称转换为两个字母的州缩写 https stackoverflow com questions 25582518 convert long state names embedded with other te
  • glmnet 未从 cv.glmnet 收敛 lambda.min

    我跑了20倍cv glmnet套索模型以获得 lambda 的 最佳 值 但是 当我尝试重现结果时glmnet 我收到一个错误 内容如下 Warning messages 1 from glmnet Fortran code error c
  • R:表格格式

    我有一个包含以下列的 Excel 文件 Column1 Column2 Column3 ab bb 0 5 ab bc 0 1 ab cd 0 7 ab dd 0 8 ac bb 0 2 ac bg 0 8 ac ee 0 8 ac dd
  • R 中的字符串作为函数参数

    数据框chocolates列出了糖果的类型以及每种糖果的一组评级 ID sweetness filling crash snickers 0 67 0 55 0 40 milky way 0 81 0 53 0 56 我正在编写一个函数 它
  • 如何匹配 R 中的所有匹配项?

    我有 1000 个名字的列表 说A 我还有另外 5 个名字的清单 说B 我想找出这5个名字出现在1000个号码列表中的第几行 例如 Amy 在 A 中可以出现 25 次 B 里有艾米 我想知道 Amy 出现在 A 中的哪些行 我以前使用过
  • 非闪亮上下文中的反应式对象绑定

    实际问题 你怎样才能近似反应性环境 行为 http shiny rstudio com tutorial lesson6 建立者shiny http shiny rstudio com函数 或者甚至可能在一个函数中使用这些函数无光泽上下文以
  • 从数据框创建稀疏矩阵

    我正在做一项作业 尝试为 Netflix 奖项数据构建协作过滤模型 我使用的数据位于 CSV 文件中 我可以轻松地将其导入到数据框中 现在我需要做的是创建一个稀疏矩阵 其中用户作为行 电影作为列 每个单元格都由相应的评级值填充 当我尝试绘制
  • 如何修改秤包生成的标签?

    所以我正在制作金字塔可视化 我在用着scale y continuous labels scales label number si accuracy 0 1 来生产标签 但是 我想去掉图表女性部分的负号 我认为保留 SI 后缀但删除负号的
  • 提取部分字符串值,创建新的列名称,并使数据框宽

    我想提取字符串列的最后一部分 始终用方括号括起来 将它们作为新列的名称 然后将数据从长调整为宽 并用这些值填充新列 例如 如果我有这个数据框 whatihave lt data frame v1 c abc effort def effor
  • 如何匹配R中列之间的多个对应值

    我有一个结构如下的数据框 ID Value1 Value2 1 a d g f 12 14 15 9 2 b c e 5 18 20 3 h i j 6 7 25 所以我有一个 ID 和两个值 对于值 1 有多个对应于值 2 的选项 我想最
  • ggplot 直方图相对于轴的位置不正确

    我试图这样绘制直方图 Todo lo haremos con base en un variable aleatoria Uniforme 0 1 set seed 26 n 10000 U lt runif n n Supongamos
  • 迭代字符串 R 的字符

    有人可以解释一下为什么这不会在 R 中单独打印所有数字 numberstring lt 0123456789 for number in numberstring print number 字符串不就是字符数组吗 在 R 中该怎么做 In
  • 根据R中的前一行和当前行按组计算

    我可以根据 R 中的前一行和当前行进行计算 对于此数据框 df A B 1 2 2 2 2 3 3 4 5 5 B2 A2 0 5 B1 我可以使用这段代码来计算这个函数 for i in 2 nrow df B i lt 1 2 B i
  • 基于条件反应逻辑闪亮的 Flexdashboard

    我正在尝试有条件地进行一种类型的渲染 renderPlot 或其他 renderText 基于一些输入 这是我尝试过的 title Citation Extraction output flexdashboard flex dashboar
  • 使用函数参数作为 R 中新数据框的名称

    这很简单 但我已经搜索并未能找到这个小问题的解决方案 我想使用函数的参数作为新数据框的名称 例如 assign dataset lt function dataname x lt c 1 2 3 y lt c 3 4 5 dataname

随机推荐