【问题标题】:lmPerm P-Values Different depending on Order of CoefficientslmPerm P 值因系数顺序而异
【发布时间】:2017-03-25 01:42:33
【问题描述】:

根据我在函数调用中输入变量的顺序,我从 lmPerm 得到不同的结果。

例如,将NCF.pf 放在TotalProperties 之前会产生以下结果:

pfit <- lmp(NetCashOps ~ NCF.pf + TotalProperties, data = sub.pm, subset = Presence == 1)

summary(pfit)
...
Coefficients:
                  Estimate   Iter  Pr(Prob)    
NCF.pf            4.581e-01    51         1    
TotalProperties   5.246e+04  5000    <2e-16 ***

但是,当我切换公式中系数的顺序并将TotalProperties 放在NCF.pf 之前时,NCF.pf 上的 p 值变得显着

pfit2 <- lmp(NetCashOps ~ TotalProperties + NCF.pf, data = sub.pm, subset = Presence == 1)

summary(pfit2)
...
Coefficients:
                  Estimate   Iter  Pr(Prob)    
TotalProperties   5.246e+04  5000   <2e-16 ***
NCF.pf            4.581e-01  5000   <2e-16 ***

我错过了什么吗?为什么仅仅因为我在函数调用中切换了变量的顺序,p值就会不同?

更新 - 数据源和lm 输出(2016 年 11 月 11 日)

数据可以在 GitHub 上的this link找到。

当调用标准lm 函数两次(颠倒第二次调用的变量顺序)时,p 值是相同的(见下文)。因此,与使用 lmPerm 函数时不同,变量的顺序与 lm 无关。

fit1 <- lm(NetCashOps ~ NCF.pf + TotalProperties, data = sub.pm, subset = Presence == 1)

summary(fit1)
...
Coefficients:
                 Estimate Std. Error t value Pr(>|t|)    
(Intercept)     7.088e+05  2.258e+05   3.138   0.0019 ** 
NCF.pf          4.581e-01  1.112e-01   4.121 5.11e-05 ***
TotalProperties 5.246e+04  9.519e+03   5.511 8.76e-08 ***


fit2 <- lm(NetCashOps ~ TotalProperties + NCF.pf, data = sub.pm, subset = Presence == 1)

summary(fit2)
...
Coefficients:
                 Estimate Std. Error t value Pr(>|t|)    
(Intercept)     7.088e+05  2.258e+05   3.138   0.0019 ** 
TotalProperties 5.246e+04  9.519e+03   5.511 8.76e-08 ***
NCF.pf          4.581e-01  1.112e-01   4.121 5.11e-05 ***

谢谢!

【问题讨论】:

  • 这是一个统计问题,而不是编程问题:投票关闭/迁移到 CrossValidated。当预测变量不是完全正交时,这是线性模型的基本属性。
  • 你好哲元。根据您的要求,我提供了指向数据和 lm 输出的链接。感谢您的帮助。

标签: r regression permutation linear-regression lm


【解决方案1】:

我已经看到 2 票将其迁移到 Cross Validated,但在我看来,这应该留在 Stack Overflow。确实,在 lmlmp 使用的非枢轴 QR 分解策略下,t 统计量和 p 值对于术语的规范顺序不是不变的,但如新编辑中所示,对于 OP数据,这些统计量应该是不变的。所以在编程层面一定有一些敏感的东西。

我的快速诊断表明,如果我们设置seqs = TRUE,而不是使用默认的FALSE,我们会得到一致的结果:

## I have subsetted data with `Presence == 1` into a new dataset `dat`
## I have also renamed variable name for simplicity

coef(summary(lmp(y ~ x1 + x2, dat, seqs = TRUE)))

#                Estimate Iter Pr(Prob)
#(Intercept) 2.019959e+06 5000        0
#x1          4.580840e-01 5000        0
#x2          5.245619e+04 5000        0

coef(summary(lmp(y ~ x2 + x1, dat, seqs = TRUE)))
#                Estimate Iter Pr(Prob)
#(Intercept) 2.019959e+06 5000        0
#x2          5.245619e+04 5000        0
#x1          4.580840e-01 5000        0

注意,summary 打印时Pr(Prob) 应该是“coef 获取矩阵时,那些微小的值是0。

?lmp 的文档在这部分提到了一点:

The SS will be calculated _sequentially_, just as ‘lm()’ does; or
they may be calculated _uniquely_, which means that the SS for
each source is calculated conditionally on all other sources.

目前我不确定SS 是什么(因为我不是lmPerm 的用户),但这听起来是为了获得一致的结果,我们应该设置seqs = TRUE

【讨论】:

  • 哲元您好。感谢您的回复,在函数调用中设置seqs = TRUE 会产生相同的结果,而不管变量顺序如何,也会产生与lm 一致的结果。 SS 指平方和,因此seqs = TRUE 计算顺序平方和。作为对@BenBolker 的回应,seqs 是否应该设置为 TRUE 或 FALSE 是 CrossValidated 的一个问题;但是,将其标识为函数调用中的一个选项以便产生一致的结果适用于 Stack Overflow。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多