y ~ x1, y ~ x2, y ~ x3 등의 일련의 간단한 선형 회귀가 있습니다.
모든 선형 회귀를 실행하고 출력을 저장할 수 있었지만 벡터화 된 방식으로 요약 통계에 액세스하는 데 문제가 있습니다 (예 : 각 모델에 대한 R 제곱 조정).
for 루프를 통해 할 수 있고 각 모델을 반복 할 수 있지만 lapply (또는 sapply?)를 사용하고 결과를 더 빨리 얻을 수있는 더 쉬운 방법이 있어야한다고 생각합니다.
재현 가능한 예는 다음과 같습니다.
library(tidyverse)
library(broom)
set.seed(6)
DF <- data.frame(Y=rnorm(50, 100, 3),
X1=rnorm(50, 100, 3),
X2=rnorm(50, 100, 3),
X3=rnorm(50, 100, 3),
X4=rnorm(50, 100, 3))
DF_longer = pivot_longer(DF, -Y, names_to = "variable", values_to = "value", values_ptypes = list(val = 'numeric'))
lm1 = DF_longer %>% group_by(variable) %>% do(tidy(lm(Y ~ value, data=.)))
lm2 = DF_longer %>% group_by(variable) %>% do(mod = lm(Y ~ value, data=.))
최적화하고 싶은 부분은 다음과 같이 각 모델에 대해 조정 된 R 제곱을 for 루프가없는 벡터에 저장하려는 것입니다.
lm2_data = summary(lm2$mod[[1]])
lm2_data$adj.r.squared
lm2_data = summary(lm2$mod[[2]])
lm2_data$adj.r.squared
lm2_data = summary(lm2$mod[[3]])
lm2_data$adj.r.squared
lm2_data = summary(lm2$mod[[4]])
lm2_data$adj.r.squared
다음은 mtcars
데이터 를 사용하는 예입니다 .
regModels <- c("mpg ~ am", "mpg ~ am + wt", "mpg ~ wt + am + disp")
results <- lapply(regModels,function(x){
y <- summary(lm(x,data = mtcars))$adj.r.squared
})
names(results) <- regModels
results
... 그리고 출력 :
> results
$`mpg ~ am`
[1] 0.3384589
$`mpg ~ am + wt`
[1] 0.7357889
$`mpg ~ wt + am + disp`
[1] 0.757583
>
library(tidyverse)
library(broom)
set.seed(6)
DF <- data.frame(Y=rnorm(50, 100, 3),
X1=rnorm(50, 100, 3),
X2=rnorm(50, 100, 3),
X3=rnorm(50, 100, 3),
X4=rnorm(50, 100, 3))
DF_longer = pivot_longer(DF, -Y, names_to = "variable", values_to = "value", values_ptypes = list(val = 'numeric'))
lm1 = DF_longer %>% group_by(variable) %>% do(tidy(lm(Y ~ value, data=.)))
lm2 = DF_longer %>% group_by(variable) %>% do(mod = lm(Y ~ value, data=.))
adjRsquared <- lapply(lm2$mod,function(x){
y <- summary(x)$adj.r.squared
})
names(adjRsquared) <- lm2$variable
adjRsquared
... 그리고 출력 :
> adjRsquared
$X1
[1] -0.007637371
$X2
[1] 0.007729944
$X3
[1] 0.04993542
$X4
[1] -0.02026235
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다