Powered By Blogger

вторник, 9 июня 2015 г.

Пост №10. Линейная регрессия

Итак, моя lm() выдала мне целый список всевозможных циферок и компонентов:


str(LinearModel)
List of 12
 $ coefficients : Named num [1:3] -12.63 -1.23 1.71
  ..- attr(*, "names")= chr [1:3] "(Intercept)" "lnDISTANCE" "lnPOP"
 $ residuals    : Named num [1:6] 0.624 -0.929 -0.655 0.665 -0.381 ...
  ..- attr(*, "names")= chr [1:6] "1" "2" "3" "4" ...
 $ effects      : Named num [1:6] -8.437 0.42 3.013 1.194 -0.277 ...
  ..- attr(*, "names")= chr [1:6] "(Intercept)" "lnDISTANCE" "lnPOP" "" ...
 $ rank         : int 3
 $ fitted.values: Named num [1:6] 5.72 4.43 2.96 2.95 2.46 ...
  ..- attr(*, "names")= chr [1:6] "1" "2" "3" "4" ...
 $ assign       : int [1:3] 0 1 2
 $ qr           :List of 5
  ..$ qr   : num [1:6, 1:3] -2.449 0.408 0.408 0.408 0.408 ...
  .. ..- attr(*, "dimnames")=List of 2
  .. .. ..$ : chr [1:6] "1" "2" "3" "4" ...
  .. .. ..$ : chr [1:3] "(Intercept)" "lnDISTANCE" "lnPOP"
  .. ..- attr(*, "assign")= int [1:3] 0 1 2
  ..$ qraux: num [1:3] 1.41 1.66 1.39
  ..$ pivot: int [1:3] 1 2 3
  ..$ tol  : num 1e-07
  ..$ rank : int 3
  ..- attr(*, "class")= chr "qr"
 $ df.residual  : int 3
 $ xlevels      : Named list()
 $ call         : language lm(formula = lnMIGR ~ lnDISTANCE + lnPOP)
 $ terms        :Classes 'terms', 'formula' length 3 lnMIGR ~ lnDISTANCE + lnPOP
  .. ..- attr(*, "variables")= language list(lnMIGR, lnDISTANCE, lnPOP)
  .. ..- attr(*, "factors")= int [1:3, 1:2] 0 1 0 0 0 1
  .. .. ..- attr(*, "dimnames")=List of 2
  .. .. .. ..$ : chr [1:3] "lnMIGR" "lnDISTANCE" "lnPOP"
  .. .. .. ..$ : chr [1:2] "lnDISTANCE" "lnPOP"
  .. ..- attr(*, "term.labels")= chr [1:2] "lnDISTANCE" "lnPOP"
  .. ..- attr(*, "order")= int [1:2] 1 1
  .. ..- attr(*, "intercept")= int 1
  .. ..- attr(*, "response")= int 1
  .. ..- attr(*, ".Environment")=<environment: R_GlobalEnv> 
  .. ..- attr(*, "predvars")= language list(lnMIGR, lnDISTANCE, lnPOP)
  .. ..- attr(*, "dataClasses")= Named chr [1:3] "numeric" "numeric" "numeric"
  .. .. ..- attr(*, "names")= chr [1:3] "lnMIGR" "lnDISTANCE" "lnPOP"
 $ model        :'data.frame': 6 obs. of  3 variables:
  ..$ lnMIGR    : num [1:6] 6.34 3.5 2.3 3.61 2.08 ...
  ..$ lnDISTANCE: num [1:6] 3.58 8.77 3.99 8.79 4.42 ...
  ..$ lnPOP     : num [1:6] 13.3 16.3 12 15.4 12 ...
  ..- attr(*, "terms")=Classes 'terms', 'formula' length 3 lnMIGR ~ lnDISTANCE + lnPOP
  .. .. ..- attr(*, "variables")= language list(lnMIGR, lnDISTANCE, lnPOP)
  .. .. ..- attr(*, "factors")= int [1:3, 1:2] 0 1 0 0 0 1
  .. .. .. ..- attr(*, "dimnames")=List of 2
  .. .. .. .. ..$ : chr [1:3] "lnMIGR" "lnDISTANCE" "lnPOP"
  .. .. .. .. ..$ : chr [1:2] "lnDISTANCE" "lnPOP"
  .. .. ..- attr(*, "term.labels")= chr [1:2] "lnDISTANCE" "lnPOP"
  .. .. ..- attr(*, "order")= int [1:2] 1 1
  .. .. ..- attr(*, "intercept")= int 1
  .. .. ..- attr(*, "response")= int 1
  .. .. ..- attr(*, ".Environment")=<environment: R_GlobalEnv> 
  .. .. ..- attr(*, "predvars")= language list(lnMIGR, lnDISTANCE, lnPOP)
  .. .. ..- attr(*, "dataClasses")= Named chr [1:3] "numeric" "numeric" "numeric"
  .. .. .. ..- attr(*, "names")= chr [1:3] "lnMIGR" "lnDISTANCE" "lnPOP"
 - attr(*, "class")= chr "lm"

