我创建了一个类似下面这样的脚本来执行我所谓的“加权”回归:
library(plyr)
set.seed(100)
temp.df <- data.frame(uid=1:200,
bp=sample(x=c(100:200),size=200,replace=TRUE),
age=sample(x=c(30:65),size=200,replace=TRUE),
weight=sample(c(1:10),size=200,replace=TRUE),
stringsAsFactors=FALSE)
temp.df.expand <- ddply(temp.df,
c("uid"),
function(df) {
data.frame(bp=rep(df[,"bp"],df[,"weight"]),
age=rep(df[,"age"],df[,"weight"]),
stringsAsFactors=FALSE)})
temp.df.lm <- lm(bp~age,data=temp.df,weights=weight)
temp.df.expand.lm <- lm(bp~age,data=temp.df.expand)
你可以看到在temp.df
中,每一行都有各自的权重,也就是说总共有1178个样本,但对于那些具有相同bp
和age
的行,它们会被合并为1行,并在weight
列中表示。我使用了
lm
函数中的weight
参数,然后将结果与另一个数据框进行交叉验证,这个数据框是通过"展开" temp.df
数据框得到的。但是我发现两个数据框的lm
输出不同。我是否错误地解释了
lm
函数中的weight
参数,并且是否有人能告诉我如何正确地运行回归(即不手动扩展数据框)以适用于像temp.df
这样的数据集?谢谢。
temp.df
使用200行呈现1178行数据。如果在两个数据框中执行相同的回归分析,则应该呈现相同的p值。我需要解决这个问题,因为在我的情况下,我可能有超过100万行数据,如果我不使用“weight”方法,可能没有足够的内存来存储它们。 - lokheart