我创建了一个像下面这样的脚本来做一些我称之为“加权”回归的事情:

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 个样本,但对于具有相同 bpage 的行,它们被表示在 1523 列中并合并到 1533 列中。

我在 weight 函数中使用了 weight 参数,然后我用另一个数据帧交叉检查了结果,即 lm 数据帧被“扩展”。但是我发现 2 数据帧的 temp.df 输出不同。

我是否误解了 lm 函数中的 weight 参数,谁能让我知道如何正确运行回归(即不手动扩展数据框)以显示像 lm 这样的数据集?谢谢。

最佳答案

这里的问题是自由度没有正确加起来以获得正确的 Df 和均方和均方统计量。这将纠正问题:

temp.df.lm.aov <- anova(temp.df.lm)
temp.df.lm.aov$Df[length(temp.df.lm.aov$Df)] <-
        sum(temp.df.lm$weights)-
        sum(temp.df.lm.aov$Df[-length(temp.df.lm.aov$Df)]  ) -1
temp.df.lm.aov$`Mean Sq` <- temp.df.lm.aov$`Sum Sq`/temp.df.lm.aov$Df
temp.df.lm.aov$`F value`[1] <- temp.df.lm.aov$`Mean Sq`[1]/
                                        temp.df.lm.aov$`Mean Sq`[2]
temp.df.lm.aov$`Pr(>F)`[1] <- pf(temp.df.lm.aov$`F value`[1], 1,
                                      temp.df.lm.aov$Df, lower.tail=FALSE)[2]
temp.df.lm.aov
Analysis of Variance Table

Response: bp
            Df Sum Sq Mean Sq F value   Pr(>F)
age          1   8741  8740.5  10.628 0.001146 **
Residuals 1176 967146   822.4

与之比较:
> anova(temp.df.expand.lm)
Analysis of Variance Table

Response: bp
            Df Sum Sq Mean Sq F value   Pr(>F)
age          1   8741  8740.5  10.628 0.001146 **
Residuals 1176 967146   822.4
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

我有点惊讶这在 R-help 上没有更频繁地出现。或者我的搜索策略开发能力随着年龄的增长而减弱。

关于r - R 中的 "weighted"回归,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10268689/

10-12 22:14