> LinearModel$coefficients
(Intercept)  lnDISTANCE       lnPOP 
 -12.628980   -1.228007    1.710443 
> LinearModel$residuals
         1          2          3          4          5          6 
 0.6237597 -0.9291957 -0.6545567  0.6649467 -0.3808893  0.6759353 
> LinearModel$effects
(Intercept)  lnDISTANCE       lnPOP                                     
 -8.4370820   0.4196987   3.0127464   1.1943209  -0.2766226   1.1054963 
> LinearModel$fitted.values
       1        2        3        4        5        6 
5.720121 4.425703 2.957142 2.945971 2.460331 2.157278 
 
 
residuals - это остатки (невязки) - ответ минус подогнанные значения
fitted.values -  подогнанные средние значения
 
coefficients- проименнованный вектор коэффициентов
fitted.values  -  аппроксимированные средние значения
rank  -  числовой ранг получившейся линейной модели
weights- (только для взвешенной аппроксимации) указанный вес
df.residual   -  степени свободы невязки
callthe matched call.
termsthe terms object used.
contrasts(only where relevant)  использованные контрасты.
xlevels(only where relevant) запись уровней факторов, используемых при аппроксимации
offsetиспользованное смещение (missing if none were used).
yif requested, использованная характеристика.
xif requested, использованная модель матрицы
modelif requested (the default),использованная модель фрейма
na.action(where relevant) information returned by model.frame on the special handling of NAs.
Так же возвращает параметр -
effects - последствия

Effects from Fitted Model

Description

