2013-07-19 49 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