Несовместимый вывод lm () между скриптом R и файлом RMD - PullRequest
0 голосов
/ 11 апреля 2020

Проблема:

Следующий код:

lm(mpg ~ factor(am), data = mtcars)

Должен выдать следующий вывод (назовем его вывод 1), который я получаю при запуске из скрипта r в R Studio:

Call:
lm(formula = mpg ~ factor(am), data = mtcars)

Coefficients:
(Intercept)  factor(am)1  
     17.147        7.245  

Однако я "иногда" получаю другой вывод с этим точно таким же кодом, если я запускаю его из файла Rmd (также в R Studio). Давайте назовем этот вывод 2:

Call:
lm(formula = mpg ~ factor(am), data = mtcars)

Coefficients:
(Intercept)  factor(am)1  
     20.770       -3.622  

Если после получения вывода 2 из файла Rmd я go вернусь к сценарию R, то я продолжу получать вывод 2 вместо вывода 1 и единственный способ Чтобы снова получить выходные данные 1, нужно закрыть R Studio и снова открыть только сценарий R.

Почему для меня имеет смысл вывод 1?

17,147 - это средняя миль на галлон Группа автомобилей с автоматической коробкой передач c (референтная группа) и 7.245 - это увеличение средней мили на галлон группы автомобилей с механической коробкой передач (что составляет 24,392).

Это может быть подтверждено с помощью:

tapply(mtcars$mpg, mtcars$am, mean)

       0        1 
17.14737 24.39231 

Что я нахожу странным с выводом 2?

Кроме того, это результат, отличный от точно такая же командная строка, 20.770 на самом деле ничего мне не говорит ( я считаю ). Несмотря на то, что он близок к средней миль на галлон всего образца, это не совсем так. Если взять -3,622 вместе с 20,770, то получится 17,147, что является средней скоростью группы автомобилей с автоматической коробкой передач c, а добавление 3,622 к 20,770 - это 24,392, что является средней скоростью группы автомобилей с механическая коробка передач.

Несмотря на то, что выход 2 отличается от выхода 1 и несовместим, потому что я никогда не знаю, какой из них я получу, я не видел третьего или более вариантов.

Дополнительно подробнее:

Я не загружаю ни пакеты, ни запускаю дополнительные командные строки в любом случае.
Набор данных mtcars входит в базовую версию R.
У меня R версии 3.6 .3, R Studio версии 1.2.5033 и Windows 10.

1 Ответ

0 голосов
/ 12 апреля 2020

Спасибо за ваши комментарии @ r2evans и @rawr, они указали мне правильное направление. Оказывается, проблема заключалась в том, что Rmd-файл изменял параметры в setup chunk {r setup, include=FALSE}, что означает, что он запускается при первом запуске любого чанка в этом Rmd-файле.

Я не заметил этого, так как код с проблемой был в отдельном фрагменте, и это тот, который я выполнил непосредственно. Раньше я не использовал / видел чанки установки.

Специфический c код в этом чанке установки, который заставлял функцию lm () вести себя по-разному с факторной переменной, был:

options(contrasts = c("contr.sum", "contr.poly"))

когда по умолчанию:

options(contrasts = c("contr.treatment","contr.poly"))

На всякий случай, если это кому-нибудь поможет. Если вы считаете, что мне нужно отредактировать топи c, вопрос или ответ, чтобы это было полезно для кого-то другого, дайте мне знать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...