Если вы хотите усреднить все значения в loess.fits, полученные в моем предыдущем ответе на другой вопрос, вы получите один ответ. Если вы хотите просто установить loess
для всего набора данных (что не соответствует вашей спецификации "равного веса", по крайней мере, когда я интерпретирую эту фразу), вы получите другой ответ.
Это приведет к усредненным значениям 'yhat' при 51 равном интервале значений данных для 'x' в диапазоне [0,1]. Из-за пропущенных значений он может быть не совсем «одинаково взвешенным», а только в крайних значениях. Оценки в других местах плотные:
apply( as.data.frame(loess.fits), 1, mean, na.rm=TRUE)

Предыдущий ответ:
Я бы назвал вопрос «оценка лессовых баллов по группам»:
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) })
