بما في ذلك مواصفات النماذج في Xtable (ANOVA (...))

StackOverflow https://stackoverflow.com/questions/2294163

  •  21-09-2019
  •  | 
  •  

سؤال

لدي مجموعة من النماذج المدمجة ، والتي ستكون لأغراضنا فقط 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()

إنها ليست جميلة مثل طاولة اللاتكس ، ولكن لديها صيغة نموذج ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top