Complementando minha resposta.
dados <- read.table("dados.csv", header = TRUE, sep = ";", dec = ",")
plot(dados$y ~ dados$x)
# Veja que o A33 nao tem variabilidade vou remover
dados <- dados[which(dados$x != "A33"),]
dados$x <- droplevels(dados$x)
tapply(dados$y, dados$x, sd)
# Aparentemente o A21, A69 e A95 tem variancias diferentes
# Modelo de regressao
fit1 <- lm(y ~ x, data = dados)
plot(residuals(fit1)~ fitted(fit1)) # Parece heterocedastico
# Modelo de regressao media e variancia
# A ligação pra média é a identidade e pra variance é o log.
require(mcglm)
dados$id <- 1
fit2 <- mcglm(c(y ~ x), list(mc_dglm(~ x, id = "id", data = dados)),
covariance = "expm", data = dados)
summary(fit2)
# Agora o modelo é heterocedastico e não precisa mais preocupar com isso.