R 使用';`mtable`输出中的传销`object
是否有任何方法可以使用R 使用';`mtable`输出中的传销`object,r,lm,mlm,R,Lm,Mlm,是否有任何方法可以使用memisc包中mtable中的mlm对象 如果不使用多重响应矩阵,我想要的是: library(car) library(memisc) lm1 = lm(Sepal.Length ~ Petal.Length + Petal.Width + Species, data=iris) lm2 = lm(Sepal.Width ~ Petal.Length + Petal.Width + Species, data=iris) mtable(lm1, lm2) 产生 Cal
memisc
包中mtable
中的mlm
对象
如果不使用多重响应矩阵,我想要的是:
library(car)
library(memisc)
lm1 = lm(Sepal.Length ~ Petal.Length + Petal.Width + Species, data=iris)
lm2 = lm(Sepal.Width ~ Petal.Length + Petal.Width + Species, data=iris)
mtable(lm1, lm2)
产生
Calls:
lm1: lm(formula = Sepal.Length ~ Petal.Length + Petal.Width + Species,
data = iris)
lm2: lm(formula = Sepal.Width ~ Petal.Length + Petal.Width + Species,
data = iris)
===============================================
lm1 lm2
-----------------------------------------------
(Intercept) 3.683*** 3.048***
(0.107) (0.094)
Petal.Length 0.906*** 0.155*
(0.074) (0.065)
Petal.Width -0.006 0.623***
(0.156) (0.136)
Species: versicolor/setosa -1.598*** -1.764***
(0.206) (0.180)
Species: virginica/setosa -2.113*** -2.196***
(0.304) (0.265)
-----------------------------------------------
R-squared 0.837 0.551
adj. R-squared 0.832 0.539
sigma 0.339 0.296
F 185.769 44.496
p 0.000 0.000
Log-likelihood -48.116 -27.711
Deviance 16.681 12.708
AIC 108.231 67.423
BIC 126.295 85.486
N 150 150
===============================================
但是:
产生
Error in qt(p = alpha/2, df = dendf) :
Non-numeric argument to mathematical function
我不打算重现我试图提取
lm
对象的方法,我可以在mtable
中使用该对象。可以说,它们都不起作用。正如评论中所建议的,您需要为mlm
对象编写getSummary
方法,因为目前没有任何方法。通过继承获得的lm
方法不起作用
我快速尝试了一下,并在下面提供了一个getSummary.mlm
,以及一个合适的setsummary模板。现在可以正确提取系数和标准误差。需要做更多工作的是提取汇总统计数据(R平方、残差平方和、F统计数据等),而我没有做这方面的工作。不过这会给你一个好的开始。如果您进一步改进了方法,也请考虑将其提供给Martin Elff(<代码> MeMISC < /代码>维护器),以便在<代码> MeMISC/<代码>中直接获得。
在获得以下提供的功能后,这项工作将起作用:
R> mtable(mlmIris)
Calls:
mlmIris: lm(formula = cbind(Sepal.Length, Sepal.Width) ~ Petal.Length +
Petal.Width + Species, data = iris)
=====================================================
Sepal.Length Sepal.Width
-----------------------------------------------------
(Intercept) 3.683*** 3.048***
(0.107) (0.094)
Petal.Length 0.906*** 0.155*
(0.074) (0.065)
Petal.Width -0.006 0.623***
(0.156) (0.136)
Species: versicolor/setosa -1.598*** -1.764***
(0.206) (0.180)
Species: virginica/setosa -2.113*** -2.196***
(0.304) (0.265)
-----------------------------------------------------
N 150
=====================================================
源代码是:
getSummary.mlm <- function(obj, alpha = 0.05, ...)
{
## extract coefficient summary
cf <- lapply(summary(mlmIris), "[[", "coefficients")
## augment with confidence intervals
cval <- qnorm(1 - alpha/2)
for(i in seq_along(cf)) cf[[i]] <- cbind(cf[[i]],
cf[[i]][, 1] - cval * cf[[i]][, 2],
cf[[i]][, 1] + cval * cf[[i]][, 2])
## collect in array
nam <- unique(unlist(lapply(cf, rownames)))
acf <- array(dim = c(length(nam), 6, length(cf)),
dimnames = list(nam, c("est", "se", "stat", "p", "lwr", "upr"), colnames(coef(obj))))
for(i in seq_along(cf)) acf[rownames(cf[[i]]), , i] <- cf[[i]]
## return everything
return(list(
coef = acf,
sumstat = c(
"N" = nobs(obj)
),
contrasts = obj$contrasts,
xlevels = obj$xlevels,
call = obj$call
))
}
setSummaryTemplate("mlm" = c(
"N" = "($N:d)"
))
getSummary.mlm你应该看看?getSummary
和vcov(mlmIris)。我看不到一种可以立即为
getSummary`生成方法的方法。我也不确定“mtable”显示是否合适,因为您并不是真的在比较单独的模型。我实际上是在使用mtable
方便地格式化模型以显示表。看看getSummary
,我们得看看我是否能想出什么办法。谢谢你的指点。
getSummary.mlm <- function(obj, alpha = 0.05, ...)
{
## extract coefficient summary
cf <- lapply(summary(mlmIris), "[[", "coefficients")
## augment with confidence intervals
cval <- qnorm(1 - alpha/2)
for(i in seq_along(cf)) cf[[i]] <- cbind(cf[[i]],
cf[[i]][, 1] - cval * cf[[i]][, 2],
cf[[i]][, 1] + cval * cf[[i]][, 2])
## collect in array
nam <- unique(unlist(lapply(cf, rownames)))
acf <- array(dim = c(length(nam), 6, length(cf)),
dimnames = list(nam, c("est", "se", "stat", "p", "lwr", "upr"), colnames(coef(obj))))
for(i in seq_along(cf)) acf[rownames(cf[[i]]), , i] <- cf[[i]]
## return everything
return(list(
coef = acf,
sumstat = c(
"N" = nobs(obj)
),
contrasts = obj$contrasts,
xlevels = obj$xlevels,
call = obj$call
))
}
setSummaryTemplate("mlm" = c(
"N" = "($N:d)"
))