我也曾經認爲權重是編碼重複觀察的樣本大小的一種便捷方式。但是下面的例子表明,對於簡單的線性模型來說情況並非如此。我首先定義一個列聯表與觀察到的/發明的鞋的尺寸和高度的人並適合leats平方迴歸指定所述頻率的權重:
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:
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)
我們獲得i牙齒係數,但這次基於「163自由度」高度顯着
謝謝,這似乎工作。當我認爲這不起作用時,事實證明我正在使用騙局(來自圖書館騙局),而不是gam。這似乎不適用於騙局。我會進一步研究。 – DavidR