[R-br] Validação cruzada

Walmes Zeviani walmeszeviani em gmail.com
Seg Dez 2 12:18:40 -02 2019


André,

Você pode obter as predições manualmente.

# Dados.
library(MCMCglmm)
data(PlodiaPO)
str(PlodiaPO)

# Divisão dos dados.
library(caTools)
divisao <- sample.split(PlodiaPO$PO, SplitRatio = 0.75)

# ATTENTION: `divisao` já é um vetor lógico, portanto ...
# conj_treinamento <- subset(PlodiaPO, divisao == TRUE)
conj_treinamento <- subset(PlodiaPO, divisao)
# ATTENTION: o conjunto de valiação também tem que ser data.frame.
# conj_validacao <- subset(PlodiaPO$PO, divisao == FALSE)
conj_validacao <- subset(PlodiaPO, !divisao)

# Modelo.
library(sommer)
fit <- mmer(PO ~ 1, random = ~FSfamily, data = conj_treinamento)
summary(fit)

# Conteúdo.
names(fit)

# Quantidades necessárias para a predição (efeitos fixos e aleatórios).
fit$Beta
fit$U

# Classe, métodos, implementação e documentação.
class(fit)
methods(class = "mmer")
getS3method("predict", "mmer")
help(predict.mmer, help_type = "html")

# ATTENTION: o nome do parâmetro é `newdata` e não `new_data`.
pred <- predict(fit, newdata = conj_validacao, classify = "FSfamily")
pred

# Pelo visto precisa usar o parâmetro `classify` pois já saiu com o
# efeito de "FSfamily".
pred <- predict(fit, newdata = conj_validacao)
str(pred)

# Predições.
unique(pred$predictions[, c("FSfamily", "predicted.value.PO")])

# Fazendo as predições na mão.
X <- model.matrix(~1, data = conj_validacao)
Z <- model.matrix(~0 + FSfamily, data = conj_validacao)
conj_validacao$fit <-
    X %*% fit$Beta[["Estimate"]] + Z %*% fit$U$FSfamily$PO

# Predições (coincidem até a 4 casa decimal).
merge(unique(pred$predictions[, c("FSfamily", "predicted.value.PO")]),
      unique(conj_validacao[, c("FSfamily", "fit")]))

À disposição.
Walmes.
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20191202/36c3f397/attachment.html>


Mais detalhes sobre a lista de discussão R-br