Возвращает (ортогональные) эффекты от аппроксимированной модели, обычно линейной модели (модели линейной регрессии_. Это  обобщенная функция, но сейчас использует только те методы, что отнаследовала из классов  "lm" и "glm".

Usage

effects(object, ...)

## S3 method for class 'lm'
effects(object, set.sign = FALSE, ...)

Arguments

objectan R object; typically, the result of a model fitting function such as lm.
set.signlogical. If TRUE, the sign of the effects corresponding to coefficients in the model will be set to agree with the signs of the corresponding coefficients, otherwise the sign is arbitrary.
...arguments passed to or from other methods.

Details

 Для линейной модели полученной, с помощью lm() или aov(), эффекты  - некорреллированные значения со степенью свободы 1, полученные проецированием данных на последовательность ортогональных подпространств, сгенерированных с помощью QR - декомпозиции в течение аппроксимации. Первый ранг модели (r_0 ) связан с последствиями, а остальные охватывают пространство невязок (но никак не связаные с конкретными остатками).

Value

A (named) numeric vector of the same length as residuals, or a matrix if there were multiple responses in the fitted model, in either case of class "coef".
The first r rows are labelled by the corresponding coefficients, and the remaining rows are unlabelled. Note that in rank-deficient models the corresponding coefficients will be in a different order if pivoting occurred.
 
 
 
 
 
[1] "Большой Камень" "Братск"         "Верхотурье"     "Вилючинск"     
 [5] "Губкинский"     "Димитровград"   "Дубна"          "Дудинка"       
 [9] "Заречный"       "Игарка"         "Качканар"       "Лесной"        
[13] "Магадан"        "Мегион"         "Муравленко"     "Невьянск"      
[17] "Новоуральск"    "Норильск"       "Ноябрьск"       "Обнинск"       
[21] "Озерск"         "Саров"          "Снежинск"       "Сосновый Бор"  
[25] "Трехгорный"     "Усть-Илимск"   
 
 
 
 
Для (миграции ~ расстояния + населения) 
#Код для диплома. Часть один 
#
#

f <- read.csv("C:/Users/MSI/Desktop/Diploma/raw_data_v71.csv",header = TRUE,  sep=";", quote="\"", encoding = "UTF-8");
names(f) <- c("FROM","TO", "MIGR", "TO_POP", "FROM_LAT", "FROM_LON", "TO_LAT","TO_LON" , "DISTANCE", "FR_OKTMO", "TO_OKTMO", "SAME_REG", "ADM2", "ADM1", "M2PRICE");
MigrMore5 <- f[f$MIGR >5, ];
citiesMore5 <-  unique(MigrMore5$FROM) ;
citiesMore5 <- as.vector(citiesMore5);
for (i in 1:length(citiesMore5))
{
  City <- MigrMore5[MigrMore5$FROM == citiesMore5[i], ];  
  lnMIGR <- log(City$MIGR);
  lnDISTANCE <- log(City$DISTANCE);
  lnPOP <- log(City$TO_POP);
  LinearModel <- lm(lnMIGR ~ lnDISTANCE + lnPOP);
  #препарируем результат
  coef<- LinearModel[[1]];
  res <- LinearModel[[2]];
  dimention<-dim(City);
  #len <- dimention[2];
  deep <-dimention[1];
  prediction <- matrix(0, 1, deep);
  for (i in 1:deep)  #1:6
  {
      prediction[i] <- coef[1] + coef[2]*lnDISTANCE[i] + coef[3]*lnPOP[i] + res[i];  
  }
  plot(lnMIGR, prediction, xlab = "Real migration", ylab = "Predicted migration");
  prediction1 <- as.vector(prediction);
  lm <- lm(prediction1 ~ lnMIGR);
  abline(lm);
}

Для (миграции ~ расстояния + населения + цены на жилье)
 
f <- read.csv("C:/Users/MSI/Desktop/Diploma/raw_data_v71.csv",header = TRUE,  sep=";", quote="\"", encoding = "UTF-8");
names(f) <- c("FROM","TO", "MIGR", "TO_POP", "FROM_LAT", "FROM_LON", "TO_LAT","TO_LON" , "DISTANCE", "FR_OKTMO", "TO_OKTMO", "SAME_REG", "ADM2", "ADM1", "M2PRICE");
MigrMore5 <- f[f$MIGR >5, ];
citiesMore5 <-  unique(MigrMore5$FROM) ;
citiesMore5 <- as.vector(citiesMore5);
for (i in 1:length(citiesMore5))
{
City <- MigrMore5[MigrMore5$FROM == citiesMore5[1], ];  
lnPRICE <- log(City$M2PRICE);
lnMIGR <- log(City$MIGR);
lnDISTANCE <- log(City$DISTANCE);
lnPOP <- log(City$TO_POP);
LinearModel <- lm(lnMIGR ~ lnDISTANCE + lnPOP+lnPRICE);
#препарируем результат
coef<- LinearModel[[1]];
res <- LinearModel[[2]];
dimention<-dim(City);
#len <- dimention[2];
deep <-dimention[1];
prediction <- matrix(0, 1, deep);
for (i in 1:deep)  #1:6
{
    prediction[i] <- coef[1] + coef[2]*lnDISTANCE[i] + coef[3]*lnPOP[i] +coef[4]*lnPRICE + res[i];  
}
plot(lnMIGR, prediction, xlab = "Real migration", ylab = "Predicted migration");
prediction1 <- as.vector(prediction);
lm <- lm(prediction1 ~ lnMIGR);
abline(lm);
}
Для (миграции ~ расстояния + населения + цены на жилье + тот же регион)
 
City <- MigrMore5[MigrMore5$FROM == citiesMore5[1], ];  
lnPRICE <- log(City$M2PRICE);
lnMIGR <- log(City$MIGR);
lnDISTANCE <- log(City$DISTANCE);
lnPOP <- log(City$TO_POP);
LinearModel <- lm(lnMIGR ~ lnDISTANCE + lnPOP+lnPRICE+SAME_REG);
#препарируем результат
coef<- LinearModel[[1]];
res <- LinearModel[[2]];
dimention<-dim(City);
#len <- dimention[2];
deep <-dimention[1];
prediction <- matrix(0, 1, deep);
for (i in 1:deep)  #1:6
{
    prediction[i] <- coef[1] + coef[2]*lnDISTANCE[i] + coef[3]*lnPOP[i] +coef[4]*lnPRICE + res[i];  
}
plot(lnMIGR, prediction, xlab = "Real migration", ylab = "Predicted migration");
prediction1 <- as.vector(prediction);
lm <- lm(prediction1 ~ lnMIGR);
abline(lm); 
 
 
 
 
 

Комментариев нет:

Отправить комментарий