2013-07-19 53 views
2

我注意到許多R模型允許使用「權重」參數(例如,購物車,黃土,遊戲等)。大多數幫助功能將其描述爲數據的「先前權重」,但這實際上意味着什麼?在R中重複使用權重(特別是gam的二元響應)

我有很多重複的情況和二進制響應的數據。我希望我可以使用「權重」來編碼每個輸入和響應組合的次數,但這似乎不起作用。我也嘗試將回答作爲成功的比例,以及各協變量組合的總體試驗的權重,但這似乎也沒有效果(至少對於gam而言)。我正在嘗試爲上面列出的所有模型類型執行此操作,但對於初學者,如何爲gam [mgcv軟件包]執行此操作?

回答

2

二項式響應的權重有一個自然的解釋:每個觀察對應的試驗數量。如果你有n試驗,其中p是成功的,你在gammgcv兩種封裝gam適合這個與

glm(p/n ~ x, family=binomial, weights=n) 

同樣的作品。

+0

謝謝,這似乎工作。當我認爲這不起作用時,事實證明我正在使用騙局(來自圖書館騙局),而不是gam。這似乎不適用於騙局。我會進一步研究。 – DavidR

1

我也曾經認爲權重是編碼重複觀察的樣本大小的一種便捷方式。但是下面的例子表明,對於簡單的線性模型來說情況並非如此。我首先定義一個列聯表與觀察到的/發明的鞋的尺寸和高度的人並適合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自由度」高度顯着

+0

我不知道這是否是線性模型代碼中的一個錯誤? – DavidR