배경
모델 피팅에 대한 과정에서 첫 번째 예 를 이해하려고합니다 (따라서 간단하게 보일 수 있습니다). 손으로 계산을 수행했으며 예제와 일치하지만 R에서 반복하면 모델 계수가 해제됩니다. 차이점은 모집단 분산 ( )을 사용하는 교과서 때문일 수 있다고 생각 했지만 R은 샘플 분산 ( )을 사용하고있을 수 있지만 계산에서 사용되는 위치를 볼 수는 없습니다. 예를 들어, 어딘가에서 사용하는 경우
메모 의 도움말 섹션은 다음과 같습니다.S 2lm()
var()
var()
분모 n-1이 사용되어 iid 관측치에 대한 (공) 분산의 편견 추정치를 제공합니다.
나는 모두를위한 코드를 보았다 lm()
그리고 lm.fit()
어느 쪽도 아니의 메이크업을 사용 var()
하지만 lm.fit()
컴파일 된 C 코드 (로 데이터 전달 z <- .Call(C_Cdqrls, x, y, tol, FALSE)
나는에 액세스 할 수 없습니다).
질문
R이 왜 다른 결과를 내는지 설명 할 수 있습니까? 표본과 모집단 분산의 차이가 있어도 계수 추정치가 다른 이유는 무엇입니까?
데이터
학교 학년의 신발 크기를 예측하기 위해 줄을 맞추십시오.
# model data
mod.dat <- read.table(
text = 'grade shoe
1 1
2 5
4 9'
, header = T);
# mean
mod.mu <- mean(mod.dat$shoe);
# variability
mod.var <- sum((mod.dat$shoe - mod.mu)^2)
# model coefficients from textbook
mod.m <- 8/3;
mod.b <- -1;
# predicted values ( 1.666667 4.333333 9.666667 )
mod.man.pred <- mod.dat$grade * mod.m + mod.b;
# residuals ( -0.6666667 0.6666667 -0.6666667 )
mod.man.resid <- (mod.dat$shoe - mod.man.pred)
# residual variance ( 1.333333 )
mod.man.unexpl.var <- sum(mod.man.resid^2);
# r^2 ( 0.9583333 )
mod.man.expl.var <- 1 - mod.man.unexpl.var / mod.var;
# but lm() gives different results:
summary(lm(shoe ~ grade, data = mod.dat))
Call:
lm(formula = shoe ~ grade, data = mod.dat)
Residuals:
1 2 3
-0.5714 0.8571 -0.2857
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -1.0000 1.3093 -0.764 0.585
grade 2.5714 0.4949 5.196 0.121
Residual standard error: 1.069 on 1 degrees of freedom
Multiple R-squared: 0.9643, Adjusted R-squared: 0.9286
F-statistic: 27 on 1 and 1 DF, p-value: 0.121
편집하다
로 벤 Bolker을 보여 주었다 교사 실수를 할 때도 마찬가지로 보인다. R 계산이 올바른 것 같습니다. 이야기의 도덕 : 교사가 진실이라고 말해서 무언가를 믿지 마십시오. 직접 확인하십시오!
lm
R 의 함수 의 경우 문자 그대로 수만 명의 사람들이 결과를 다른 것들과 비교하여 결과를 lm
확인했으며 코드의 변경 사항이있을 때마다 알려진 예제 와 비교하여 결과를 확인합니다. 여기에 답이 있으면 최소한 몇 사람이 확인할 것입니다 (귀하의 질문은 29 번 봤습니다).
mod.m=8/3
. 을 설정하면mod.m=2.5714
동일한 것으로 보입니다.