R отменить масштабирование и преобразовать ось графика в обратном направлении или использовать ось из исходного столбца данных

#r

#r

Вопрос:

Я строю график влияния переменной на смоделированную подгонку. Переменная была преобразована в sqrt, а затем масштабирована. Я могу нанести исходные значения «веса» на смоделированную подгонку, но результирующая geom_line сильно отличается, и диапазон на оси x, где наблюдается значительное увеличение смоделированной подгонки, сжат. Я предпочитаю первый график, который растягивает это. Однако я хотел бы изменить ось x, чтобы на исходной шкале данных были метки, используя labels=weight, как предложено, работает, но слишком много меток, есть ли способ уменьшить количество меток или меток?

Вот упрощенный пример моего набора данных и текущих цифр, я бы хотел, чтобы ось x отображала значения из столбца weight, а не sqrt.scale.столбец веса, который отображается:

 fit <- c(0.371, 0.4103, 0.431, 0.4482, 0.4644, 0.4773, 0.4893, 0.5007, 0.5116, 0.5213, 0.5308, 0.5392, 0.5473, 0.5554, 0.5626, 0.571, 0.5785, 0.5849, 0.5907, 0.5968, 0.6029, 0.6091, 0.6145, 0.62, 0.626, 0.6312, 0.6359, 0.6403, 0.6448, 0.6504, 0.6547, 0.6594, 0.664, 0.6684, 0.6729, 0.6774, 0.6821, 0.6863, 0.6906, 0.6952, 0.6993, 0.7033, 0.7071, 0.7108, 0.7143, 0.7172, 0.7205, 0.723, 0.7254, 0.7277, 0.7293, 0.7305, 0.7314, 0.7319, 0.732, 0.7319, 0.7314, 0.7307, 0.7295, 0.7281, 0.7263, 0.7241, 0.7219, 0.7194, 0.717, 0.7145, 0.7113, 0.7086, 0.7059, 0.7032, 0.701, 0.699, 0.6975, 0.6969, 0.697, 0.6989, 0.7069, 0.7347)

weight <- c(0, 0.0889, 0.2036, 0.3335, 0.4844, 0.6248, 0.7703, 0.9243, 1.0858, 1.2425, 1.4052, 1.5619, 1.7211, 1.89, 2.0493, 2.2476, 2.4336, 2.6021, 2.7624, 2.9379, 3.1268, 3.3228, 3.5082, 3.7031, 3.9277, 4.1324, 4.3255, 4.5165, 4.721, 4.9912, 5.2123, 5.4627, 5.7272, 5.9916, 6.2829, 6.5953, 6.944, 7.2809, 7.6518, 8.087, 8.5059, 8.9622, 9.4454, 9.9778, 10.5475, 11.0788, 11.7702, 12.409, 13.1368, 14.04, 14.8531, 15.6675, 16.614, 17.4447, 18.3222, 19.312, 20.2457, 21.2823, 22.5272, 23.71, 25.0778, 26.5766, 28.0484, 29.6478, 31.122, 32.7483, 34.8543, 36.8603, 38.961, 41.4882, 43.9276, 46.8164, 50.1696, 52.8536, 57.0352, 62.8378, 74.3099, 100.737)

sqrt.scale.weight <- c(-1.2543, -1.1136, -1.0413, -0.9818, -0.9258, -0.8812, -0.84, -0.8005, -0.7625, -0.7282, -0.6948, -0.6644, -0.6351, -0.6054, -0.5786, -0.5467, -0.518, -0.4929, -0.4698, -0.4453, -0.4197, -0.3939, -0.3702, -0.346, -0.3189, -0.2948, -0.2726, -0.2512, -0.2287, -0.1998, -0.1767, -0.1511, -0.1247, -0.0989, -0.0712, -0.0421, -0.0105, 0.0193, 0.0514, 0.088, 0.1223, 0.1587, 0.1963, 0.2367, 0.2786, 0.3168, 0.365, 0.4084, 0.4565, 0.5143, 0.5648, 0.614, 0.6696, 0.7171, 0.7661, 0.82, 0.8695, 0.9232, 0.986, 1.044, 1.1094, 1.179, 1.2455, 1.3158, 1.3789, 1.4468, 1.5323, 1.6114, 1.6919, 1.786, 1.8741, 1.9753, 2.089, 2.1772, 2.3104, 2.4873, 2.8146, 3.4832)

