Вот результаты:
А вот сам скрипт:
#Код для диплома. Часть один
#
#
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);
lnPRICE <- log(City$M2PRICE);
#print(j);
#print(lnPRICE);
SAME_REG <- City$SAME_REG;
LinearModel <- lm(lnMIGR ~ lnDISTANCE + lnPOP + lnPRICE );
coef<- LinearModel[[1]];
#print(i);
print(coef);
res <- LinearModel[[2]];
dimention<-dim(City);
#len <- dimention[2];
deep <-dimention[1];
if( any(is.na(coef[1:4])))
{
print(c(i, "GTFO! Grub a better city!"))
next;
}
#else
#{
prediction <- matrix(0, 1, deep);
for (j in 1:deep)
{
prediction[j] <- coef[1] + coef[2]*lnDISTANCE[j] + coef[3]*lnPOP[j] + coef[4]*lnPRICE[j] #+ coef[5]*SAME_REG[j];
}
adress<- paste0 ("C:\\Users\\MSI\\Desktop\\Diploma\\", i, ".png");
print(adress)
png(adress);
# print(i);
# print(lnMIGR);
# print(prediction);
plot(lnMIGR, prediction, xlab = "Real migration", ylab = "Predicted migration");
title(as.character(citiesMore5[i]));
abline(0,1);
for (j in 1:deep)
{
prediction[j] <- coef[1] + coef[2]*lnDISTANCE[j] + coef[3]*lnPOP[j] + coef[4]*lnPRICE[j] + res[j] #+ coef[5]*SAME_REG[j];
}
dev.off();
print(c(i, "passed"))
#}
}
Так, надо снова убрать отсюда невязки.
Хотя, блин, и так норм вполне хДД - разброс немного дофига.
Ай лан. Научрук сказал выпилить. Значит, выпилим!
Теперь настало время посчитать отклонения. Интереееесно, а совпадут ли они с невязками?....
Ну лан, модифицировала я алгоритм.
countRes <- rep (0, deep); #'cause my compiler say me "object countRes not found...
prediction <- rep (0, deep);
lnMIGR <- as.vector(lnMIGR); #why not?
for (j in 1:deep)
{
prediction[j] <- coef[1] + coef[2]*lnDISTANCE[j] + coef[3]*lnPOP[j] + coef[4]*lnPRICE[j] #+ coef[5]*SAME_REG[j];
}
adress<- paste0 ("C:\\Users\\MSI\\Desktop\\Diploma\\", i, ".png");
print(adress)
png(adress);
plot(lnMIGR, prediction, xlab = "Real migration", ylab = "Predicted migration");
title(as.character(citiesMore5[i]));
abline(0,1);
for (j in 1:deep)
{
prediction[j] <- coef[1] + coef[2]*lnDISTANCE[j] + coef[3]*lnPOP[j] + coef[4]*lnPRICE[j] #+ res[j] #+ coef[5]*SAME_REG[j];
countRes[j] <- prediction[j] - lnMIGR[j];
}
abscountRes<- abs(countRes); #cause I can
dev.off();
#print(c("prediction", prediction));
#print(c("countRes", countRes));
print(c(i, "passed"));
#count residual as abs(predicted - lnMIGR) & in data.frame and compare whith
#automatically counted residuals with lm() function.
#How does write table?... I forgot. Fuck!
CityData <- data.frame(prediction, countRes, abscountRes, lnMIGR, res);
#I ought to write a table
Сохранились данные для последнего города:
(Intercept) lnDISTANCE lnPOP lnPRICE 29.4843122 -0.8773576 2.7149047 -5.3049186 [1] "C:\\Users\\MSI\\Desktop\\Diploma\\1.png" [1] "1" "passed" (Intercept) lnDISTANCE lnPOP lnPRICE -19.3794672 -0.4621249 0.7261156 1.5506031 [1] "C:\\Users\\MSI\\Desktop\\Diploma\\2.png" [1] "2" "passed" (Intercept) lnDISTANCE lnPOP lnPRICE 76.8466006 3.8141986 -0.3617652 -8.1779239 [1] "C:\\Users\\MSI\\Desktop\\Diploma\\3.png" [1] "3" "passed" (Intercept) lnDISTANCE lnPOP lnPRICE -15.2803225 -0.6359375 0.3386784 1.7648999 [1] "C:\\Users\\MSI\\Desktop\\Diploma\\4.png" [1] "4" "passed" (Intercept) lnDISTANCE lnPOP lnPRICE -13.1994550 -0.2358880 0.3877832 1.1868844 [1] "C:\\Users\\MSI\\Desktop\\Diploma\\5.png" [1] "5" "passed" (Intercept) lnDISTANCE lnPOP lnPRICE -21.5115385 -0.9477819 0.3907421 2.3869958 [1] "C:\\Users\\MSI\\Desktop\\Diploma\\6.png" [1] "6" "passed" (Intercept) lnDISTANCE lnPOP lnPRICE -20.7035107 -1.2498314 0.7403301 1.7907024 [1] "C:\\Users\\MSI\\Desktop\\Diploma\\7.png" [1] "7" "passed" (Intercept) lnDISTANCE lnPOP lnPRICE -9.8970255 -0.6955112 0.2408305 1.3855454 [1] "C:\\Users\\MSI\\Desktop\\Diploma\\8.png" [1] "8" "passed" (Intercept) lnDISTANCE lnPOP lnPRICE -44.268107 3.068713 -3.123103 6.573212 [1] "C:\\Users\\MSI\\Desktop\\Diploma\\9.png" [1] "9" "passed" (Intercept) lnDISTANCE lnPOP lnPRICE 10.2295082 -0.2577039 0.2874827 -0.8856239 [1] "C:\\Users\\MSI\\Desktop\\Diploma\\10.png" [1] "10" "passed" (Intercept) lnDISTANCE lnPOP lnPRICE 6.6679963 -1.0220502 0.8448232 -0.8223628 [1] "C:\\Users\\MSI\\Desktop\\Diploma\\11.png" [1] "11" "passed" (Intercept) lnDISTANCE lnPOP lnPRICE -17.7441202 -0.7740952 0.4280146 1.8287646 [1] "C:\\Users\\MSI\\Desktop\\Diploma\\12.png" [1] "12" "passed" (Intercept) lnDISTANCE lnPOP lnPRICE -13.9135456 -0.2475969 0.7041399 0.9254973 [1] "C:\\Users\\MSI\\Desktop\\Diploma\\13.png" [1] "13" "passed" (Intercept) lnDISTANCE lnPOP lnPRICE -5.7745402 -0.7750687 0.9078026 0.2074171 [1] "C:\\Users\\MSI\\Desktop\\Diploma\\14.png" [1] "14" "passed" (Intercept) lnDISTANCE lnPOP lnPRICE -5.0219419 -0.6046783 0.6864889 0.3247134 [1] "C:\\Users\\MSI\\Desktop\\Diploma\\15.png" [1] "15" "passed" (Intercept) lnDISTANCE lnPOP lnPRICE 24.228005 -1.010879 1.497688 -3.301982 [1] "C:\\Users\\MSI\\Desktop\\Diploma\\16.png" [1] "16" "passed" (Intercept) lnDISTANCE lnPOP lnPRICE -7.99067844 -0.79251906 1.20779808 -0.07727839 [1] "C:\\Users\\MSI\\Desktop\\Diploma\\17.png" [1] "17" "passed" (Intercept) lnDISTANCE lnPOP lnPRICE -14.1889447 -0.1917927 0.7302785 0.8847434 [1] "C:\\Users\\MSI\\Desktop\\Diploma\\18.png" [1] "18" "passed" (Intercept) lnDISTANCE lnPOP lnPRICE -11.7166027 -0.4288422 0.7131081 0.8144704 [1] "C:\\Users\\MSI\\Desktop\\Diploma\\19.png" [1] "19" "passed" (Intercept) lnDISTANCE lnPOP lnPRICE -1.9957444 -1.3588665 1.2278396 -0.3995821 [1] "C:\\Users\\MSI\\Desktop\\Diploma\\20.png" [1] "20" "passed" (Intercept) lnDISTANCE lnPOP lnPRICE -16.5786902 -0.7940430 0.9785531 1.0504018 [1] "C:\\Users\\MSI\\Desktop\\Diploma\\21.png" [1] "21" "passed" (Intercept) lnDISTANCE lnPOP lnPRICE -22.3771538 -1.0983045 0.7542901 2.0455875 [1] "C:\\Users\\MSI\\Desktop\\Diploma\\22.png" [1] "22" "passed" (Intercept) lnDISTANCE lnPOP lnPRICE -13.6910908 -1.0223097 0.6740041 1.3242571 [1] "C:\\Users\\MSI\\Desktop\\Diploma\\23.png" [1] "23" "passed" (Intercept) lnDISTANCE lnPOP lnPRICE 13.51368 -1.41809 NA NA [1] "24" "GTFO! Grub a better city!" (Intercept) lnDISTANCE lnPOP lnPRICE -11.1474284 -0.6454736 0.6911271 0.8126065 [1] "C:\\Users\\MSI\\Desktop\\Diploma\\25.png" [1] "25" "passed" (Intercept) lnDISTANCE lnPOP lnPRICE -8.7342022 -0.9006813 0.6811819 0.9039362 [1] "C:\\Users\\MSI\\Desktop\\Diploma\\26.png" [1] "26" "passed"
А вот сам скрипт:
#Код для диплома. Часть один
#
#
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);
lnPRICE <- log(City$M2PRICE);
#print(j);
#print(lnPRICE);
SAME_REG <- City$SAME_REG;
LinearModel <- lm(lnMIGR ~ lnDISTANCE + lnPOP + lnPRICE );
coef<- LinearModel[[1]];
#print(i);
print(coef);
res <- LinearModel[[2]];
dimention<-dim(City);
#len <- dimention[2];
deep <-dimention[1];
if( any(is.na(coef[1:4])))
{
print(c(i, "GTFO! Grub a better city!"))
next;
}
#else
#{
prediction <- matrix(0, 1, deep);
for (j in 1:deep)
{
prediction[j] <- coef[1] + coef[2]*lnDISTANCE[j] + coef[3]*lnPOP[j] + coef[4]*lnPRICE[j] #+ coef[5]*SAME_REG[j];
}
adress<- paste0 ("C:\\Users\\MSI\\Desktop\\Diploma\\", i, ".png");
print(adress)
png(adress);
# print(i);
# print(lnMIGR);
# print(prediction);
plot(lnMIGR, prediction, xlab = "Real migration", ylab = "Predicted migration");
title(as.character(citiesMore5[i]));
abline(0,1);
for (j in 1:deep)
{
prediction[j] <- coef[1] + coef[2]*lnDISTANCE[j] + coef[3]*lnPOP[j] + coef[4]*lnPRICE[j] + res[j] #+ coef[5]*SAME_REG[j];
}
dev.off();
print(c(i, "passed"))
#}
}
Так, надо снова убрать отсюда невязки.
Хотя, блин, и так норм вполне хДД - разброс немного дофига.
Ай лан. Научрук сказал выпилить. Значит, выпилим!
Теперь настало время посчитать отклонения. Интереееесно, а совпадут ли они с невязками?....
Ну лан, модифицировала я алгоритм.
countRes <- rep (0, deep); #'cause my compiler say me "object countRes not found...
prediction <- rep (0, deep);
lnMIGR <- as.vector(lnMIGR); #why not?
for (j in 1:deep)
{
prediction[j] <- coef[1] + coef[2]*lnDISTANCE[j] + coef[3]*lnPOP[j] + coef[4]*lnPRICE[j] #+ coef[5]*SAME_REG[j];
}
adress<- paste0 ("C:\\Users\\MSI\\Desktop\\Diploma\\", i, ".png");
print(adress)
png(adress);
plot(lnMIGR, prediction, xlab = "Real migration", ylab = "Predicted migration");
title(as.character(citiesMore5[i]));
abline(0,1);
for (j in 1:deep)
{
prediction[j] <- coef[1] + coef[2]*lnDISTANCE[j] + coef[3]*lnPOP[j] + coef[4]*lnPRICE[j] #+ res[j] #+ coef[5]*SAME_REG[j];
countRes[j] <- prediction[j] - lnMIGR[j];
}
abscountRes<- abs(countRes); #cause I can
dev.off();
#print(c("prediction", prediction));
#print(c("countRes", countRes));
print(c(i, "passed"));
#count residual as abs(predicted - lnMIGR) & in data.frame and compare whith
#automatically counted residuals with lm() function.
#How does write table?... I forgot. Fuck!
CityData <- data.frame(prediction, countRes, abscountRes, lnMIGR, res);
#I ought to write a table
Сохранились данные для последнего города:
> CityData <- data.frame(prediction, countRes, abscountRes, lnMIGR, res)prediction countRes abscountRes lnMIGR res 1 2.7672967 0.570072123 0.570072123 2.197225 -0.570072123 2 0.7509037 -1.040855778 1.040855778 1.791759 1.040855778 3 3.5887068 0.033358755 0.033358755 3.555348 -0.033358755 4 3.2875790 0.397207287 0.397207287 2.890372 -0.397207287 5 2.0680551 -0.704533589 0.704533589 2.772589 0.704533589 6 4.5512828 -0.236208987 0.236208987 4.787492 0.236208987 7 2.8265355 0.428640216 0.428640216 2.397895 -0.428640216 8 2.7734113 0.827501107 0.827501107 1.945910 -0.827501107 9 2.6688438 0.366258754 0.366258754 2.302585 -0.366258754 10 3.4778743 0.219777754 0.219777754 3.258097 -0.219777754 11 2.1100003 0.030558732 0.030558732 2.079442 -0.030558732 12 4.1904416 -2.521298837 2.521298837 6.711740 2.521298837 13 2.9931516 0.508244992 0.508244992 2.484907 -0.508244992 14 2.0617794 -0.423127273 0.423127273 2.484907 0.423127273 15 3.1900841 1.110642524 1.110642524 2.079442 -1.110642524 16 3.4720867 0.581714944 0.581714944 2.890372 -0.581714944 17 0.4768813 -1.469028853 1.469028853 1.945910 1.469028853 18 2.4878688 -0.946118450 0.946118450 3.433987 0.946118450 19 4.5336369 -1.652571735 1.652571735 6.186209 1.652571735 20 2.2895602 0.497800687 0.497800687 1.791759 -0.497800687 21 2.3274000 0.535640566 0.535640566 1.791759 -0.535640566 22 5.5622905 -0.006054031 0.006054031 5.568345 0.006054031 23 3.2035471 -0.054549442 0.054549442 3.258097 0.054549442 24 3.4701918 1.524281677 1.524281677 1.945910 -1.524281677 25 1.6992851 -0.785621597 0.785621597 2.484907 0.785621597 26 3.9649095 -2.739504820 2.739504820 6.704414 2.739504820 27 3.4142821 -0.274597399 0.274597399 3.688879 0.274597399 28 3.2493475 0.764440848 0.764440848 2.484907 -0.764440848 29 2.9137336 0.515838323 0.515838323 2.397895 -0.515838323 30 2.9925917 0.220002928 0.220002928 2.772589 -0.220002928 31 4.5013872 -0.718968596 0.718968596 5.220356 0.718968596 32 1.9627436 -1.081778835 1.081778835 3.044522 1.081778835 33 1.8372367 0.045477240 0.045477240 1.791759 -0.045477240 34 2.8970870 0.951176827 0.951176827 1.945910 -0.951176827 35 2.1984189 0.118977325 0.118977325 2.079442 -0.118977325 36 3.5134003 -0.097517660 0.097517660 3.610918 0.097517660 37 3.0996335 0.902408955 0.902408955 2.197225 -0.902408955 38 3.5039071 -0.539144207 0.539144207 4.043051 0.539144207 39 3.1003570 0.797771863 0.797771863 2.302585 -0.797771863 40 3.1014143 1.309654840 1.309654840 1.791759 -1.309654840 41 3.1055232 0.161084228 0.161084228 2.944439 -0.161084228 42 3.2626875 1.183245928 1.183245928 2.079442 -1.183245928 43 2.4614093 0.515499159 0.515499159 1.945910 -0.515499159 44 2.5720968 0.174201505 0.174201505 2.397895 -0.174201505 Ну прогнала я их функцей "стебля с листьями"> stem(countRes) The decimal point is at the | -2 | 75 -2 | -1 | 75 -1 | 10 -0 | 98775 -0 | 432110 0 | 00012222444 0 | 55555668889 1 | 0123 1 | 5Ну, пожалуй, когда отличие около нуля - это норм. А вот //условие заработало: //for( i in 1:length(x)){ if ((x[i]<2.2) | (x[i]>3.8)) x[i] <- 1 }[1] 1.0 1.0 1.0 1.0 1.0 1.0 2.2 2.4 2.6 2.8 3.0 3.2 3.4 3.6 1.0 1.0 1.0 1.0 1.0 1.0 [21] 1.0 Ну ладно. Сначала попытаемся прогнать по квантилям :) Все, что не лежит в интервале
- выброс




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