R에 100 개의 변수가있는 선형 모델 공식을 작성하는 방법


22

R에 100 개의 매개 변수가있는 모델에 대해 선형 회귀를 작성하는 쉬운 방법이 있습니까? 10 개의 값을 가진 벡터 Y와 10 개의 열과 100 개의 행을 가진 데이터 프레임 X가 있다고 가정 해 봅시다 Y = X[[1]] + X[[2]] + ... + X[[100]]. R 구문에서 비슷한 것을 어떻게 작성합니까?


1
100 또는 1000이 있습니까? 또한 일반적으로 열은 변수이고 행은 관측치입니다 (여기서 반전되어 표시됨)
Macro

100 추가 0은 오타
Christian Christian

2
정말? 이 작업을 수행 하시겠습니까? 예측 변수의 선형 조합 간의 과적 합과 상관 관계에 대해 걱정하고 있습니다. 뿐만 아니라 100 개의 예측 변수와 10 개의 관측치 만 있으면 가지며 선형 회귀는 전혀 작동하지 않습니다. p>n
Aaron-복원 Monica Monica

답변:


29

이 시도

df<-data.frame(y=rnorm(10),x1=rnorm(10),x2=rnorm(10))
lm(y~.,df)

4
예를 들어 모든 2 차 상호 작용을 원한다면을 쓸 수 있습니다 y ~ . + .^2. 등등.
Lutz Prechelt

3
그리고 당신은 같은 단지 2 차 상호 작용의 일부, 뭔가하려는 경우 y ~ . + .:x1(제외하면 각 변수의 상호 작용을 얻을 것이다 x1으로)를 x1. 등등; 당신은 아이디어를 얻는다.
Lutz Prechelt

21

좋은 답변입니다!

나는 전화, 기본적으로 그을 추가 formulaA가에 data.frame다른 사람에 첫 번째 열을 회귀하는 첨가제 공식을 만듭니다.

@ danas.zuokas의 답변의 경우에도 할 수 있습니다

lm(df)

올바르게 해석됩니다.


그래도 상호 작용 용어를 혼합하려는 경우이 답변이 작동하지 않습니다. 당신은 (+1) 않습니다.
gui11aume

6
나는 대부분 R의 연산자가 오버로드 된 방식에 지속적으로 놀랐습니다. :)
Macro

19

각 행이 관측치이고 각 열이 예측 변수이므로 가 길이의 벡터이고 가 행렬 ( 이 경우 )이면 다음을 수행 할 수 있습니다.N X N × P P = 100YnXn×pp=100

Z = as.data.frame(cbind(Y,X))
lm(Y ~ .,data=Z)

예측 변수로 포함하지 않으려는 다른 열 X이있는 경우이 트릭을 사용하거나 -모델 수식에서 제외 하기 전에 열 을 제거해야 합니다. 예를 들어 67 번째 예측 변수 (해당 이름이 있음 x67) 를 제외하려는 경우 다음과 같이 쓸 수 있습니다.

lm(Y ~ .-x67,data=Z)

또한 상호 작용 등을 포함 시키려면 (예 :)와 같이 수동으로 상호 작용을 추가해야합니다.

lm(Y ~ .+X[,1]*X[,2],data=Z)

또는의 열로 입력했는지 확인하십시오 X.


19

formulapaste기능 의 조합을 사용할 수도 있습니다 .

설정 데이터 :하자 우리가 예측 변수가 포함 된 data.frame이 상상의 x1x100우리의 종속 변수를 y뿐만 아니라 성가신 변수가 있다는 것을 asdfasdf. 또한 예측 변수는 data.frame에서 모두 연속적이지 않은 순서로 배열됩니다.

Data <- data.frame(matrix(rnorm(102 * 200), ncol=102))
names(Data) <- c(paste("x", 1:50, sep=""), 
    "asdfasdf", "y", paste("x", 51:100, sep=""))

예측 변수의 이름이 포함 된 문자열이 있다고 가정 해보십시오. 이 경우 paste함수를 사용하여 쉽게 만들 수 있지만 다른 상황 grep이나 다른 방법을 사용하여이 문자열을 가져올 수도 있습니다.

PredictorVariables <- paste("x", 1:100, sep="")

접근법 적용 : 다음과 같이 공식을 구성 할 수 있습니다.

Formula <- formula(paste("y ~ ", 
     paste(PredictorVariables, collapse=" + ")))
lm(Formula, Data)
  • collapse인수 삽입 +예측 인자 변수 사이
  • formula문자열을 lm함수에 적합한 클래스 수식의 객체로 변환합니다 .

더 일반적으로 예측 변수를 변수 이름의 벡터로 제공하려는 경우 다음 함수를 매우 정기적으로 사용합니다.

regression <- function(dv, ivs, data) {
    # run a linear model with text arguments for dv and ivs
    iv_string <- paste(ivs, collapse=" + ")
    regression_formula <- as.formula(paste(dv, iv_string, sep=" ~ "))
    lm(regression_formula, data)

}

예 :

regression("y", PredictorVariables, Data)

2
+1. 나는이 기술을 항상 사용합니다. 그러나 때로는 수식에 변수를 저장하면 문제가 발생합니다. 전화하기 전에 공식 평가 를 사용하려면 stackoverflow.com/a/7668846/210673 을 참조하십시오 . do.calllm
Aaron-복원 Monica Monica
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.