Jak naprawić jeden współczynnik i dopasować inne za pomocą regresji

11

Chciałbym ręcznie naprawić pewien współczynnik, powiedzmy , a następnie dopasować współczynniki do wszystkich innych predyktorów, zachowując w modelu.β 1 = 1,0β1=1.0β1=1.0

Jak mogę to osiągnąć za pomocą R? Szczególnie chciałbym pracować z LASSO ( glmnet), jeśli to możliwe.

Alternatywnie, jak mogę ograniczyć ten współczynnik do określonego zakresu, powiedzmy ?0.5β11.0

raco
źródło
Aby określić ograniczenia pola dla dopasowanych współczynników, istnieją argumenty lower.limits i upper.limits w glmnet, prawda?
Tom Wenseleers,

Odpowiedzi:

4

Musisz użyć takiego offsetargumentu:

library(glmnet)
x=matrix(rnorm(100*20),100,20)
x1=matrix(rnorm(100),100,1)
y=rnorm(100)
fit1=glmnet(x,y,offset=x1)
fit1$offset
print(fit1)

O zakresie ... Nie sądzę, że został zaimplementowany w glmnet. Jeśli używają jakiejś metody numerycznej, możesz zagłębić się w kod R i spróbować go ograniczyć, ale potrzebujesz dobrego, solidnego tła programistycznego.

Stat
źródło
2
Co offsetwłaściwie robi Jaka jest wartość 1.1*x1ustalona na podstawie pytania?
whuber
Przeczytałem dokumentację „offset” w glmnet i nadal nie jestem pewien, co ona robi. Nie mogłem znaleźć żadnych świetnych przykładów, ale większość referencyjnych procesów Poissona. Dlaczego stosuje się 1.1 * x1?
raco
Myślałem, że ustala współczynniki na . Właśnie zredagowałem odpowiedź. Przesunięcie jest terminem, w którym jego współczynnik nie jest szacowany przez model, ale przyjmuje się, że ma wartość 1.β1=1.1
Stat
Jestem wystarczająco zadowolony z tej odpowiedzi. Potrafię iterować po różnych „współczynnikach” przesunięcia i porównywać modele. Dzięki!
raco
1
Jeśli chodzi o offsetw glmnetpakiecie, odpowiedź udzielona przez Stat nie ma dla mnie sensu. Kiedy uruchamiam fit1 beta)] nie widzę żadnego . Czy możesz wyjaśnić, jak działa offset w twoim przykładzie? Dla zakresu bet możesz użyć argumentów i . beta[,ncol(fit1β1=1.0lower.limitsupper limits
Mario Nuñez,
9

Pomyślmy. Ty masz:

Y=b0+b1x1+b2x2+e

(dla uproszczenia) Chcesz wymusić , więc chceszb1=1

Y=b0+x1+b2x2+e

więc możesz po prostu odjąć z każdej strony, pozostawiając:x1

Ynew=Yx1=b0+b2x2+e

który może następnie oszacować .b2

Peter Flom - Przywróć Monikę
źródło
2
To łatwa część (o czym pamiętam w innych wątkach). A co z ograniczeniem współczynnika do zakresu? Szczególnie trudną częścią tego problemu jest uzyskanie dobrych granic ufności, gdy oszacowanie leży na granicy regionu ograniczenia.
whuber
2
To zdecydowanie trudniejsze. Przegapiłem koniec wpisu. Ale myślę, że powinienem zostawić swoją odpowiedź, ponieważ odpowiada ona na część pytania
Peter Flom - Przywróć Monikę
Czy nadal się to generalizuje, jeśli ? Niech zamiast 1, , gdzie jest współczynnikiem wybranym przez regresję OLS. β 1 = 0,75 Y n e w = Y - 0,75 x 1 = β 0 + ( β 1- 0,75 ) x 1 + β 2 x 2 + ϵ β 1β11β1=0.75Ynew=Y.75x1=β0+(β10.75)x1+β2x2+ϵβ1
raco
1
Tak, jeśli jest ustawiony na 0,75, wtedy robienie tego, co mówisz, zadziała. Ale jak wskazuje @whuber, to prosta część tego problemu
Peter Flom - Przywróć Monikę
2
@ Whuber, w ramach Bayesian, możesz rzucić krok Metropolis, aby wyrzucić wszelkie współczynniki poza twoim zasięgiem lub alternatywnie możesz próbkować ze skróconego wielowymiarowego rozkładu normalnego.
John
3

W odniesieniu do ograniczania współczynników, które powinny mieścić się w zakresie, bayesowskie podejście do szacowania jest jednym ze sposobów osiągnięcia tego.

W szczególności można polegać na Markov Chain Monte Carlo. Najpierw rozważmy algorytm próbkowania Gibbsa, który pasowałby do MCMC w środowisku Bayesa bez ograniczenia. W próbkowaniu Gibbsa na każdym etapie algorytmu próbkujesz z rozkładu tylnego każdego parametru (lub grupy parametrów), zależnie od danych i wszystkich innych parametrów. Wikipedia stanowi dobre podsumowanie tego podejścia.

Jednym ze sposobów ograniczenia zasięgu jest zastosowanie kroku Metropolis-Hastings. Podstawową ideą jest po prostu wyrzucenie dowolnej symulowanej zmiennej, która jest poza twoimi granicami. Możesz następnie ponownie próbkować, dopóki nie znajdzie się w twoich granicach, zanim przejdziesz do następnej iteracji. Wadą tego jest to, że możesz utknąć symulując wiele razy, co spowalnia MCMC. Alternatywnym podejściem, pierwotnie opracowanym przez Johna Geweke'a w kilku artykułach i rozszerzonym w artykule Rodrigueza-Yama, Davisa, Sharpe, jest symulacja z ograniczonego wielowymiarowego rozkładu normalnego. To podejście może poradzić sobie z liniowymi i nieliniowymi ograniczeniami nierówności parametrów i odniosłem z tym pewien sukces.

Jan
źródło
Aby określić ograniczenia pola dla dopasowanych współczynników, istnieją argumenty lower.limits i upper.limits w glmnet, prawda?
Tom Wenseleers,
@TomWenseleers Odpowiadałem bardziej ogólnie. Spójrz na niektóre inne odpowiedzi dotyczące glmnet.
John
2

Nie znam LASSO ani glmnet, ale lavaan(skrót od „ukrytej analizy zmiennych”) ułatwia modele regresji wielokrotnej zarówno z ograniczeniami równości, jak i ograniczeniami nierówności z pojedynczymi ograniczeniami (patrz tabela na stronie 7 tego pliku PDF, „pakiet lavaan: An R” do modelowania równań strukturalnych ” ). Nie wiem, czy możesz mieć górną i dolną granicę na współczynniku, ale może możesz dodać każdą granicę z osobnymi liniami, np .:

Coefficient>.49999999
Coefficient<1.0000001

Oczywiście, jeśli standaryzujesz wszystko przed dopasowaniem modelu, nie powinieneś się martwić o nałożenie górnej granicy 1 na współczynniki regresji. Powiedziałbym, że lepiej jest pominąć to w tym przypadku, na wypadek, gdyby coś poszło nie tak! ( mimo wszystko wciąż lavaan jest w fazie beta ... Jak dotąd widziałem trochę podejrzane wyniki w moim własnym ograniczonym użyciu).

Nick Stauner
źródło
Aby określić ograniczenia pola dla dopasowanych współczynników, istnieją argumenty lower.limits i upper.limits w glmnet, prawda?
Tom Wenseleers,