Doğrusal bir denklemde faktörler ve interaktif terimler için katsayı terimi nasıl uygulanır?


9

R kullanarak, sürekli ve ayrık öngörücülerin bir karışımından tek bir yanıt değişkeni için doğrusal bir model yerleştirdim. Bu uber-temel, ama ayrık bir faktör için bir katsayının nasıl çalıştığını kavramada sorun yaşıyorum.

Kavram: Açıkçası, sürekli değişken 'x' katsayısı formda uygulanır, y = coefx(varx) + interceptancak faktör sayısal değilse bu bir faktör z için nasıl çalışır?y = coefx(varx) + coefz(factorz???) + intercept

Spesifik: R'ye bir model lm(log(c) ~ log(d) + h + a + f + h:a)yerleştirdim hve fayrık, sayısal olmayan faktörler. Katsayılar:

Coefficients:
              Estimate 
(Intercept)  -0.679695 
log(d)        1.791294 
h1            0.870735  
h2           -0.447570  
h3            0.542033   
a             0.037362  
f1           -0.588362  
f2            0.816825 
f3            0.534440
h1:a         -0.085658
h2:a         -0.034970 
h3:a         -0.040637

Tahminli denklemi oluşturmak için bunları nasıl kullanabilirim:

log(c) =  1.791294(log(d)) + 0.037362(a) + h??? + f???? + h:a???? + -0.679695

Yoksa yanlış mı yapıyorum?

Bu kavramın konunun kategoriye girmesi h1ve f2denklemin:

log(c) =  1.791294(log(d)) + 0.037362(a) +  0.870735  + 0.816825  + h:a???? + -0.679695

Ancak h:aetkileşimli terimin nasıl ayrıştırıldığı konusunda net değilim . Bana kolay gittiğin için teşekkürler.

Yanıtlar:


14

Bu, R'ye özgü bir sorun değildir. R, katsayıların geleneksel bir göstergesini kullanır.

