Как запустить тот же код в R для логита?

Я пытаюсь заставить R запускать ту же функцию/код, но для набора данных. Я настроил его с 50 вопросами, ответами да (1)/нет (0) и примерно 500 различными ответами на каждый из 50 вопросов. 500 ответов идентифицируются как мужчины (1) или женщины (0). В конце каждого человека указана его «Оценка», сколько ответов «да» (1) у них было. Раньше я запускал график на R, но я хочу запустить этот график для всех 50 вопросов без необходимости каждый раз менять код и запускать код 50 раз. Код, который я использую, приведен ниже. набор данных - это файл Excel, который я создал с полом, баллами Q001-Q052 и оценкой в ​​виде столбцов, а затем на 500 строк вниз с их ответами и полом.

>LRmod01<-glm(dataset$'Q001points'~dataset$Score+dataset$Gender,data=dataset,family=binomial(link="logit")

>summary(LRmod01)

>LRodds01<-cbind("Odds-Ratio"=exp(LRmod01$coefficients),exp(confint(LRmod01)))

>View(LRodds01)

>LR.pred.probs01<-predict(LRmod01,type="response")

>View(LR.pred.probs01)

>scatter.smooth(dataset$Score,logit(LR.pred.probs01))

>scatter.smooth(dataset$Score,(LR.pred.probs01),main="Logistic Regression for Question 001", xlab="Number of Questions Yes on Exam", ylab="Log Odds for Question 001",ylim=range(0,1,na.rm=TRUE)

Я хочу сделать это кодирование выше, но для всех 50 вопросов. Прямо сейчас он работает только для Q01, и я знаю, что это произойдет только из-за части кодирования "dataset $ 'Q001points'". Должен ли я использовать цикл для этого, и если да, то как?


person GVSU student    schedule 14.06.2020    source источник


Ответы (1)


Предположим, мы используем набор данных mtcars:

> head(mtcars)
                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

Теперь мы хотим сделать несколько линейных моделей, таких как

lm(mtg ~ cyl + disp, data=mtcars)

но mtg следует заменить всеми остальными столбцами.

lst_model <- lapply(colnames(mtcars)[-3:-1], 
                    function(x) lm(get(x) ~ cyl + disp, data=mtcars))
lst_model <- setNames(lst_model, colnames(mtcars)[-3:-1])

дает список моделей

$hp

Call:
lm(formula = get(x) ~ cyl + disp, data = mtcars)

Coefficients:
(Intercept)          cyl         disp  
   -32.4317      24.5145       0.1189  


$drat

Call:
lm(formula = get(x) ~ cyl + disp, data = mtcars)

Coefficients:
(Intercept)          cyl         disp  
   4.607278    -0.095280    -0.001825  

[...]

Каждый элемент списка lst_model назван в честь левой переменной, т. е. вы получаете модель для hp ~ cyl + disp по lst_model[["hp"]].

> lst_model[["hp"]]

Call:
lm(formula = get(x) ~ cyl + disp, data = mtcars)

Coefficients:
(Intercept)          cyl         disp  
   -32.4317      24.5145       0.1189  

такой же как

> lm(hp ~ cyl + disp, data=mtcars)

Call:
lm(formula = hp ~ cyl + disp, data = mtcars)

Coefficients:
(Intercept)          cyl         disp  
   -32.4317      24.5145       0.1189  

Так, например, если вы хотите получить подходящие значения для модели

model <-  lm(hp ~ cyl + disp, data=mtcars)

вы вводите model$fitted.values.

В случае lst_model вы используете lst_model[["hp"]][["fitted.values"]], чтобы получить тот же результат. Поскольку [[ каким-то образом рекурсивно, вы можете использовать lst_model[[c("hp", "fitted.values")]], что то же самое.

person Martin Gal    schedule 14.06.2020
comment
что означает [-3:-1] в lst_model ‹- lapply(colnames(mtcars)[-3:-1], function(x) lm(get(x) ~ cyl + disp, data=mtcars)) - person GVSU student; 18.06.2020
comment
Это просто причудливый способ удалить первые три столбца. ;-) Я не хотел использовать mpg, cyl и disp в качестве левой части `~ cyl + disp, so I removed them using [-3:-1]`. - person Martin Gal; 18.06.2020
comment
поэтому, если я хочу использовать все столбцы, могу ли я просто убрать [-3:-1]? - person GVSU student; 18.06.2020
comment
Извините, только что проверил это, и да, это дало мне все столбцы. Можете ли вы помочь мне понять различные данные, которые он мне дает? Каковы коэффициенты, остатки, эффекты, подогнанные значения... и так далее? - person GVSU student; 18.06.2020
comment
Смотрите мой новый ответ. - person Martin Gal; 18.06.2020