内联正方形变换提供与变换后的列值不同的结果

时间:2019-04-06 18:32:28

标签: r glm

当使用平方转换内联时(即在模型公式中使用〜参数^ 2)与我首先将参数转换为另一列并在模型中使用该列(即Parameter2 = Parameter ^ 2)相比,得出的结果不同然后在公式中使用〜Parameter2)

Worst.Perimeter2 = Worst.Perimeter^2

m0x_ <- glm(formula = Diagnosis ~ Worst.Perimeter2, family = binomial, 
    data = cancerdata)
summary(m0x_)

results:
Coefficients:
                   Estimate Std. Error z value Pr(>|z|)    
(Intercept)      -1.090e+01  1.132e+00  -9.634   <2e-16 ***
Worst.Perimeter2  8.974e-04  9.792e-05   9.165   <2e-16 ***


m0x1_ <- glm(formula = Diagnosis ~ Worst.Perimeter^2, family = binomial, 
    data = cancerdata)
summary(m0x1_)

Results:
Coefficients:
                 Estimate Std. Error z value Pr(>|z|)    
(Intercept)     -20.81003    2.22116  -9.369   <2e-16 ***
Worst.Perimeter   0.18931    0.02068   9.156   <2e-16 ***


我希望它们给出相同的系数结果,但显然不是这样。如何解释这些不同的结果?

1 个答案:

答案 0 :(得分:2)

^是公式运算符。您可以使用它来指定一个包含交互作用的公式,如下例所示:

# Formula `(a + b)^2` means `1 + a + b + a*b`
head(model.matrix(~ (mpg + wt)^2, data = mtcars))
#>                   (Intercept)  mpg    wt mpg:wt
#> Mazda RX4                   1 21.0 2.620 55.020
#> Mazda RX4 Wag               1 21.0 2.875 60.375
#> Datsun 710                  1 22.8 2.320 52.896
#> Hornet 4 Drive              1 21.4 3.215 68.801
#> Hornet Sportabout           1 18.7 3.440 64.328
#> Valiant                     1 18.1 3.460 62.626

如果您希望将^解释为算术运算符,请使用I(AsIs)运算符,如以下示例所示:

head(model.matrix(~ I((mpg + wt)^2), data = mtcars))
#>                   (Intercept) I((mpg + wt)^2)
#> Mazda RX4                   1        557.9044
#> Mazda RX4 Wag               1        570.0156
#> Datsun 710                  1        631.0144
#> Hornet 4 Drive              1        605.8982
#> Hornet Sportabout           1        490.1796
#> Valiant                     1        464.8336

reprex package(v0.2.1)于2019-04-06创建