Komentarz Makro jest poprawny, podobnie jak Andy. Oto przykład.
> library(rms)
>
> set.seed(1)
> d <- data.frame(x1 = rnorm(50), x2 = rnorm(50))
> d <- within(d, y <- 1 + 2*x1 + 0.3*x2 + 0.2*x2^2 + rnorm(50))
>
> ols1 <- ols(y ~ x1 + pol(x2, 2), data=d) # pol(x2, 2) means include x2 and x2^2 terms
> ols1
Linear Regression Model
ols(formula = y ~ x1 + pol(x2, 2), data = d)
Model Likelihood Discrimination
Ratio Test Indexes
Obs 50 LR chi2 79.86 R2 0.798
sigma 0.9278 d.f. 3 R2 adj 0.784
d.f. 46 Pr(> chi2) 0.0000 g 1.962
Residuals
Min 1Q Median 3Q Max
-1.7463 -0.4789 -0.1221 0.4465 2.2054
Coef S.E. t Pr(>|t|)
Intercept 0.8238 0.1654 4.98 <0.0001
x1 2.0214 0.1633 12.38 <0.0001
x2 0.2915 0.1500 1.94 0.0581
x2^2 0.2242 0.1163 1.93 0.0602
> anova(ols1)
Analysis of Variance Response: y
Factor d.f. Partial SS MS F P
x1 1 131.894215 131.8942148 153.20 <.0001
x2 2 10.900163 5.4500816 6.33 0.0037
Nonlinear 1 3.196552 3.1965524 3.71 0.0602
REGRESSION 3 156.011447 52.0038157 60.41 <.0001
ERROR 46 39.601647 0.8609054
Zamiast osobnego rozpatrywania terminów x2
i x2^2
„test fragmentu” jest testem 2-df, który testuje hipotezę zerową, że współczynniki tych terminów są równe zeru (uważam, że jest to częściej nazywane „ogólnym liniowym testem F” ). Wartość p dla tego testu wynosi 0,0037 podane przez anova(ols1)
.
Zauważ, że w rms
pakiecie, musisz określić x2
warunki jak pol(x2, 2)
dla anova.rms()
wiedzieć, że mają one być badane razem.
anova.rms()
wykona podobne testy dla zmiennych predykcyjnych, które są reprezentowane jako ograniczone splajny sześcienne, używając, na przykład rcs(x2, 3)
, i dla zmiennych predykcyjnych jakościowych. Będzie także zawierać warunki interakcji w „fragmentach”.
Jeśli chciałbyś wykonać test porcji dla ogólnych „konkurencyjnych” zmiennych predykcyjnych, jak wspomniano w cytacie, uważam, że musiałbyś to zrobić ręcznie, dopasowując oba modele osobno, a następnie używając anova(model1, model2)
. [Edycja: to jest niepoprawne - patrz odpowiedź Franka Harrella.]