我使用小鼠估算了具有估算数据的回归模型。
model1 <- with(imp, lm(outcome~ predictor1+ predictor2+ predictor3+ predictor4))).
在输出中,我通过获得了一些信息
summary(pool(model1), conf.int = TRUE)
如估计值、标准误差和p值。现在我想知道整个模型的F值和R^2。
对于R^2,我找到了以下代码:pool.r.squared(model1)
。但我仍在寻找一个代码来显示F值。有人有这方面的经验吗?
我们通过对anova
的F值进行平均来获得常规的F统计,比较:
mean(anova(aov(bmi ~ hyp + chl, nhanes))[, 4], na.rm=TRUE)
summary(lm(bmi ~ hyp + chl, nhanes))$fstatistic[1]
对于合并分析,我们可以使用miceadds::mi.anova
来获得R^2和F统计量。
library('miceadds')
nul <- capture.output(
aov_fit <- miceadds::mi.anova(mi.res=imp, formula="bmi ~ hyp + chl" )
)
(不一定需要capture.output
,但可以防止控制台混乱。(
所需的信息现在被存储在对象CCD_ 5中。
aov_fit$r.squared ## R-squared
# [1] 0.1158705
(fval <- mean(round(aov_fit$anova.table$`F value`, 2), na.rm=TRUE) ) ## F-statistic
# [1] 0.97
df_mod <- aov_fit$anova.table$df1[- nrow(aov_fit$anova.table)] ## DF model
df_res <- el(fit$analyses)$df.residual ## DF residual
c(df_mod, df_res)
# [1] 1 1 22
模型p值可以通过使用F分布pf()
的分布函数的右尾检验来计算。
pf(q=fval, df1=sum(df_mod), df_2=df_res, lower.tail=FALSE) ## p-value
# [1] 0.3947152
我们现在可以使用sprintf
在某种程度上类似于lm()
:的GOF度量
sprintf('Pooled R-squared: %s', round(aov_fit$r.squared, 4))
# [1] "Pooled R-squared: 0.1159"
tmp <- aov_fit$anova.table
sprintf('Pooled F-statistic: %s on %s and %s DF, p-value: %s',
mean(round(tmp$`F value`, 2), na.rm=TRUE),
round(sum(tmp$df1[- nrow(aov_fit$anova.table)]), 2),
round(el(fit$analyses)$df.residual, 2),
format.pval(pf(fval, sum(df_mod), df_res, lower.tail=FALSE)))
# [1] "Pooled F-statistic: 0.97 on 2 and 22 DF, p-value: 0.39472"
更新
为了得到r2adj,我们可以使用通常的公式,
adjR2 <- (r2, n, p) {
1 - (n - 1)/(n - p - 1)*(1 - r2)
}
adjR2(aov_fit$r.squared, nrow(nhanes), sum(aov_fit$anova.table$df1, na.rm=TRUE))
# [1] 0.03549512
其中n=观测次数,p=参数数量。
数据:
使用mice
包的nhanes
数据集。
library('mice')
set.seed(42)
imp <- mice(nhanes, m=100, printFlag=FALSE)
fit <- with(data=imp, exp=lm(bmi ~ hyp + chl))