在使用lm.beta修改对象后,如何使用broom将lm摘要导出到数据框?
我做了回归分析,然后使用在使用lm.beta修改对象后,如何使用broom将lm摘要导出到数据框?,r,dataframe,R,Dataframe,我做了回归分析,然后使用lm.beta::lm.beta()对其进行了标准化。这样,它会在结果中添加一个名为standardized的列,如下所示: lmfit <- lm(mpg ~ cyl + disp + hp + wt, data = mtcars) lmfit2 <- lm.beta::lm.beta(lmfit) summary(lmfit2) Estimate Standardized Std. Error t value P
lm.beta::lm.beta()
对其进行了标准化。这样,它会在结果中添加一个名为standardized的列,如下所示:
lmfit <- lm(mpg ~ cyl + disp + hp + wt, data = mtcars)
lmfit2 <- lm.beta::lm.beta(lmfit)
summary(lmfit2)
Estimate Standardized Std. Error t value Pr(>|t|)
(Intercept) 40.82854 0.0000000 2.75747 14.807 1.76e-14
cyl -1.29332 -0.38324 0.65588 -1.972 0.058947
...
如您所见,std.error列实际上是标准化的。如何修复标题?非常感谢 如我在评论中所述:
tidy.lm.beta <- function (x, conf.int = FALSE, conf.level = 0.95, exponentiate = FALSE,
quick = FALSE, ...)
{
if (quick) {
co <- stats::coef(x)
ret <- data.frame(term = names(co), estimate = unname(co))
return(broom:::process_lm(ret, x, conf.int = FALSE, exponentiate = exponentiate))
}
co <- stats::coef(summary(x))
nn <- c("estimate","std.estimate", "std.error", "statistic", "p.value")
if (inherits(co, "listof")) {
ret <- plyr::ldply(co, broom:::fix_data_frame, nn[1:ncol(co[[1]])],
.id = "response")
ret$response <- stringr::str_replace(ret$response, "Response ",
"")
}
else {
ret <- broom:::fix_data_frame(co, nn[1:ncol(co)])
}
broom:::process_lm(ret, x, conf.int = conf.int, conf.level = conf.level,
exponentiate = exponentiate)
}
lmfit <- lm(mpg ~ cyl + disp + hp + wt, data = mtcars)
lmfit2 <- lm.beta::lm.beta(lmfit)
请出示复印件example@G.Grothendieck我想他们的问题是怎么做,因为布鲁姆并不专门处理这种情况。如果你键入
broom:::tidy.lm
,你会发现代码非常简单。如果为了安全起见修改它,将缺少的列名添加到nn
变量中,并在所有扫帚函数前面加上broom::
,它应该可以正常工作@DavidRobinson甚至可能对处理这些请求的pull请求感兴趣……在证明用户错误之前,应该假设用户错误。谢谢Joran。对我来说,这看起来很复杂,因为我对R非常陌生。我最终做的是为列colnames
指定名称。
tidy.lm.beta <- function (x, conf.int = FALSE, conf.level = 0.95, exponentiate = FALSE,
quick = FALSE, ...)
{
if (quick) {
co <- stats::coef(x)
ret <- data.frame(term = names(co), estimate = unname(co))
return(broom:::process_lm(ret, x, conf.int = FALSE, exponentiate = exponentiate))
}
co <- stats::coef(summary(x))
nn <- c("estimate","std.estimate", "std.error", "statistic", "p.value")
if (inherits(co, "listof")) {
ret <- plyr::ldply(co, broom:::fix_data_frame, nn[1:ncol(co[[1]])],
.id = "response")
ret$response <- stringr::str_replace(ret$response, "Response ",
"")
}
else {
ret <- broom:::fix_data_frame(co, nn[1:ncol(co)])
}
broom:::process_lm(ret, x, conf.int = conf.int, conf.level = conf.level,
exponentiate = exponentiate)
}
lmfit <- lm(mpg ~ cyl + disp + hp + wt, data = mtcars)
lmfit2 <- lm.beta::lm.beta(lmfit)
> tidy.lm.beta(lmfit2)
term estimate std.estimate std.error statistic p.value
1 (Intercept) 40.82853674 0.0000000 2.75746793 14.8065319 1.761402e-14
2 cyl -1.29331972 -0.3832400 0.65587675 -1.9718944 5.894681e-02
3 disp 0.01159924 0.2385278 0.01172681 0.9891215 3.313856e-01
4 hp -0.02053838 -0.2336456 0.01214677 -1.6908508 1.023791e-01
5 wt -3.85390352 -0.6256700 1.01547364 -3.7951783 7.589470e-04