我正在尝试手动计算 DFFITS。获得的值应该等于通过以下方式获得的第一个值dffits
功能。不过我自己的计算肯定有问题。
attach(cars)
x1 <- lm(speed ~ dist, data = cars) # all observations
x2 <- lm(speed ~ dist, data = cars[-1,]) # without first obs
x <- model.matrix(speed ~ dist) # x matrix
h <- diag(x%*%solve(crossprod(x))%*%t(x)) # hat values
num_dffits <- x1$fitted.values[1] - x2$fitted.values[1] #Numerator
denom_dffits <- sqrt(anova(x2)$`Mean Sq`[2]*h[1]) #Denominator
df_fits <- num_dffits/denom_dffits #DFFITS
dffits(x1)[1] # DFFITS function
你的分子错了。由于您已从第二个模型中删除了第一个数据,因此相应的预测值不在fitted(x2)
。我们需要使用predict(x2, cars[1, ])
代替fitted(x2)[1]
.
帽子值可以通过以下方式有效计算
h <- rowSums(qr.Q(x1$qr) ^ 2)
或使用其 R 包装函数
h <- hat(x1$qr, FALSE)
R 也有一个获取帽子值的通用函数:
h <- lm.influence(x1, FALSE)$hat
或其包装函数
h <- hatvalues(x1)
您也不必打电话anova
获得 MSE:
c(crossprod(x2$residuals)) / x2$df.residual
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)