使用 p 值的逐步回归删除 p 值不显着的变量

2024-03-10

我想表演一个逐步线性回归 using p-values作为选择标准,例如:在每个步骤中删除具有最高即最不显着 p 值的变量,当所有值均由某个阈值定义的显着时停止alpha.

我完全知道我应该使用 AIC(例如命令step or stepAIC)或其他一些标准,但我的老板不懂统计学,坚持使用 p 值。

如果有必要,我可以编写自己的例程,但我想知道是否有一个已经实现的版本。


向你的老板展示以下内容:

set.seed(100)
x1 <- runif(100,0,1)
x2 <- as.factor(sample(letters[1:3],100,replace=T))

y <- x1+x1*(x2=="a")+2*(x2=="b")+rnorm(100)
summary(lm(y~x1*x2))

这使 :

            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  -0.1525     0.3066  -0.498  0.61995    
x1            1.8693     0.6045   3.092  0.00261 ** 
x2b           2.5149     0.4334   5.802 8.77e-08 ***
x2c           0.3089     0.4475   0.690  0.49180    
x1:x2b       -1.1239     0.8022  -1.401  0.16451    
x1:x2c       -1.0497     0.7873  -1.333  0.18566    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

现在,根据 p 值,您会排除哪一个? x2 同时最显着和最不显着。


编辑:澄清一下:这个例子不是最好的,如评论中所示。 Stata 和 SPSS 中的程序据我所知也不是基于系数 T 检验的 p 值,而是基于删除其中一个变量后的 F 检验。

我有一个函数可以做到这一点。这是对“p 值”的选择,而不是对系数或方差分析结果的 T 检验的选择。好吧,如果它看起来对您有用,请随意使用它。

#####################################
# Automated model selection
# Author      : Joris Meys
# version     : 0.2
# date        : 12/01/09
#####################################
#CHANGE LOG
# 0.2   : check for empty scopevar vector
#####################################

# Function has.interaction checks whether x is part of a term in terms
# terms is a vector with names of terms from a model
has.interaction <- function(x,terms){
    out <- sapply(terms,function(i){
        sum(1-(strsplit(x,":")[[1]] %in% strsplit(i,":")[[1]]))==0
    })
    return(sum(out)>0)
}

