сгруппированные лессовые баллы - PullRequest
0 голосов
/ 28 марта 2012

У меня есть эти data.frame: http://sprunge.us/TMGS,, и я хотел бы вычислить loess из Intermediate.MAP.Score ~ x, поэтому я получаю одну кривую из всего набора данных.Но каждая группа (по name) должна иметь такой же вес, как и любая другая группа, я не уверен, что произойдет, если я позвоню loess по всему data.frame.Нужно ли называть это один раз для каждой группы и объединять их?Если да, то как мне это сделать?

1 Ответ

2 голосов
/ 29 марта 2012

Если вы хотите усреднить все значения в loess.fits, полученные в моем предыдущем ответе на другой вопрос, вы получите один ответ. Если вы хотите просто установить loess для всего набора данных (что не соответствует вашей спецификации "равного веса", по крайней мере, когда я интерпретирую эту фразу), вы получите другой ответ.

Это приведет к усредненным значениям 'yhat' при 51 равном интервале значений данных для 'x' в диапазоне [0,1]. Из-за пропущенных значений он может быть не совсем «одинаково взвешенным», а только в крайних значениях. Оценки в других местах плотные:

apply( as.data.frame(loess.fits), 1, mean, na.rm=TRUE)

enter image description here

Предыдущий ответ: Я бы назвал вопрос «оценка лессовых баллов по группам»:

plot(dat$x, dat$Intermediate.MAP.Score, col=as.numeric(factor(dat$name)) )

Если вы продолжите с loess(Intermediate.MAP.Score ~ x, data=dat), вы получите общее среднее значение без различий между группами. И Лесс не принимает факторные или символические аргументы в своей формуле. Вам нужно разделить на «имя» и рассчитать отдельно. Другой недостаток, который следует избегать, это построение графиков по умолчанию, которое будет зависеть от различных диапазонов данных:

loess.fits <- lapply(split(dat, dat$name), function(xdf) { 
              list( yhat=predict( loess(Intermediate.MAP.Score ~ x, 
                                    data=xdf[ complete.cases(
                                            xdf[ , c("Intermediate.MAP.Score", "x") ]
                                                               ), 
                                                 ] ) ,
                                  newdata=data.frame(x=seq(0,1,by=0.02))))})
plot(dat$x, dat$Intermediate.MAP.Score, 
                   col=as.numeric(factor(dat$name)), 
                   ylim=c(0.2,1) )
lapply(loess.fits, function(xdf) { par(new=TRUE); 
                                 # so the plots can be compared to predictions
                                  plot(x= seq(0,1,by=0.02), y=xdf$yhat, 
                                       ylab="", xlab="",
                                       ylim=c(0.2,1), axes=FALSE) })

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...