2010-11-16 26 views
9

predict() kullanımı, belirli bir model için bağımsız değişkenin (x) belirli bir değeri için bağımlı değişkenin (y) öngörülen değerini elde edebilir. Verilen bir y için x kestiren herhangi bir işlev var mı? Örneğin'tahmin' işlevinin tersi

:

predict(model, data.frame(x=50), type = "response") 

Ben x örneğin y=30 yapar bilmek istiyorum:

kalythos <- data.frame(x = c(20,35,45,55,70), 
    n = rep(50,5), y = c(6,17,26,37,44)) 
kalythos$Ymat <- cbind(kalythos$y, kalythos$n - kalythos$y) 
model <- glm(Ymat ~ x, family = binomial, data = kalythos) 

biz x=50 için modelin öngörülen değerini bilmek istiyorsanız

.

+4

Tahmin, her zaman bazı istatistiksel model bağlamındadır. Değişkenin "öngörülebilir" olabilmesinden önce, bir dağıtım ve yapısal varsayımlara ihtiyaç vardır. Lm ve glm gibi fonksiyonlarda, bağımsız değişkenlerin sabit olduğu varsayılır (yani deterministik), dolayısıyla bunların tahmini anlamsızdır.X üzerinde çıkarım yapmak istiyorsanız, X stokastik hale getirmek için bir çeşit hiyerarşik yaklaşım kullanmalısınız. Büyük olasılıkla, X'iniz için posterior verecek olan bir Bayes çerçevesinde sonuçlanacaksınız ve bu da tahminler için kullanabilirsiniz. – VitoshKa

+2

Tam olarak ne istediğini belirtsen iyi olur. 1 x ile yapılabilir. 2 x ile, sonsuz miktarda olası cevabınız var. Öyleyse neden tam tersi öngörüye tam olarak ihtiyacın olduğunu merak ediyorum. Kalibrasyon amaçlı mıdır? - düzenle: ayrıca VitoshKa'nın yorumuna da bakınız. –

+0

'invM1 <- lm (x ~ y, data) 'gibi bir ters model oluşturabilir ve daha sonra' y''nün yeni öngörücüsünde 'predik'' kullanabilirsiniz. Şimdi, atla ve yapmadan önce, yukarıdaki @vitoshKa'nın neyi göz önünde bulundurduğunu öneriyorum. – PavoDive

cevap

8

Önceki yanıt silindi. Senin durumunda, verilen n = 50 ve model binom, sen kullanıldığı X verilen y hesaplarız:

f <- function (y,m) { 
    (logit(y/50) - coef(m)[["(Intercept)"]])/coef(m)[["x"]] 
} 
> f(30,model) 
[1] 48.59833 

Ama bunu yaparken, daha iyi nasıl ters tahmin aralığını hesaplamak için size göstermek için bir istatistikçi danışın. Ve lütfen, VitoshKa'nın düşüncelerini dikkate alın.

1

Sadece regresyon denklemini yeniden düzenlemelisiniz, ancak yukarıdaki yorumlar gibi, bu durumun zor olabileceği ve mutlaka anlamlı bir yorumlamaya sahip olmadığı da kanıtlanabilir.

Ancak durum için size kullanabilirsiniz sundu:

(1/coef(model)[2])*(model$family$linkfun(30/50)-coef(model)[1]) 

Not ben ilk isim nitelik doğru olmasını sağlamak için x katsayısı ile bölünmesini yaptı.

0

Hızlı bir görünüm için (aralıksız ve ek sorunları dikkate almadan), TeachDemos paketindeki TkPredict işlevini kullanabilirsiniz. Bunu doğrudan yapmaz, ancak x değerini/değerlerini dinamik olarak değiştirmenize ve tahmin edilen y değerinin ne olduğunu görmenize izin verir, böylece istenen Y bulunana kadar x'in taşınması oldukça basit olur (ekte verilen değerler için). x'ler), bu aynı zamanda aynı y için çalışacak olan birden fazla x ile ilgili sorunları da gösterecektir.

1

y ~ x - 1 bu eski iplik genelinde geldi ama başka bilgi eklemek düşündüm formun uyan için çalışan bir inverse.predict() işlevi vardır. Paket MASS, logit/probit modelleri için functionDP'ye sahiptir. SE delta metodu ile yapılmaktadır. @VitoshKa söylediği gibi, biz x sabit ve y (0/1 yanıt) rastgele varsayıyorum, çünkü ters modelini (x ~ y) takılması

> dose.p(model,p=.6) 
      Dose  SE 
p = 0.6: 48.59833 1.944772 

ediyorum burada değil mantıklı. Ayrıca, eğer veri gruplandırılmadıysa, açıklayıcı değişkenin sadece 2 değerine sahip olursunuz: 0 ve 1 Ancak x'in sabit olduğunu varsaysak da, belirli bir p için x için bir güven aralığının hesaplanması mantıklıdır. , @VitoshKa'nın söylediği gibi. Modeli ED50 açısından yeniden parametreleştirebildiğimiz gibi, bunu ED60 ya da başka bir miktar için yapabiliriz. Parametreler sabittir, ancak yine de CI'leri onlar için hesaplıyoruz.