Как я уже сказал, вы используете неправильный инструмент, чтобы получить то, что хотите. Вы предполагаете сюжет, который не может быть получен непосредственно из ваших данных (см. Внизу).
Вместо этого вам необходимо смоделировать свои данные. В частности, вы хотите предсказать ожидаемую часть расходов в каждой категории в зависимости от общих расходов. Затем сюжет, который вы представляете, показывает установленные значения этой модели (т. Е. Прогнозируемую долю расходов в любой области) в зависимости от общих расходов. Вот код, который делает это с использованием кривых loess
. Я рисую необработанные данные и установленные значения, чтобы показать вам, что происходит.
# setup the data
data("household", package = "HSAUR2")
household$total <- rowSums(household[,1:4])
household <- within(household, {
housing <- housing/total
food <- food/total
goods <- goods/total
service <- service/total
})
# estimate loess curves
l_list <-
list(loess(housing ~ total, data = household),
loess(food ~ total, data = household),
loess(goods ~ total, data = household),
loess(service ~ total, data = household))
# stack fitted curves on top of one another
ndat <- data.frame(total = seq(min(household$total), max(household$total), 100))
p <- lapply(l_list, predict, newdata = ndat)
for(i in 2:length(l_list))
p[[i]] <- p[[i]] + p[[i-1]]
# plot
plot(NA, xlim=range(household$total), ylim = c(0,1), xlab='Total', ylab='Percent', las=1, xaxs='i')
# plot dots
with(household, points(total, housing, pch = 20, col = palette()[1]))
with(household, points(total, housing + food, pch = 20, col = palette()[2]))
with(household, points(total, housing + food + goods, pch = 20, col = palette()[3]))
with(household, points(total, housing + food + goods + service, pch = 20, col = palette()[4]))
# plot fitted lines
for(i in 1:length(p))
lines(ndat$total, p[[i]], type = 'l', lwd = 2, col = palette()[i])
Результат:

Если вы пытались создать сюжет, как это на основе исходных данных, это будет выглядеть несколько странно, но может быть, что вы собираетесь:
plot(NA, xlim=range(household$total), ylim = c(0,1), xlab='Total', ylab='Percent', las=1, xaxs='i')
with(household, lines(total[order(total)], housing[order(total)], pch = 20, col = palette()[1]))
with(household, lines(total[order(total)], (housing + food)[order(total)], pch = 20, col = palette()[2]))
with(household, lines(total[order(total)], (housing + food + goods)[order(total)], pch = 20, col = palette()[3]))
with(household, lines(total[order(total)], (housing + food + goods + service)[order(total)], pch = 20, col = palette()[4]))
Результат:

Ваши другие переменные (жилье, продукты питания, товары, услуги) не являются категоричными (как пол), поэтому я не вижу, как можно создать такой сюжет, который вам кажется нужным. – Thomas
Идея состоит в том, что переменная «total» разделяется на четыре категории. В зависимости от общих расходов домашних хозяйств (ось х) четыре процента различаются. Например, я ожидал бы, что доля денег, потраченных на жилье, уменьшается с увеличением общих расходов. Имею ли я смысл? В моей голове этот сюжет существует и работает, я просто не знаю, как его создать. –