[r] 선형 회귀에서 p- 값과 r- 제곱을 빼십시오

간단한 선형 회귀 모형에서 p- 값 (단일 설명 변수의 계수가 0이 아님)과 R- 제곱 값을 어떻게 구합니까? 예를 들어 …

x = cumsum(c(0, runif(100, -1, +1)))
y = cumsum(c(0, runif(100, -1, +1)))
fit = lm(y ~ x)
summary(fit)

p- 값과 R- 제곱 값 을 summary(fit) 표시 한다는 것을 알고 있지만 다른 변수에 넣을 수 있기를 원합니다.



답변

r- 제곱 : 요약 객체에서 r- 제곱 값을 직접 반환 할 수 있습니다 summary(fit)$r.squared. names(summary(fit))직접 추출 할 수있는 모든 항목의 목록을 참조하십시오 .

모형 p- 값 : 전체 회귀 모형의 p- 값을 얻으려는
경우이 블로그 게시물 에서는 p- 값을 반환하는 함수를 간략하게 설명합니다.

lmp <- function (modelobject) {
    if (class(modelobject) != "lm") stop("Not an object of class 'lm' ")
    f <- summary(modelobject)$fstatistic
    p <- pf(f[1],f[2],f[3],lower.tail=F)
    attributes(p) <- NULL
    return(p)
}

> lmp(fit)
[1] 1.622665e-05

예측 변수가 하나 인 단순 회귀 분석의 경우 계수 p에 대한 모형 p- 값과 p- 값이 같습니다.

계수 p- 값 : 예측 변수가 둘 이상인 경우 위의 모형 p- 값을 반환하고 계수에 대한 p- 값은 다음을 사용하여 추출 할 수 있습니다.

summary(fit)$coefficients[,4]  

또는 anova(fit)위의 요약 개체와 비슷한 방식으로 개체 의 계수 p- 값을 가져올 수 있습니다 .


답변

summary(fit)필요한 모든 정보 가 포함 된 개체 를 생성합니다. 베타, se, t 및 p 벡터가 저장됩니다. 계수 행렬의 4 번째 열 (요약 객체에 저장 됨)을 선택하여 p- 값을 가져옵니다.

summary(fit)$coefficients[,4] 
summary(fit)$r.squared

보십시오 str(summary(fit))이 객체가 포함 된 모든 정보를 볼 수 있습니다.

편집 : 기본적으로 내가 여기에주는 것에 도달하는 방법을 알려주는 체이스의 대답을 잘못 읽었습니다.


답변

summary()를 호출하여 반환 된 객체의 구조를 볼 수 있습니다 str(summary(fit)). 각 부분은을 사용하여 액세스 할 수 있습니다 $. F 통계량의 p- 값은에서 반환 한 객체에서 더 쉽게 얻을 수 있습니다 anova.

간결하게, 당신은 이것을 할 수 있습니다 :

rSquared <- summary(fit)$r.squared
pVal <- anova(fit)$'Pr(>F)'[1]


답변

위의 두 가지 대답이 모두 좋지만 객체의 일부를 추출하는 절차가 더 일반적입니다.

대부분의 경우 함수 반환 목록 및 str()구성 요소 이름과 함께 구성 요소를 인쇄 하여 개별 구성 요소에 액세스 할 수 있습니다 . 그런 다음 $ 연산자를 사용하여 액세스 할 수 있습니다 (예 🙂 myobject$componentname.

LM 객체의 경우, 하나 등으로 사용할 수있는 미리 정의 된 방법은 여러 가지가있다 coef(), resid(), summary()등,하지만 당신은 항상 운이되지 않습니다.


답변

비슷한 문제에 대한 제안 솔루션을 탐색 하면서이 질문을 보았습니다. 나중에 참조 할 수 있도록 broom패키지를 사용하는 솔루션으로 사용 가능한 답변 목록을 업데이트하는 것이 좋습니다 .

샘플 코드

x = cumsum(c(0, runif(100, -1, +1)))
y = cumsum(c(0, runif(100, -1, +1)))
fit = lm(y ~ x)
require(broom)
glance(fit)

결과

>> glance(fit)
  r.squared adj.r.squared    sigma statistic    p.value df    logLik      AIC      BIC deviance df.residual
1 0.5442762     0.5396729 1.502943  118.2368 1.3719e-18  2 -183.4527 372.9055 380.7508 223.6251          99

사이드 노트

glance키 값을 깔끔하게 요약 하여 함수가 유용하다는 것을 알았습니다 . 결과는 다음과 같이 data.frame쉽게 조작 할 수 있도록 저장됩니다 .

>> class(glance(fit))
[1] "data.frame"


답변

@Vincent의 답변 확장 :

대한 lm()생성 모델 :

summary(fit)$coefficients[,4]   ##P-values 
summary(fit)$r.squared          ##R squared values

대한 gls()생성 모델 :

summary(fit)$tTable[,4]         ##P-values
##R-squared values are not generated b/c gls uses max-likelihood not Sums of Squares

개별 p- 값 자체를 분리하려면 코드에 행 번호를 추가하십시오.

예를 들어 두 모델 요약에서 절편의 p- 값에 액세스하려면 다음을 수행하십시오.

summary(fit)$coefficients[1,4]
summary(fit)$tTable[1,4]  
  • 위의 각 인스턴스에서 열 번호를 열 이름으로 바꿀 수 있습니다.

    summary(fit)$coefficients[1,"Pr(>|t|)"]  ##lm 
    summary(fit)$tTable[1,"p-value"]         ##gls 

여전히 요약 테이블에서 값에 액세스하는 방법을 잘 모르는 경우 요약 테이블 str()의 구조를 파악하는 데 사용 하십시오.

str(summary(fit))


답변

이것이 p- 값을 얻는 가장 쉬운 방법입니다.

coef(summary(modelname))[, "Pr(>|t|)"]