また、重みは、繰り返し観測するサンプル サイズをエンコードする便利な方法だと考えていました。しかし、次の例は、これが単純な線形モデルには当てはまらないことを示しています。最初に、観測された/発明された靴のサイズと人の身長を含む分割表を定義し、頻度を重みとして指定するリーツ二乗回帰を当てはめます。
SKdata = matrix(c(20,5,5,5,40,15,3,27,30,2,3,10),ncol=4)
dimnames(SKdata) = list(shoesize=10:12,height=seq(160,190,by=10))
x = as.data.frame(as.table(SKdata), stringsAsFactors=FALSE)
for (i in 1:ncol(x)) x[,i] = as.numeric(x[,i])
fit1 = lm(height ~ shoesize,data=x, weights=Freq)
summary(fit1)
勾配の係数は重要ではなく、残差誤差は「10 自由度」に基づいていることに注意してください。
これは、便利な関数 expand.dft を使用して、分割表を "生" データ (観測ごとに 1 行) に変換すると変わります。
expand.dft <- function(x, na.strings = "NA", as.is = FALSE, dec = ".")
{
DF <- sapply(1:nrow(x), function(i) x[rep(i, each = x$Freq[i]), ],
simplify = FALSE)
DF <- subset(do.call("rbind", DF), select = -Freq)
for (i in 1:ncol(DF))
{
DF[[i]] <- type.convert(as.character(DF[[i]]),
na.strings = na.strings,
as.is = as.is, dec = dec)
}
DF
}
fit2 = lm(height ~ shoesize,data=expand.dft(x))
summary(fit2)
同じ係数が得られますが、今回は「163 自由度」に基づいているため、非常に重要です。