fundo
Estou tentando entender o primeiro exemplo de um curso sobre montagem de modelos (então isso pode parecer ridiculamente simples). Fiz os cálculos manualmente e eles correspondem ao exemplo, mas quando os repito em R, os coeficientes do modelo estão desativados. Eu pensei que a diferença pode ser devido ao livro didático usar variação populacional ( ), enquanto R pode estar usando variação amostral ( ), mas não consigo ver onde elas são usadas nos cálculos. Por exemplo, se
usar em algum lugar, a seção de ajuda nas notas:lm()
var()
var()
Utiliza-se o denominador n - 1, que fornece um estimador imparcial da (co) variância para as observações iid.
Eu olhei para o código para ambos lm()
e lm.fit()
e nem utilizo var()
, mas lm.fit()
passa esses dados para o código C compilado ( z <- .Call(C_Cdqrls, x, y, tol, FALSE)
) ao qual não tenho acesso.
Questão
Alguém pode explicar por que R está dando resultados diferentes? Mesmo se houver uma diferença no uso da amostra versus variação populacional, por que as estimativas do coeficiente diferem?
Dados
Ajuste uma linha para prever o tamanho do sapato da série na escola.
# 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
Editar
Como Ben Bolker mostrou, às vezes parece que os professores cometem erros. Parece que os cálculos de R estão corretos. Moral da história: não acredite em algo apenas porque um professor diz que é verdade. Verifique você mesmo!
lm
função em R, literalmente dezenas de milhares de pessoas verificaram os resultados comparando-os com outras coisas, e a saída de lm
é comparada com exemplos conhecidos sempre que algo muda no código. Com respostas aqui, pelo menos algumas pessoas provavelmente verificarão (sua pergunta foi examinada 29 vezes).
mod.m=8/3
. Porque se você definirmod.m=2.5714
, eles parecerão idênticos.