dat <- data.frame(weight,sqrt.scale.weight,fit)

ggplot(data=dat,aes(sqrt.scale.weight, fit))  
  geom_line(col="red")  
  geom_rug(sides="b")  
  theme_bw()  
  scale_y_continuous(limits = c(0, 1),breaks = seq(0, 1, by = 0.2))  
  theme(panel.grid.major = element_blank(),panel.grid.minor = element_blank())  
  labs(y = "Modelled probability", x = "sqrt scaled variable")  

ggplot(data=dat,aes(weight, fit))  
  geom_line(col="red")  
  geom_rug(sides="b")  
  theme_bw()  
  scale_y_continuous(limits = c(0, 1),breaks = seq(0, 1, by = 0.2))  
  theme(panel.grid.major = element_blank(),panel.grid.minor = element_blank())  
  labs(y = "Modelled probability", x = "weight variable")  

ggplot(data=dat,aes(sqrt.scale.weight, fit))  
  geom_line(col="red")  
  geom_rug(sides="b")  
  theme_bw()  
  scale_y_continuous(limits = c(0, 1),breaks = seq(0, 1, by = 0.2))  
  scale_x_continuous(breaks = sqrt.scale.weight, labels = weight)   
  theme(panel.grid.major = element_blank(),panel.grid.minor = element_blank())  
  labs(y = "Modelled probability", x = "sqrt scaled variable with weight label")  
  

Пример того, как выглядит график - без доверительных интервалов для упрощения примера

введите описание изображения здесь

Комментарии:

1. Я не могу запустить ваш код, потому lower что и upper не существуют

2. scale_x_continuous(breaks = sqrt.scale.weight, labels = weight)

3. кроме того, я не понимаю вашего вопроса.. Вы хотите построить график weight вместо sqrt.scale.weight . So? Что вас останавливает? И я не понимаю, как «ИЛИ ..» является альтернативой этому .. но если вы хотите вычислить значения 0,1,2 и т. Д., Вам Нужно использовать splinefun()

4. @Edo извините, я удалил нижнюю и верхнюю строки, я отредактировал вопрос, который, надеюсь, прояснит его. Отображение преобразованной переменной sqrt и масштаба расширяет диапазон значений оси x (вес 0-10), по которым мы видим влияние или влияние на параметр подгонки модели, который я хотел бы сохранить, но со значимыми метками оси x.

Ответ №1:

Я думаю, это то, что вы ищете.

Прежде всего, сохраните атрибуты при масштабировании: вам нужно использовать те же средние и sd, чтобы соответствующим образом преобразовать метки ggplot.

Я создал несколько меток, которые мне понравились mylabels , но вы можете назначить mylabels то, что вы предпочитаете показывать.

mybreaks вычисляются последовательно: суть в том, чтобы преобразовать mylabels с тем же преобразованием, которое применялось weights при расчете sqrt.scale.weights .

Таким образом, мы фактически строим sqrt.scale.weights график, но мы настраиваем ось x, чтобы показать соответствующие метки фактического weights .

Мои метки не идеальны, потому что я рассчитал среднее значение и sd только с частью ваших данных. Если вы получаете атрибуты масштаба из всего набора данных, он должен выглядеть идеально.

 att <- attributes(scale(sqrt(dat$weight)))
mylabels <- seq(0,100,10)
mybreaks <- scale(sqrt(mylabels), att$`scaled:center`, att$`scaled:scale`)[,1]

ggplot(data = dat, aes(sqrt.scale.weight, fit))  
  geom_line(col = "red")  
  geom_rug(sides = "b")  
  theme_bw()  
  scale_y_continuous(limits = c(0, 1), breaks = seq(0, 1, by = 0.2))  
  scale_x_continuous(labels = mylabels, breaks = mybreaks)  
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank())  
  labs(y = "Modelled probability", x = "variable")  
  

введите описание изображения здесь