如何在 R 中为 logit 运行相同的代码?



我正在尝试让R运行相同的函数/代码,但用于数据集。我设置了 50 个问题,是 (1(/否(0( 答案,以及 50 个问题中每个问题的大约 500 个不同的答案。这 500 个响应被标识为男性 (1( 或女性 (0(。每个人的末尾是他们的"分数",他们有多少是(1(答案。我以前在 R 上运行过一个图,但我想为所有 50 个问题运行这个图,而不必每次都更改代码,并运行代码 50 次。我正在使用的代码如下。数据集是我用性别、Q001-Q052 点和分数作为列制作的 excel 文件,然后向下 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'"部分而运行。 我应该为此使用循环吗?如果是的话,如何?

假设我们使用的是数据集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的每个元素都以左侧变量命名,即您通过lst_model[["hp"]]获得hp ~ cyl + disp模型。

> 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")]]

最新更新