【问题标题】:How to repeat univariate regression and extract P values?如何重复单变量回归并提取 P 值?
【发布时间】:2021-05-30 01:09:22
【问题描述】:

我正在使用lapply 对一个因变量一次一个自变量执行多个glm 回归。但我不确定如何一次提取 P 值。

我的数据集中有 200 个特征,但下面的代码只给了我特征#1 的 P 值。如何获得 200 个特征的所有 P 值的矩阵?

valName<- as.data.frame(colnames(repeatData))
featureName<-valName[3,]
lapply(featureName,
       function(var) {       
         formula    <- as.formula(paste("outcome ~", var))
         fit.logist <- glm(formula, data = repeatData, family = binomial)
         summary(fit.logist)
         Pvalue<-coef(summary(fit.logist))[,'Pr(>|z|)'] 
       })

【问题讨论】:

  • 最后可以返回Pvalue
  • 你的意思是把Pvalue语句放在})之后?我试过这个并得到一个错误:“摘要错误(fit.logist):找不到对象'fit.logist'”
  • 不是之后。前。如lapply(featureName,......... Pvalue&lt;-coef(summary(fit.logist))[,'Pr(&gt;|z|)'] Pvalue
  • 谢谢。刚试了一下。仍然只得到了第一个特征的 P 值。 [[1]](截取)性别 0.0003512693 0.0002784681

标签: r regression lapply repeat


【解决方案1】:

我 我稍微简化了你的代码; (1)使用reformulate()(没有真正不同,只是更漂亮)(2)只返回焦点变量的p值(不是截距p值)。 (如果省略 2,您将得到一个包含截距和焦点变量 p 值的 2 行矩阵。)

我的示例使用内置的 mtcars 数据集,并添加了(假)二项式响应。

repeatData <- data.frame(outcome=rbinom(nrow(mtcars), size=1, prob=0.5), mtcars)
ff <-   function(var) {       
         formula    <- reformulate(var, response="outcome")
         fit.logist <- glm(formula, data = repeatData, family = binomial)
         coef(summary(fit.logist))[2, 'Pr(>|z|)'] 
       }
## skip first column (response variable).
sapply(names(repeatData)[-1], ff)

【讨论】:

  • 非常感谢您的帮助!我尝试了您提供的代码,它与 mtcars 数据配合得很好。但是当我尝试我的数据时,它又给了我一个错误:“系数错误(summary(fit.logist))[2,”Pr(> | z |)“]:下标超出范围”这是我的数据结构.它看起来与 mtcars 数据非常相似,我只是无法弄清楚出了什么问题... 结果性别 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F1 0 1 2 2 1 1 2 2 1 1 2 2 1 1 1 1 1 0 0 0 1 1 0 0 2 2
  • 如果它不起作用,您必须尝试弄清楚如何给我们minimal reproducible example。调试提示:将cat(var,"\n") 作为ff 的第一行,这样您就可以确定哪个元素给您带来麻烦 - 然后一次通过ff 一个命令,看看出了什么问题。
  • 感谢您的帮助。您的代码与内置数据集和新创建的测试数据集配合得很好。我仍在为我的数据集苦苦挣扎,但我很乐意接受您的回答。
猜你喜欢
  • 2015-10-12
  • 2013-08-18
  • 1970-01-01
  • 1970-01-01
  • 2019-03-26
  • 2011-04-11
  • 2020-08-29
  • 2019-08-23
  • 2022-11-10
相关资源
最近更新 更多