Muszę modelu regresji liniowej z jednym skategoryzowany (mężczyzn i kobiet), a jeden bezstopniowej .
Skonfigurowałem kody kontrastowe w R z options(contrasts=c("contr.sum","contr.poly"))
. A teraz mam sumy kwadratów typu III dla , B i ich interakcji (A: B) za pomocą .drop1(model, .~., test="F")
Co ja skazani sposób sumy kwadratów jest obliczana dla . Tak mi się wydaje sum((predicted y of the full model - predicted y of the reduced model)^2)
. Wyglądałby zredukowany model y~A+A:B
. Ale gdy używam predict(y~A+A:B)
, R zwraca wartości prognozowane, które są takie same jak wartości prognozowane w pełnym modelu. Dlatego suma kwadratów wynosiłaby 0.
(Do sum kwadratów użyłem zredukowanego modelu y~B+A:B
, który jest taki sam jak y~A:B
.)
Oto przykładowy kod losowo generowanych danych:
A<-as.factor(rep(c("male","female"), each=5))
set.seed(1)
B<-runif(10)
set.seed(5)
y<-runif(10)
model<-lm(y~A+B+A:B)
options(contrasts = c("contr.sum","contr.poly"))
#type3 sums of squares
drop1(model, .~., test="F")
#or same result:
library(car)
Anova(lm(y~A+B+A:B),type="III")
#full model
predFull<-predict(model)
#Calculate sum of squares
#SS(A|B,AB)
predA<-predict(lm(y~B+A:B))
sum((predFull-predA)^2)
#SS(B|A,AB) (???)
predB<-predict(lm(y~A+A:B))
sum((predFull-predB)^2)
#Sums of squares should be 0.15075 (according to anova table)
#but calculated to be 2.5e-31
#SS(AB|A,B)
predAB<-predict(lm(y~A+B))
sum((predFull-predAB)^2)
#Anova Table (Type III tests)
#Response: y
# Sum Sq Df F value Pr(>F)
#(Intercept) 0.16074 1 1.3598 0.2878
#A 0.00148 1 0.0125 0.9145
#B 0.15075 1 1.2753 0.3019
#A:B 0.01628 1 0.1377 0.7233
#Residuals 0.70926 6
źródło
Odpowiedzi:
Znalazłem różnice w estymacji regresorów między R 2.15.1 i SAS 9.2, ale po aktualizacji R do wersji 3.0.1 wyniki były takie same. Najpierw podpowiadam, aby zaktualizować R do najnowszej wersji.
Używasz niewłaściwego podejścia, ponieważ obliczasz sumę kwadratu na podstawie dwóch różnych modeli, co implikuje dwie różne macierze projektowe. To prowadzi cię do zupełnie różnych oszacowań w regresorach używanych przez lm () do obliczania przewidywanych wartości (używasz regresorów o różnych wartościach między dwoma modelami). SS3 jest obliczany na podstawie testu hipotezy, przy założeniu, że wszystkie regresory kondycjonujące są równe zeru, a regresor warunkowy równa się 1. Do obliczeń używa się tej samej macierzy projektowej, którą zastosowano do oszacowania pełnego modelu, jak dla regresora oszacowanego w całości Model. Pamiętaj, że SS3 nie są w pełni addytywne. Oznacza to, że jeśli zsumujesz oszacowany SS3, nie uzyskasz modelu SS (SSM).
Tutaj proponuję implementację R matematyki, która implementuje algorytm GLS używany do oszacowania SS3 i regresorów.
Wartości generowane przez ten kod są dokładnie takie same, generowane przy użyciu SAS 9.2, jak dla wyników podanych w kodzie, podczas gdy SS3 (B | A, AB) wynosi 0,167486 zamiast 0,15075. Z tego powodu proponuję ponownie zaktualizować wersję R do najnowszej dostępnej.
Mam nadzieję że to pomoże :)
źródło