2016-12-07 7 views
0

У меня есть список, состоящий из нескольких столбцов. Самый левый столбец - это мои данные оси x, в то время как остальные - разные наборы данных.Граничная линейная регрессия на нескольких столбцах в определенном диапазоне

Я хочу создать линейные регрессии для каждого из этих столбцов, но только для определенного диапазона по x, а затем принудительно выполнить линейную регрессию через 0,0. И, наконец, извлечь наклон линии указанной линейной регрессии. Ниже приведен пример некоторых моих данных.

x  y1  y2  y3  y4 
1 2.495 -1e-04 -1e-03 -1e-04 0e+00 
2 2.995 -2e-04 -7e-04 -2e-04 0e+00 
3 3.495 2e-04 -2e-04 1e-04 2e-04 
4 3.995 0e+00 -3e-04 0e+00 1e-04 
5 4.495 0e+00 -3e-04 0e+00 0e+00 
6 4.995 0e+00 -3e-04 0e+00 1e-04 
7 5.495 1e-04 -2e-04 0e+00 1e-04 
8 5.995 -1e-04 -1e-04 0e+00 3e-04 
9 6.495 1e-04 1e-04 2e-04 3e-04 
10 6.995 1e-04 0e+00 0e+00 3e-04 

Вот к примеру я бы получить линейные регрессии для диапазона от й строк, например от 3 до 10, принуждая регрессию до пересечения 0,0. Наконец, получены склоны от линейных регрессий для y1, y2 и т. Д.

Я знаю функции abind и lm, но только смогу построить одиночные регрессии без принуждения 0,0 пересекаться. Спасибо

+0

Не могли бы вы уточнить, какие переменные являются ваши независимые переменные и которые зависимые? Чтобы заставить перехват 0, вы просто добавляете -1 к своей модели регрессии, например, 'lm (y ~ x -1)'. – paqmo

+0

Столбец x является независимой переменной, в то время как y1, y2 .. зависят. – AGB

ответ

0

Регрессионная модель без перехвата заставляет линию регрессии через начало координат. Это достигается в R, добавляя -1 к модели. Для того, чтобы получить диапазон х вы хотите, просто подмножество наблюдений в этом диапазоне и использовать lapply для перебора различных независимых переменных:

dat2 <- dat[3:9,] 
fits <- lapply(dat2[,-1], function(x) lm(x ~ dat2[,1] - 1)) 

Заговор линии данных и регрессии с ggplot2. Используйте melt из пакета reshape2, чтобы сделать данные длинными. Это помогает ggplot2 разбить данные по категориям:

library(ggplot2); library(reshape2) 
mdat <- melt(dat2,id="x") 
ggplot(data = mdat) + 
    geom_point(aes(y = value, x = x, color=variable)) + 
    geom_smooth(data=mdat,aes(x=x,y=value,color = variable),formula = y ~ x - 1, 
       method = "lm", se = F) 

enter image description here

+0

Привет, спасибо! которые работали очень хорошо. Я не очень хорошо знаком с функцией sapply. Есть еще много столбцов y, как я могу перейти к кодированию другой функции sapply, чтобы пройти через все y столбцы? Спасибо – AGB

+0

Как сейчас, функция 'lapply' должна пересекать все столбцы в кадре данных, кроме первой (независимой переменной). Реальная проблема возникает при построении графика - если у вас много кодов, которые я предоставляю, это довольно утомительно и громоздко. Было бы снова лучше перебрать значения y для его автоматизации. – paqmo

+0

Еще раз спасибо, извините, у меня нет репутации u.pvote you. Это работает очень хорошо. Мой последний вопрос: как получить значения для всех наклонов этих линейных подгонок? – AGB

 Смежные вопросы

  • Нет связанных вопросов^_^