Böyle bir regresyon çıktısını okuduğunuzda (bir makalede, ders kitabında veya istatistiksel yazılımda), hangi değişkenlerin "sürekli" ve hangilerinin "kategorik" olduğunu bilmeniz gerekir:

  • "Sürekli" olanlar açıkça sayısaldır ve sayısal değerleri regresyon bağlantısında olduğu gibi kullanılmıştır.

  • "Kategorik" değişkenler , sayısal olanlar da dahil olmak üzere herhangi bir türde olabilir ! Onları kategorik yapan, yazılımın onlara "faktörler" olarak davranmasıdır: yani bulunan her farklı değer, farklı bir şeyin göstergesi olarak kabul edilir .

    Çoğu yazılım sayısal olmayan değerleri (dizeler gibi) faktörler olarak ele alır. Çoğu yazılım, sayısal değerleri de faktör olarak ele almaya ikna edilebilir. Örneğin, bir posta hizmeti kodu (ABD'deki ZIP kodu) bir sayı gibi görünür , ancak gerçekten sadece bir dizi posta kutusu için bir koddur; ZIP kodlarını diğer numaralarla eklemek, çıkarmak ve çarpmak hiç mantıklı olmaz! (Bu esneklik yaygın bir hatanın kaynağıdır: Dikkatli veya farkında değilseniz yazılımınız, kategorik olduğunu düşündüğünüz bir değişkeni sürekli veya tam tersi olarak değerlendirebilir. Dikkatli olun!)

    Bununla birlikte, kategorik değişkenler uyum algoritmalarını uygulamak için bir şekilde sayılar olarak temsil edilmelidir. Bunları kodlamanın birçok yolu vardır . Kodlar "kukla değişkenler" kullanılarak oluşturulur. Bu sitede arama yaparak kukla değişken kodlama hakkında daha fazla bilgi edinin; detaylar burada önemli değil.

Soruda bize söylendi hve fkategorik ("ayrık") değerler. Varsayılan olarak log(d)ve asüreklidir. Tüm bilmemiz gereken bu. Model

y=0.679695+1.791294 log(d)+0.870735 if h=h10.447570 if h=h2+0.542033 if h=h3+0.037362 a0.588362 if f=f1+0.816825 if f=f2+0.534440 if f=f30.085658 a if h=h10.034970 a if h=h20.040637 a if h=h3

Burada uygulanan kurallar:

  • "Kesinti" terimi, görünüyorsa, bir katkı sabitidir (ilk satır).

  • Sürekli değişkenler, onların katsayıları ile çarpılır hatta "etkileşimler" in benzeri h1:a, h2:ave h3:aterimler. (Bu orijinal soruyu cevaplar.)

  • Herhangi bir kategorik değişken (veya faktör) yalnızca bu faktörün değerinin göründüğü durumlar için dahil edilir.

Örneğin, varsayalımlog(d)=2, h=h3, a=1, ve f=f2. Bu modeldeki uygun değer

y^=0.6797+1.7913×(2)+0.5420+0.0374×(1)+0.81680.0406×(1).

Model katsayılarının çoğunun hesaplamada nasıl görünmediğine dikkat edin, çünkü üç değerden tam olarak birini halabilirh1, h2, h3ve bu nedenle üç katsayıdan sadece biri(0.870735,0.447570,0.542033)üç katsayı için hve bunlardan sadece biri için geçerlidir(0.085658,0.034970,0.040637)çarpacaktır aiçinde h:aetkileşimi; benzer şekilde, fherhangi bir özel durumda sadece bir katsayı uygulanır .


8

Bu sadece bir yorum ama elimizde olan sınırlı düzenleme kutularına sığmayacak.

Cevabında @whuber'ın yaptığı gibi düz metinde açıkça yazılmış bir regresyon denklemini görmeyi seviyorum. İşte Hmisc paketi ile R'de bunun hızlı bir yolu . (Ben de rms kullanacağım , ama bu gerçekten önemli değil.) Temelde, sadece birLATEX makinenizde dizgi sistemi mevcuttur.

Önce bazı verileri simüle edelim,

n <- 200
x1 <- runif(n)
x2 <- runif(n)
x3 <- runif(n)
g1 <- gl(2, 100, n, labels=letters[1:2])
g2 <- cut2(runif(n), g=4)
y <- x1 + x2 + rnorm(200)

sonra bir regresyon modeline uyun,

f <- ols(y ~ x1 + x2 + x3 + g1 + g2 + x1:g1)

aşağıdaki sonuçları verir:

Linear Regression Model

ols(formula = y ~ x1 + x2 + x3 + g1 + g2 + x1:g1)

                Model Likelihood     Discrimination    
                   Ratio Test           Indexes        
Obs      200    LR chi2     35.22    R2       0.161    
sigma 0.9887    d.f.            8    R2 adj   0.126    
d.f.     191    Pr(> chi2) 0.0000    g        0.487    

Residuals

    Min      1Q  Median      3Q     Max 
-3.1642 -0.7109  0.1015  0.7363  2.7342 

                   Coef    S.E.   t     Pr(>|t|)
Intercept           0.0540 0.2932  0.18 0.8541  
x1                  1.1414 0.3642  3.13 0.0020  
x2                  0.8546 0.2331  3.67 0.0003  
x3                 -0.0048 0.2472 -0.02 0.9844  
g1=b                0.2099 0.2895  0.73 0.4692  
g2=[0.23278,0.553)  0.0609 0.1988  0.31 0.7598  
g2=[0.55315,0.777) -0.2615 0.1987 -1.32 0.1896  
g2=[0.77742,0.985] -0.2107 0.1986 -1.06 0.2901  
x1 * g1=b          -0.2354 0.5020 -0.47 0.6396  

Daha sonra, karşılık gelen regresyon denklemini yazdırmak için latex, aşağıdaki gibi genel işlevi kullanın :

latex(f)

DVI'nın PNG'ye dönüştürülmesi üzerine böyle bir şey almalısınız

resim açıklamasını buraya girin

IMO, bu, sayısal ve kategorik öngörücüler için gerçek veya seçilen değerlere bağlı olarak tahmini değerlerin nasıl hesaplanacağını gösterme özelliğine sahiptir. İkincisi için, faktör seviyeleri karşılık gelen katsayının yakınındaki parantez içinde belirtilir.


1
+1 Bu güzel bir yetenek. Gibi terimlerin sözdizimi+0.2099013{b}Bununla birlikte, potansiyel olarak kafa karıştırıcıdır: bu ifade ile kategorik değişken arasında belirgin bir ilişki yoktur g1veya{b}Gerçekten bir açılımı göstergesi olduğunug1=b sayısal değeri yerine b! (Buraya,b gerçekten "b" anlamına gelir - harf - yeterli uyarı olabilir, ancak kategoriler sayılarla kodlandığında, örneğin 0 ve 1, dikkat et ...)
whuber

1
@whuber Yukarıdaki resim kırpılmış, ancak konu {c} = 1 ise grup c, 0 ise "( cbu özel durumda kafa karıştırıcı olabilir, çünkü iki harf seçiyorum) g1 seviyelerini temsil eder, ancak genellikle oldukça sezgiseldir - ve bu saf textir, böylece daha sonra kaynak dosyayı düzenleyebiliriz). Eklenmiş başka bir özet g1daha şimdi dört seviyeli bir faktör olacak şekilde değiştirdim. Yine de, 0/1 etiketlerle daha kafa karıştırıcı olabilir .
chl

5

"Kontrastlarınızı" varsayılan olarak options()ve aşağıdakileri arayarak kontrol edebilirsiniz :

$contrasts
        unordered           ordered 
"contr.treatment"      "contr.poly" 

Sırasız karşıtlıklarınız contr.treatment(siz değiştirmedikçe olması gerektiği gibi) olarak ayarlanırsa, faktörlerinizin her birinin ilk düzeyi bir taban çizgisi olarak ayarlanır. Yalnızca faktörün diğer düzeyleri için oluşturulan kukla değişkenlerin önündeki katsayılar için tahminler verilecektir . Gerçekte, bu katsayılar "modeldeki diğer her şey için kontrol edilen faktörün temel seviyesine kıyasla, faktörün bu seviyesindeki tepki değişkeninin ortalama olarak ne kadar farklı olduğu" olacaktır.

Çıktınızdan bir h ve f için temel seviyeler olan bir h0ve tahmin ediyorum f0(kontrastlar için varsayılan olmayan bir seçeneğiniz yoksa, bu durumda birkaç olasılık var; ?contr.treatmentbiraz yardım deneyin ).

Etkileşime benzer. Önceki paragrafım doğruysa, verilen tahmin agerçekten ane zaman için eğim olacaktır h=h0. Özetlerde verilen etkileşimler için geçerli olan tahminler, eğimin farklı seviyeleri için ne kadar değiştiğidir h.

Yani, h = h1 ve f = f2 olan örneğinizde şunu deneyin:

log(c) =  1.791294(log(d)) + (0.037362 - 0.085658) (a) +  0.870735  + 0.816825  -0.679695

Oh, ve sen de predict()bir sürü yararlı şey yapmak için kullanabilirsiniz ... eğer gerçekten bir şey tahmin etmek istiyorsanız (bir rapor için denklemi yazmak yerine). Tarafından oluşturulan bir nesneye ?predict.lmne yaptığını görmeye çalışın .predict()lm


+1 (aslında, bunu bir ay önce iptal ettim ve şimdi tekrar tekrar okudum), herhangi bir oranda, kontrast türünü kontrol etmenizi tavsiye ederim options(). İhtiyacınız olanı bulmak için çok fazla önemsiz dolaşmak zorunda kalacaksınız. Deneyebilirsiniz options()$contrasts, bu da sadece istediğinizi çıktılar.
gung - Monica'yı eski durumuna getirin

iyi bir öneri, beynim uyuyor olmalı.
Peter Ellis

Bilirsiniz, genellikle yatmadan hemen önce CV sorularını cevaplarım ...
gung - Reinstate Monica
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.