内联平方转换给出与转换后的列值不同的结果

Inline square transformation giving different results than transformed column values

当使用内联方形变换(即在模型公式中使用 ~ Parameter^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 ***


我希望他们对系数给出相同的结果,但显然情况并非如此。我如何解释这些不同的结果?

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

# 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 创建