Як вписати регресію типу в R?


9

У мене є дані часових рядів, де вимірювана змінна - це дискретні додатні цілі числа (рахунки). Я хочу перевірити, чи є тенденція до зростання (чи ні). Незалежна змінна (x) знаходиться в діапазоні 0-500, а залежна змінна (y) знаходиться в діапазоні 0-8.

Я подумав, що відповідаю на це, встановлюючи регресію форми y = floor(a*x + b)за допомогою звичайних найменших квадратів (OLS).

Як би я міг робити це за допомогою R (або Python)? Чи існує пакет для цього, чи мені краще написати власний алгоритм?

PS: Я знаю, що це не ідеальна методика, але мені потрібно зробити порівняно простий аналіз, який я фактично можу зрозуміти - моє передумови - це біологія, а не математика. Я знаю, що я порушую припущення про похибку вимірюваної змінної та незалежність вимірювань у часі.


5
Хоча спробувати регресію такої форми математично природно, за нею ховається статистична помилка: термін помилки тепер буде сильно корельований з передбачуваним значенням. Це досить сильне порушення припущень OLS. Замість цього використовуйте техніку, засновану на підрахунку, як це запропоновано у відповіді Грега Сноу. (Я із задоволенням підтримав це питання, тому що воно відображає деяку реальну думку та кмітливість. Дякую, що тут його
задали

Відповіді:


11

Ви можете підходити до моделі, в якій ви заявляєте, використовуючи функцію nls(нелінійні найменші квадрати) R, але, як ви сказали, це порушить багато припущень і все одно, мабуть, не матиме великого сенсу (ви говорите, що передбачуваний результат випадковий приблизно на крок функція, а не цілі значення навколо плавно зростаючого відношення).

Більш розповсюдженим способом встановлення даних про підрахунок є використання регресії Пуассона за допомогою glmфункції R, перший приклад на сторінці довідки - регресія Пуассона, хоча якщо ви не такі знайомі зі статистикою, найкраще проконсультуватися зі статистиком. що ви все робите правильно.

Якщо значення 8 - це абсолютний максимум (неможливо коли-небудь побачити більш високий підрахунок, не тільки те, що ви бачили), то ви можете розглянути пропорційну логістичну регресію шансів, є кілька інструментів для цього в пакетах R, але ви дійсно слід залучати статистиків, якщо ви хочете це зробити.


"Ви говорите, що передбачуваний результат є випадковим навколо крокової функції, а не цілих значень навколо плавно зростаючої взаємозв'язку" --- Це я не вважав. Врешті-решт я пішов з регресією Пуассона на glm. Це не ідеальний вибір, але "достатньо хороший" для того, що мені було потрібно.
afaulconbridge

10

Зрозуміло, що пропозиція Грега - це перше, що потрібно спробувати: регресія Пуассона - природна модель у багатьох багатьох конкретних ситуацій.

Однак модель, яку ви пропонуєте, може виникнути, наприклад, коли ви спостерігаєте закруглені дані: з iid нормальними помилками .

Yi=ахi+б+ϵi,
ϵi

Я думаю, що це цікаво, щоб подивитися, що з цим можна зробити. Я позначаю через cdf стандартної звичайної змінної. Якщо , то використовуючи знайомі комп'ютерні позначення.ЖϵN(0,σ2)

П(ах+б+ϵ=к)=Ж(к-б+1-ахσ)-Ж(к-б-ахσ)=pноrм(к+1-ах-б,сг=σ)-pноrм(к-ах-б,сг=σ),

Ви спостерігаєте точки даних . Імовірність журналу задається Це не тотожне найменшим квадратам. Ви можете спробувати максимізувати це числовим методом. Ось ілюстрація в R:(хi,уi)

(а,б,σ)=iжурнал(Ж(уi-б+1-ахiσ)-Ж(уi-б-ахiσ)).
log_lik <- function(a,b,s,x,y)
  sum(log(pnorm(y+1-a*x-b, sd=s) - pnorm(y-a*x-b, sd=s)));

x <- 0:20
y <- floor(x+3+rnorm(length(x), sd=3))
plot(x,y, pch=19)
optim(c(1,1,1), function(p) -log_lik(p[1], p[2], p[3], x, y)) -> r
abline(r$par[2], r$par[1], lty=2, col="red")
t <- seq(0,20,by=0.01)
lines(t, floor( r$par[1]*t+r$par[2]), col="green")

lm(y~x) -> r1
abline(r1, lty=2, col="blue");

округла лінійна модель

У червоному та синьому кольорах рядки знайдені шляхом чисельної максимізації цієї ймовірності та найменших квадратів відповідно. Зелена сходи - це для знайденої з максимальної ймовірності ... це говорить про те, що ви можете використовувати найменші квадрати, до перекладу на 0,5, і отримати приблизно однаковий результат; або, що найменші квадрати добре вписуються в модель де - найближче ціле число. Округлені дані настільки часто зустрічаються, що я впевнений, що це відомо і було вивчено широко ...ах+бах+ба,бб

Yi=[ахi+б+ϵi],
[х]=х+0,5

4
+1 Я люблю цю методику і фактично подала доповідь про неї в журнал аналізу ризиків кілька років тому. (Деякі аналітики ризику досить зацікавлені в даних, що оцінюються інтервалом.) Це було відхилено як "занадто математичне" для їх аудиторії. :-(. Одна порада: при використанні числових методів завжди корисно надати хороші вихідні значення для рішення. Потрібно застосувати OLS до необроблених даних для отримання цих значень, а потім "відполіруйте" їх за допомогою цифрового оптимізатора.
whuber

Так, це гарна пропозиція. Насправді в такому випадку я вибираю віддалені значення, щоб підкреслити, що "це працює", але на практиці ваша пропозиція була б єдиним рішенням, щоб не почати з дуже рівного регіону, залежно від даних ...
Елвіс,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.