بما في ذلك مواصفات النماذج في Xtable (ANOVA (...))
سؤال
لدي مجموعة من النماذج المدمجة ، والتي ستكون لأغراضنا فقط glm()
كائنات تسمى mx, my, mz
. أريد أن أحصل على تنسيق جيد xtable
من تحليل الانحراف ، لذلك من الطبيعي أن أرغب في القيام به xtable(anova(mx, my, mz, test = "Chisq"))
.
ناتج الفانيليا xtable
, ومع ذلك ، لا يشمل مواصفات النموذج. أرغب في تضمين هؤلاء لجميع اختبارات ANOVA التي أقوم بتشغيلها ، لذلك إذا لم يكن هناك param ، فأنا في عداد المفقودين ، وربما يجب عليّ فقط اختراق الحل الخاص. لكن بالنظر إلى صفحة المساعدة ، لا يبدو أن هناك طريقة سهلة لتضمين مواصفات النموذج.
أي أفكار؟ بدائل؟
إذا كان يساعد في ذلك في 2.9.1 مع Xtable 1.5-5.
المحلول
لو a
هو كائن جدول ANOVA ، ثم attr(a,"heading")
هل يحتوي على المعلومات التي تبحث عنها ، لكنني لم أستطع معرفة طريقة لطيفة لاستخراجها. لذلك بحثت عن رمز anova.glm
, ، الذي وجهني إلى رمز anova.lmlist
لمعرفة كيفية وضع هذه المعلومات في العنوان. هذا مصدر إلهام لاتباع الحل:
# fake data
x <- 1:10
y <- x+ rnorm(10)
# two models
m1 <- glm(y~x)
m2 <- glm(y~x+I(x^2))
a <- anova(m1, m2) # anova object to be printed
# get model formulas
flas <- sapply(list(m1,m2), function(x)paste(deparse(x$formula)))
rownames(a) <- flas # add formulas as rownames
# convert to latex
xtable(a)
تحرير إلى تلبية الصيغ الطويلة:
إذا كان لديك صيغ طويلة ، فستكون هناك حاجة إلى تغييران: أولاً علينا التأكد من ذلك deparse
لا يقسمها إلى خطوط ، ثم نحتاج إلى جعل LaTex لف الصيغة في الجدول. يمكن تحقيق الأول باستخدام cutoff.width
حجة debarse ، والثاني باستخدام أ p{width}
نوع العمود في اللاتكس. علي سبيل المثال:
# add long formula
m2$formula <- freq ~ sex + attend + birth + politics + sex:attend + sex:birth +
sex:politics + attend:birth + attend:politics + birth:politics +
sex:attend:birth + sex:attend:politics + sex:birth:politics +
attend:birth:politics
a <- anova(m1, m2)
# use a large width
flas <- sapply(list(m1,m2),
function(x)paste(deparse(x$formula, cutoff.width=500)))
rownames(a) <- flas # add formulas as rownames
# convert to latex with first column wrapped in a 5cm wide parbox
xtable(a, align="p{5cm}rrrr")
والنتيجة ليست جميلة بشكل مفرط ، لكن صيغتك ليست جميلة أيضًا. في هذه الحالة بالذات أود استخدامها (sex + attend + birth + politics)^3
- يحصل على النقطة وأقصر بكثير.
نصائح أخرى
أعتقد أنك تريد الحصول على جدول Latex ، ولكن يمكنك بسهولة الحصول على جدول HTML باستخدام صيغة النموذج.
# if we presuppose that <b>a</b> is object from @Aniko's reply
> class(a)
[1] "anova" "data.frame"
# after doing a bit of that sapply magic you get
> a
Analysis of Deviance Table
Model 1: y ~ x
Model 2: y ~ x + I(x^2)
Resid. Df Resid. Dev Df Deviance
y ~ x 8 15.503
y ~ x + I(x^2) 7 12.060 1 3.4428
يمكنك أن تفعل شيئًا كهذا:
# load xtable library
library(xtable)
# sink output to html file
sink("~/anova_specs.html") # suppose you're running R on Linux "~/"
print(xtable(a), type = "html")
sink()
إنها ليست جميلة مثل طاولة اللاتكس ، ولكن لديها صيغة نموذج ...