# Function Model.select
# model is the lm object of the full model
# keep is a list of model terms to keep in the model at all times
# sig gives the significance for removal of a variable. Can be 0.1 too (see SPSS)
# verbose=T gives the F-tests, dropped var and resulting model after 
model.select <- function(model,keep,sig=0.05,verbose=F){
      counter=1
      # check input
      if(!is(model,"lm")) stop(paste(deparse(substitute(model)),"is not an lm object\n"))
      # calculate scope for drop1 function
      terms <- attr(model$terms,"term.labels")
      if(missing(keep)){ # set scopevars to all terms
          scopevars <- terms
      } else{            # select the scopevars if keep is used
          index <- match(keep,terms)
          # check if all is specified correctly
          if(sum(is.na(index))>0){
              novar <- keep[is.na(index)]
              warning(paste(
                  c(novar,"cannot be found in the model",
                  "\nThese terms are ignored in the model selection."),
                  collapse=" "))
              index <- as.vector(na.omit(index))
          }
          scopevars <- terms[-index]
      }

      # Backward model selection : 

      while(T){
          # extract the test statistics from drop.
          test <- drop1(model, scope=scopevars,test="F")

          if(verbose){
              cat("-------------STEP ",counter,"-------------\n",
              "The drop statistics : \n")
              print(test)
          }

          pval <- test[,dim(test)[2]]

          names(pval) <- rownames(test)
          pval <- sort(pval,decreasing=T)

          if(sum(is.na(pval))>0) stop(paste("Model",
              deparse(substitute(model)),"is invalid. Check if all coefficients are estimated."))

          # check if all significant
          if(pval[1]<sig) break # stops the loop if all remaining vars are sign.

          # select var to drop
          i=1
          while(T){
              dropvar <- names(pval)[i]
              check.terms <- terms[-match(dropvar,terms)]
              x <- has.interaction(dropvar,check.terms)
              if(x){i=i+1;next} else {break}              
          } # end while(T) drop var

          if(pval[i]<sig) break # stops the loop if var to remove is significant

          if(verbose){
             cat("\n--------\nTerm dropped in step",counter,":",dropvar,"\n--------\n\n")              
          }

          #update terms, scopevars and model
          scopevars <- scopevars[-match(dropvar,scopevars)]
          terms <- terms[-match(dropvar,terms)]

          formul <- as.formula(paste(".~.-",dropvar))
          model <- update(model,formul)

          if(length(scopevars)==0) {
              warning("All variables are thrown out of the model.\n",
              "No model could be specified.")
              return()
          }
          counter=counter+1
      } # end while(T) main loop
      return(model)
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 p 值的逐步回归删除 p 值不显着的变量 的相关文章

  • 聚合函数在数据框中创建不需要的向量

    我在函数中创建数据帧时遇到了一个奇怪的问题 但是 在 data frame 之外使用相同的方法效果很好 这是基本函数 我用它来计算数据集的平均值 标准差和标准误差 aggregateX lt function formula dataset
  • autoplot.microbenchmark 实际绘制了什么?

    根据文档 microbenchmark autoplot 使用 ggplot2 生成更清晰的微基准计时图 凉爽的 让我们尝试一下示例代码 library ggplot2 tm lt microbenchmark rchisq 100 0 r
  • Linux 中的 R 有哪些可用的 IDE? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Linux 中的 R 有哪些好的 IDE 我尝试过 Rcmdr 和 Eclipse 但似乎都不具有与 Windows 中的 Tinn R
  • 给定文档,选择相关片段

    当我在这里提出问题时 自动搜索返回的问题的工具提示给出了问题的前一点 但其中相当一部分没有给出任何比理解问题更有用的文本 标题 有谁知道如何制作一个过滤器来删除问题中无用的部分 我的第一个想法是修剪仅包含某个列表中的单词的任何前导句子 例如
  • 将所有 0 值替换为 NA

    我有一个包含一些数字列的数据框 某些行具有 0 值 在统计分析中应将其视为空 在R中将所有0值替换为NULL的最快方法是什么 将所有零替换为 NA df df 0 lt NA 解释 1 它不是NULL你应该用什么来替换零 正如它所说 NUL
  • 如何从 data.frame 中删除列?

    不是 你怎么 但更多的是 你怎么 如果有人给你一个包含 200 列的文件 并且你想将其减少到分析所需的少数列 你会如何做呢 一种解决方案是否比另一种解决方案更有优势 假设我们有一个包含列 col1 col2 到 col200 的数据框 如果
  • 合并的 xts 对象未对齐

    请尝试以下代码 library quantmod getSymbols SPY from 1950 01 01 SPY lt to monthly SPY temp lt xts Cl SPY index SPY 您将获得一个xts具有相同
  • 删除第一次出现某个值后的行

    我有以下 df df lt data frame var1 c 1 2 2 3 4 5 5 6 7 8 9 var2 c a b c d e f g h i j k 我想在达到前 5 var1 后进行过滤 所以结果应该是 var1 var2
  • 我可以在 r 中使用传单“map_shape_click”事件来用数据表填充 box() 吗?

    我已经在网络上搜索了好几个星期 试图找到一个示例或代码来实现我想要用我的闪亮应用程序 shinydashboard 完成的任务 我是 r 的新手 我开始认为我想做的事情是不可能的 我基本上有一个带有县多边形 shapefile 的传单地图
  • 根据一个或多个下拉选项创建具有不同类型线型的折线图

    在下面闪亮的应用程序中 我尝试根据侧边栏中的下拉选择创建点线图 我已成功在选择一个指标时创建折线图 但无法选择 2 个指标 为了x and y我想要一个solid线 对于x1 and y1我想要一个dashed线和对于x2 and y2一条
  • R 中的卡方拟合优度检验

    我有一个观察值向量 还有一个用模型计算的值向量 actual lt c 1411 439 214 100 62 38 29 64 expected lt c 1425 3 399 5 201 6 116 9 72 2 46 3 30 4 6
  • 事后如何使用保存的.rds h2o模型进行预测?

    我使用 mlr 和 h2o 包创建了一个 R 模型 如下所示 library h2o rfh20 lrn makeLearner classif h2o randomForest predict type prob 完成模型调整 模型启动
  • 使用 lapply、Reduce 和 union 折叠 data.table 中的行

    我有一个 data table 示例 JACcar 它应该使用下面的代码根据 ID 折叠成一行 但是 我不明白为什么它不会折叠少于 2 行 我还尝试通过将列限制为仅包含 NA 以外的值的列来验证我的输出 因为原始数据中有 123 列 有人可
  • 如何根据另一列的条件语句将因子列添加到数据框?

    我有一个数据框 我需要根据条件语句添加一个因子列 这里是data https www dropbox com s hujiacus8ek5o5z MoroccoCGE CC Stats csv Code morstats agri f lt
  • 使用 Rgraphviz 中的 pos 参数来固定节点位置

    基于这个问题当弧与另一弧重叠时自动弯曲 https stackoverflow com questions 45721802 automatically curving an arc when it is overlapping with
  • 尝试使用 movie3d 制作 3D PCA 图(rgl)的电影

    我已经使用 pca3d 包在 R 中制作了 rgl 3D PCA 图 并且我正在尝试使用 movie3d 制作一个包含旋转图电影的 gif 文件 pca3d 包 makeMoviePCA 中有一个函数 它将其参数传递给 movie3d 这是
  • 将 SAS sas7bdat 数据读入 R

    R 有哪些选项可以读取本机 SAS 格式的文件 sas7bdat 进入R The NCES 共同核心 https nces ed gov ccd pubschuniv asp例如 包含以此格式保存的大量数据文件存储库 为了具体起见 让我们集
  • 最新的 Windows 10 更新后 R 将无法运行

    我已经更新了我的 Windows 但 R 无法运行 因此 R studio 也无法运行 当我运行 R GUI 时 它只是冻结并且没有响应 我已允许防火墙豁免铬 我正在使用 Windows Insider 计划并且刚刚更新到 Windows
  • 写入抓取数据的 csv 文件时如何拆分项目名称

    我有兴趣使用 R 从网上抓取的数据创建 csv 或类似的 Excel 兼容文件 到目前为止 我通过执行以下操作来存储数据 require textreadr spiegel lt read html http www spiegel de
  • ggplot2 geom_function 可以跨 arg 值进行分面吗?

    我想通过分面 geom function 创建 ggplot2 图 以便函数的参数在网格中变化 例如像这样的东西 my function lt function x par if par 1 return sin x else return

随机推荐

  • 是否可以让 Visual Studio 或 Resharper 用不同的颜色突出显示枚举?

    我认为如果用与类属性不同的颜色突出显示枚举属性 代码会更具可读性 对于 VS2010 VS2013 VS2015 VS2017 VS2019 工具 gt 选项 gt 环境 gt 字体和颜色 显示文本编辑器的设置 显示项目 用户类型 枚举 更
  • 如何提取 Tidymodels 生成的 GLMNET 系数

    我估计了一个glmnet逻辑回归使用整洁的模型 但我无法弄清楚有两件事是密切相关的 整洁的模型 a 如何提取估计系数 b 保存估计模型以供将来生产使用 以下是伪模型的代码 我试过tidy coef and predict 但他们都失败了 任
  • javamail还提取封装消息的附件内容类型:message/rfc822

    我想提取封装在消息 InputStream 中的 eml 消息的所有附件 内容类型 message rfc822 InputStream is new FileInputStream Path MimeMessage mime new Mi
  • 双重修改后如何继续合并?

    我在用着git rebase i重写历史记录 在这种情况下 对早期提交的更改集进行小的更改 换句话说 A B C master gt A B C master I know C也在隐含地改变 但你明白了 这是我迄今为止的进展 git reb
  • Eclipse Neon.1 泛型编译错误:无法推断类型参数

    MWE https www wikiwand com en Minimal Working Example import java util Comparator import java util TreeMap import static
  • Ruby 的 watchr 在 Python 中相当于什么?

    我喜欢这个概念watchr https github com mynyml watchr 它监视文件系统并在发生变化时运行回调 有纯Python 的等价物吗 最好可以 pip 安装 你可能应该看看看门狗 http packages pyth
  • 如何在这个系统内进行通信?

    我们打算设计一个具有三个 层 的系统 总部 只有一台服务器 区域上有很多 节点 使用 iPad 的用户 HQ 与节点进行 2 路通信 节点与用户进行 2 路通信 用户从不与总部沟通 反之亦然 权力机构规定总部的 Windows 应用程序 使
  • 使用样式在主题中设置活动背景?

    我想在我的所有活动中使用背景绘制 我怎样才能用一种风格做到这一点 styles xml 它为所有小部件设置了背景 我只是希望它能够用于活动 Thanks Use
  • 如何查找某个项目在列表中第n次出现的索引?

    Given x w e s s s z z s 每次出现s出现在以下索引中 1st 2 2nd 3 3rd 4第四名 7 If I do x index s 我将得到第一个索引 如何获得第四个的索引s Using 列表理解 http doc
  • 如何处理RecyclerView.ItemDecoration中的点击事件?

    我有一个 RecyclerView 带有 LinearLayoutManager 和一个自定义的 RecyclerView ItemDecoration 比方说 我想在装饰视图中添加按钮 出于某种原因 我用按钮填充布局 它正确绘制 但我无法
  • 为什么 getLocationOnScreen(location) 总是返回 0?

    In my FragmentLayout我有一个LinearLayout具有多个子视图 TextView CardView 我想找到所有的顶部偏移量LinearLayout意见但我总是得到零 这是我的代码 Override public V
  • 部分多键映射的数据结构?

    我的数据由映射到值的键组成 如下所示 Key Value 0 0 0 0 a 0 0 0 1 b 0 1 0 1 c 0 1 1 0 d 我正在寻找一种可以有效地对键执行搜索查询的数据结构 其中查询可以是完整或部分指定键 例如 0 0 0
  • 从 WP7 上的 xna 游戏启动 Internet Explorer

    我想知道是否可以从 Windows Phone 7 上运行的 XNA 游戏启动 Internet Explorer 我想将我的玩家重定向到我的网站 此致 我相信您仍然可以使用Web浏览器任务 http msdn microsoft com
  • ClojureScript 地图查找速度慢

    我有一个简单的地图 def my map 1 2 3 1 1 2 4 5 3 4 2 3 4 5 3 3 5 2 5 6 9 2 1 5 8 3 1 6 我用来执行查找的 然而 这表现得相当差 time doseq x range 500
  • Webpack 长期缓存

    Scenario 我正在尝试使用 webpack 将我的供应商脚本与我的应用程序脚本分开捆绑 尝试1 index js var require lodash console log webpack config js var path re
  • 如何在没有 Django 其余部分的情况下使用 Django 模板?

    我想在我的 Python 代码中使用 Django 模板引擎 但我没有构建基于 Django 的网站 如果没有 settings py 文件 和其他文件 并且必须设置 DJANGO SETTINGS MODULE 环境变量 如何使用它 如果
  • 如何获得 Java 软件商业许可? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我用 Java 编写了一个基于桌面的会计软件 我想放置密钥或许可证或其他类型的安全措施来防止客户端重新分发软件 我只是想知道该怎么办
  • 当对三个整数使用两次 = 运算符时,会发生什么? [复制]

    这个问题在这里已经有答案了 这是做什么的 int x 1 int y 2 int z 3 x y z 我在一些开源项目中遇到过多种此类事情 并且一直对它们感到困惑 我的意思是 运算符在三个整数上使用两次 即x y z 我需要理解这一点 谢谢
  • Visual Studio 无法在 Windows 10 上正确安装

    我将我的笔记本电脑升级到 Windows 10 无预览版 真正的东西 然后我安装了 Visual Studio Community Edition 2015 我已经安装了 VS 2013 这样我就可以开始使用 Cordova 功能 安装过程
  • 使用 p 值的逐步回归删除 p 值不显着的变量

    我想表演一个逐步线性回归 using p values作为选择标准 例如 在每个步骤中删除具有最高即最不显着 p 值的变量 当所有值均由某个阈值定义的显着时停止alpha 我完全知道我应该使用 AIC 例如命令step or stepAIC