2014-11-19 2 views
0

Я ищу метод, чтобы добавить значения предсказывал (реальная, а не нормируется) каждой отдельной переменной в моей моделиКак извлечь установленные значения GAM {mgcv} для каждой переменной в R?

> model<-gam(LN_Brutto~s(agecont,by=Sex)+factor(Sex)+te(Month,Age)+s(Month,by=Sex), data=bears)

Это краткое изложение моей модели:

> summary(m13) 

Family: gaussian 
Link function: identity 

Formula: 
LN_Brutto ~ s(agecont, by = Sex) + factor(Sex) + te(Month, Age) + 
    s(Month, by = Sex) 

Parametric coefficients: 
      Estimate Std. Error t value Pr(>|t|)  
(Intercept) 4.32057 0.01071 403.34 <2e-16 *** 
factor(Sex)m 0.27708 0.01376 20.14 <2e-16 *** 
--- 
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 

Approximate significance of smooth terms: 
        edf Ref.df  F p-value  
s(agecont):Sexf 8.1611 8.7526 20.170 < 2e-16 *** 
s(agecont):Sexm 6.6695 7.5523 32.689 < 2e-16 *** 
te(Month,Age) 10.3651 12.7201 6.784 2.19e-12 *** 
s(Month):Sexf 0.9701 0.9701 0.641 0.430  
s(Month):Sexm 1.3750 1.6855 0.193 0.787  
--- 
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 

Rank: 60/62 
R-sq.(adj) = 0.781 Deviance explained = 78.7% 
GCV = 0.048221 Scale est. = 0.046918 n = 1093 

предсказанные значения обеспечиваются этим кодом:

> predict<-predict(m13, type = "terms") 

И результат выглядит следующим образом:

factor(Sex) s(agecont):Sexf s(agecont):Sexm te(Month,Age) s(Month):Sexf s(Month):Sexm 
1 0.2770806 0.000000000  0.111763696  -0.077845764 0.000000000  0.0007840912 
2 0.2770806 0.000000000  0.240016156  -0.049143798 0.000000000  0.0007840912 
3 0.2770806 0.000000000  0.034328752  0.046524454  0.000000000  -0.0058871897 
4 0.0000000 -0.786533918 0.000000000  -0.067942427 0.021990192  0.0000000000 
5 0.0000000 0.074434715  0.000000000  0.046524454  0.021990192  0.0000000000 
6 0.0000000 0.161121563  0.000000000  0.089599601  0.021990192  0.0000000000 
7 0.0000000 0.074434715  0.000000000  0.046524454  0.021990192  0.0000000000 
8 0.2770806 0.000000000  -0.298597370 -0.007877328 0.000000000  -0.0058871897 
... 

Но я думаю, что это только стандартизированные предсказанные значения, а не реальные значения (реальные не должны иметь отрицательных значений !?).

Так кто-нибудь знает, что мне нужно изменить в коде, чтобы получить реальные значения? Любая идея? Спасибо!

ответ

2

Не уверен, что если вы последуете за вами правильно, , но predict(model, type = "terms") может быть решением, которое вы ищете.

Update

Я не думаю, что они стандартизированы. Возможно, некоторые из коэффициентов просто отрицательны.

Рассмотрим пример из файла справки ?mgcv:::predict.gam:

library(mgcv) 
n<-200 
sig <- 2 
dat <- gamSim(1,n=n,scale=sig) 

b<-gam(y~s(x0)+s(I(x1^2))+s(x2)+offset(x3),data=dat) 

Результаты ниже, иллюстрируют, что это на самом деле вклады, которые используются для каждого предиктора для расчета подогнанные значения (путем расчета суммы каждого этих вкладов, а затем добавление перехвата и смещение).

> head(predict(b)) 
     1   2   3   4   5   6 
9.263322 2.822200 7.137201 4.902631 14.558401 11.889092 
> head(rowSums(predict(b, type = "terms")) + attr(predict(b, type = "terms"), "constant") + dat$x3) 
     1   2   3   4   5   6 
9.263322 2.822200 7.137201 4.902631 14.558401 11.889092 
+0

это работает, но это просто дает мне стандартизированные значения ... вы знаете команду, чтобы дать мне реальные значения? Спасибо! –

+0

Мне было бы легче помочь вам, если бы вы могли предоставить минимальный рабочий пример с данными, к которым я могу легко получить доступ. – johansteen

+0

Сделал некоторые изменения! Если вам нужна дополнительная информация, PLS, дайте мне знать. –

0

Для возврата предсказанных значений в том же масштабе ответа вам нужно установить predict(model, type = "response")

поведение по умолчанию гама имеет типа = «ссылка», который возвращает линейный предсказатель и часто со стандартными ошибками (таким образом, положительные и отрицательные значения, которые вы нашли).

Подробнее на странице справки ?mgcv::predict.gam.