2015-01-19 3 views
0

я следующие данные и код:Распаковка конечный р-значение с выхода регрессии (лм) в R

> res = lm(vnum1~vnum2+vch1, data=rndf) 
> sumres=summary(res) 
> 
> sumres 

Call: 
lm(formula = vnum1 ~ vnum2 + vch1, data = rndf) 

Residuals: 
    Min  1Q Median  3Q  Max 
-1.48523 -0.42050 0.05919 0.43710 1.93554 

Coefficients: 
      Estimate Std. Error t value Pr(>|t|) 
(Intercept) -1.0265  1.0192 -1.007 0.3310 
vnum2   1.9538  0.9665 2.022 0.0628 . 
vch1B  -0.7072  0.8386 -0.843 0.4132 
vch1C   0.5502  0.8546 0.644 0.5301 
vch1D  -0.6556  0.8412 -0.779 0.4488 
vch1E   0.1461  0.8418 0.174 0.8647 
--- 
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Residual standard error: 0.9181 on 14 degrees of freedom 
Multiple R-squared: 0.2799, Adjusted R-squared: 0.02275 
F-statistic: 1.088 on 5 and 14 DF, p-value: 0.4088 


> dput(rndf) 
structure(list(vnum1 = c(-1.63272832611568, 0.225401613406123, 
-0.412759271404808, 0.0518634835165988, 0.130576187815585, 0.393254112514486, 
-0.22429939238377, -1.01640685392138, -0.5419194916071, 0.602275306119663, 
-0.378031662946265, -0.357452340621538, 0.178526276590386, -0.138016672074599, 
2.13719092448509, 1.03443214036885, 1.34821211116271, -0.718873325233001, 
1.80014304090489, -0.497878912730538), vnum2 = c(0.168299512239173, 
0.624244463164359, 0.0156862761359662, 0.450781079474837, 0.622718085534871, 
0.285390306729823, 0.911491815699264, 0.500363457249478, 0.566354847047478, 
0.942464957712218, 0.00690335803665221, 0.860874759964645, 0.786528263241053, 
0.337976476177573, 0.346998119959608, 0.549394505331293, 0.71448978385888, 
0.865091580431908, 0.967393533792347, 0.539990464225411), vch1 = structure(c(3L, 
5L, 5L, 3L, 3L, 3L, 1L, 5L, 4L, 2L, 3L, 4L, 4L, 3L, 3L, 3L, 1L, 
2L, 5L, 2L), .Label = c("A", "B", "C", "D", "E"), class = "factor")), .Names = c("vnum1", 
"vnum2", "vch1"), class = "data.frame", row.names = c(NA, -20L 
)) 

я могу получить R-квадрат и Скорректированный R-квадрат значения от sumres $ r.squared и sumres $ adj.r.squared. Но я не могу получить окончательное значение p 0.4088 из res или sumres. Как я могу получить это значение? Спасибо за вашу помощь.

ответ

2

вы можете увидеть код, который используется для печати резюме, набрав

class(sumres) 
#> "summary.lm" 

, чтобы получить класс, а затем получить код для метода печати, введя

stats:::print.summary.lm 

в консоль, которая включает в себя следующие строки:

cat(...lots of stuff..., "p-value:", format.pval(pf(x$fstatistic[1L], 
      x$fstatistic[2L], x$fstatistic[3L], lower.tail = FALSE), 
      digits = digits)...morestuff...) 

так что в этом случае, вы хотите:

pf(sumres$fstatistic[1L], sumres$fstatistic[2L], sumres$fstatistic[3L], lower.tail = FALSE) 
+0

К сожалению, р-значение теперь в ответе – Jthorpe

+0

я получаю правильное значение для этих данных, но и для моих реальных больших объемов данных, значения приходят разные: 7.374763e-196 в то время как фактическое значение является <2.2e -16. Нужно ли устанавливать размер образца в уравнение? – rnso

+0

'sumres $ fstatistic [2L]' и 'sumres $ fstatistic [3L]' являются степенями свободы для числителя и знаменателя F-статистики. Разница в том, что в методе печати число, напечатанное на консоли, форматируется путем вызова 'format.pval (7.374763e-196)' – Jthorpe

Смежные вопросы