Как извлечь значение p из функции lm в функции apply? - PullRequest
0 голосов
/ 13 июня 2019

Я повторяю функцию lm для 700 000 столбцов.Я использую функцию apply, чтобы повторить lm над столбцами в моих данных.Тогда мне нужно извлечь все значения.Когда я печатаю сводку функции lm, значение отображается в Pr (> | t |).

Я пытался использовать pvals <- sapply(result,"[[", "p.value"), но это приводит к NULL.

Этокод, который печатает резюме lm для 3 столбцов прямо сейчас (я использую меньший файл для тестирования).

result <- apply(dat4[,-c(1:27)], 2, function(x) {
  summary(lm(x ~ total + age + female + diagnosis_MDD + diagnosis_BP))
})
result

Это вывод только одного столбца:

$cg05451842

Call:
lm(formula = x ~ total + age + female + diagnosis_MDD + diagnosis_BP)

Residuals:
      Min        1Q    Median        3Q       Max 
-0.008621 -0.002647  0.001077  0.002979  0.006320 

Coefficients:
                Estimate Std. Error t value Pr(>|t|)    
(Intercept)    2.658e-02  3.428e-03   7.753 1.72e-09 
total         -3.603e-04  1.007e-03  -0.358   0.7224    
age           -1.123e-04  6.765e-05  -1.659   0.1049    
female         7.997e-04  1.268e-03   0.631   0.5318    
diagnosis_MDD -3.487e-03  1.534e-03  -2.273   0.0285   
diagnosis_BP  -1.692e-03  1.586e-03  -1.067   0.2926


Signif. codes:  0      0.001      0.01     0.05     0.1     1

Residual standard error: 0.004242 on 40 degrees of freedom
Multiple R-squared:  0.1723,    Adjusted R-squared:  0.06879 
F-statistic: 1.665 on 5 and 40 DF,  p-value: 0.1654

Ответы [ 2 ]

3 голосов
/ 14 июня 2019

Функция tidy из пакета broom делает это немного проще, генерируя стандартный фрейм данных с коэффициентами и p-значениями для данной регрессионной модели. Вы можете поместить все коэффициенты регрессии и связанные p-значения из всех моделей в один фрейм данных, используя map_df, чтобы выполнить итерацию по всему списку итогов регрессии и запустить функцию tidy для каждого элемента списка:

library(broom)
library(tidyverse)

regression.results = map_df(result, tidy, .id="outcome.var")

Если вы просто хотите получить p-значения, вы можете сделать:

p.values = regression.results %>% select(outcome.var, term, p.value)

Или все за один шаг:

p.values = map_df(result, ~tidy(.x) %>% select(term, p.value), 
                  .id="outcome.var")
0 голосов
/ 14 июня 2019

Вы создаете список различных объектов.Вы можете вызывать их с помощью:

result[[i]]

Все, что вам нужно сделать, это получить значение p из него.Поскольку вы хотите Pr (> | t |), вы можете получить их с помощью:

result[[i]]$coefficients[c(7,8)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...