Ręcznie obliczone

38

Wiem, że jest to dość specyficzne Rpytanie, ale mogę myśleć o wariancji proporcji wyjaśnionej, , niepoprawnie. Tutaj idzie.R2

Próbuję użyć Rpakietu randomForest. Mam trochę danych treningowych i danych testowych. Po dopasowaniu losowego modelu lasu randomForestfunkcja umożliwia wprowadzenie nowych danych testowych do przetestowania. Następnie podaje procent wariancji wyjaśniony w tych nowych danych. Kiedy na to patrzę, dostaję jeden numer.

Kiedy używam tej predict()funkcji do przewidywania wartości wyników danych testowych na podstawie dopasowania modelu z danych treningowych i biorę kwadratowy współczynnik korelacji między tymi wartościami a rzeczywistymi wartościami wyników dla danych testowych, otrzymuję inną liczbę. Te wartości się nie zgadzają .

Oto Rkod ilustrujący problem.

# use the built in iris data
data(iris)

#load the randomForest library
library(randomForest)

# split the data into training and testing sets
index <- 1:nrow(iris)
trainindex <- sample(index, trunc(length(index)/2))
trainset <- iris[trainindex, ]
testset <- iris[-trainindex, ]

# fit a model to the training set (column 1, Sepal.Length, will be the outcome)
set.seed(42)
model <- randomForest(x=trainset[ ,-1],y=trainset[ ,1])

# predict values for the testing set (the first column is the outcome, leave it out)
predicted <- predict(model, testset[ ,-1])

# what's the squared correlation coefficient between predicted and actual values?
cor(predicted, testset[, 1])^2

# now, refit the model using built-in x.test and y.test
set.seed(42)
randomForest(x=trainset[ ,-1], y=trainset[ ,1], xtest=testset[ ,-1], ytest=testset[ ,1])
Stephen Turner
źródło

Odpowiedzi:

52

Powodem, dla którego wartości nie są zgodne, jest to, że wyjaśniono wariancję raportowania zamiast wyjaśnienia wariancji . Myślę, że jest to powszechne nieporozumienie dotyczące które utrwala się w podręcznikach. Wspomniałem nawet o tym w innym wątku pewnego dnia. Jeśli chcesz przykład, zobacz (poza tym całkiem dobry) podręcznik Seber and Lee, Analiza regresji liniowej , 2. miejsce. wyd.R2randomForestR2

Ogólna definicja to R2

R2=1i(yiy^i)2i(yiy¯)2.

Oznacza to, że obliczamy błąd średniej kwadratowej, dzielimy go przez wariancję pierwotnych obserwacji, a następnie odejmujemy od jednego. (Pamiętaj, że jeśli twoje prognozy są naprawdę złe, ta wartość może być ujemna).

Teraz regresja liniowa ( z terminem przechwytującym! ) Polega na tym, że średnia wartość pasuje do . Ponadto wektor szczątkowy jest ortogonalny do wektora dopasowanych wartości . Kiedy połączysz te dwie rzeczy razem, definicja sprowadza się do tej, która jest częściej spotykana, tj. (Użyłem indeksów w do wskazania regresji liniowej .)y^iy¯yy^y^

RLR2=Corr(y,y^)2.
LRRLR2

randomForestPołączenia przy użyciu pierwszej definicji, więc jeśli robisz

   > y <- testset[,1]
   > 1 - sum((y-predicted)^2)/sum((y-mean(y))^2)

zobaczysz, że odpowiedzi pasują do siebie.

kardynał
źródło
1
+1, świetna odpowiedź. Zawsze zastanawiałem się, dlaczego oryginalna formuła jest używana dla zamiast kwadratu korelacji. W przypadku regresji liniowej jest to samo, ale w przypadku zastosowania w innych kontekstach zawsze jest mylące. R2
mpiktas
(+1) Bardzo elegancka odpowiedź.
chl
@mpiktas, @chl, postaram się rozwinąć nieco później. Zasadniczo istnieje ścisłe (ale być może nieco ukryte) powiązanie z testowaniem hipotez w tle. Nawet w przypadku regresji liniowej, jeśli wektor stały nie znajduje się w przestrzeni kolumny macierzy projektowej, wówczas definicja „korelacji” zawiedzie.
kardynał
Jeśli masz odniesienie inne niż podręcznik Sebera / Lee (niedostępny dla mnie), chciałbym zobaczyć dobre wyjaśnienie, w jaki sposób wyjaśniona zmienność (tj. 1-SSerr / SStot) różni się od kwadratowego współczynnika korelacji lub wyjaśnionej wariancji. Jeszcze raz dziękuję za wskazówkę.
Stephen Turner,
Jeśli wartość R-kwadrat jest ujemna w stosunku do wyników regresji zmiennej instrumentalnej, czy istnieje sposób na zniesienie tej wartości ujemnej i przełożenie na wartość dodatnią na potrzeby raportowania? Zapoznaj się z tym linkiem: stata.com/support/faqs/statistics/two-stage-least-squares
Eric