Silver code

ifelse(test,test내용이참,test내용이 거짓)

예를 들어 ifelse(test,“참”,“거짓”) 이라면 아래 silver$wrong.obama 에는 0,1대신 참,거짓으로 출련된다.

silver <- read.csv("C:\\Users\\ms\\Desktop\\silver.csv", header = T)
silver$wrong.obama <- ifelse(silver$result.obama >= silver$obama.min & silver$result.obama <= 
    silver$obama.max, 0, 1)
silver$wrong.romney <- ifelse(silver$result.romney >= silver$romney.min & silver$result.romney <= 
    silver$romney.max, 0, 1)
silver
##             State result.obama result.romney obama.min obama.max
## 1         Alabama        38.56         60.52      32.9      40.5
## 2          Alaska        41.11         54.51      32.7      44.7
## 3         Arizona        43.42         54.99      42.9      49.5
## 4        Arkansas        36.89         60.56      34.8      42.4
## 5      California        59.11         38.56      55.2      61.0
## 6        Colorado        51.27         46.44      47.8      53.8
## 7     Connecticut        50.85         47.83      53.3      59.9
## 8        Delaware        58.61         39.99      54.1      65.1
## 9           D. C.        91.12          7.11      89.8      96.2
## 10        Florida        49.85         49.29      47.1      52.5
## 11        Georgia        45.43         53.40      42.8      48.2
## 12         Hawaii        70.54         27.84      62.6      70.4
## 13          Idaho        32.33         64.84      27.6      36.6
## 14       Illinois        57.29         41.06      56.8      62.8
## 15        Indiana        43.67         54.41      42.3      48.3
## 16           Iowa        51.81         46.38      47.9      54.3
## 17         Kansas        38.04         60.19      31.8      44.0
## 18       Kentucky        38.42         59.89      35.8      44.8
## 19      Louisiana        40.56         57.81      35.8      42.8
## 20          Maine        56.21         40.57      52.3      59.5
## 21       Maryland        61.65         36.60      57.9      63.9
## 22  Massachusetts        60.91         37.49      55.2      62.8
## 23       Michigan        53.29         45.78      50.3      55.7
## 24      Minnesota        52.60         45.01      50.8      56.6
## 25    Mississippi        43.70         55.44      34.2      44.6
## 26       Missouri        44.26         53.88      42.7      48.5
## 27        Montana        41.92         55.18      41.3      49.1
## 28       Nebraska        37.82         60.49      37.1      43.7
## 29         Nevada        52.30         45.73      48.8      54.8
## 30  New Hampshire        52.19         46.46      47.9      54.9
## 31     New Jersey        57.97         41.02      52.2      58.8
## 32     New Mexico        52.87         42.97      50.5      57.7
## 33       New York        62.70         35.90      59.5      65.3
## 34 North Carolina        48.29         50.45      46.3      51.5
## 35   North Dakota        38.92         58.65      38.1      45.9
## 36           Ohio        50.29         48.29      48.6      54.0
## 37       Oklahoma        33.23         66.77      30.0      37.6
## 38         Oregon        53.38         43.59      49.9      57.3
## 39   Pennsylvania        52.47         46.27      49.9      55.1
## 40   Rhode Island        62.88         35.05      57.5      66.1
## 41 South Carolina        43.89         54.75      38.7      47.7
## 42   South Dakota        39.86         57.89      38.3      46.7
## 43      Tennessee        39.07         59.48      37.5      45.3
## 44          Texas        41.37         57.20      38.1      44.3
## 45           Utah        24.91         72.69      23.7      31.9
## 46        Vermont        66.92         30.80      61.4      71.0
## 47       Virginia        50.57         47.85      48.2      53.2
## 48     Washington        55.22         42.75      52.7      59.7
## 49  West Virginia        35.52         62.32      36.5      46.1
## 50      Wisconsin        52.75         46.13      49.5      55.3
## 51        Wyoming        27.86         68.62      24.9      36.9
##    romney.min romney.max wrong.obama wrong.romney
## 1        59.0       66.6           0            0
## 2        53.8       65.8           0            0
## 3        49.8       56.4           0            0
## 4        56.0       63.6           0            0
## 5        37.8       43.6           0            0
## 6        45.3       51.3           0            0
## 7        39.2       45.8           1            1
## 8        34.3       45.3           0            0
## 9         3.2        9.6           0            0
## 10       47.1       52.5           0            0
## 11       51.5       56.9           0            0
## 12       28.8       36.6           1            1
## 13       61.7       70.7           0            0
## 14       36.6       42.6           0            0
## 15       51.0       57.0           0            0
## 16       44.7       51.1           0            0
## 17       55.0       67.2           0            0
## 18       54.3       63.3           0            0
## 19       56.4       63.4           0            0
## 20       39.4       46.6           0            0
## 21       35.1       41.1           0            0
## 22       36.1       43.7           0            0
## 23       43.2       48.6           0            0
## 24       42.2       48.0           0            0
## 25       55.0       65.4           0            0
## 26       50.8       56.6           0            0
## 27       49.3       57.1           0            0
## 28       55.6       62.2           0            0
## 29       44.3       50.3           0            0
## 30       44.4       51.4           0            0
## 31       40.2       46.8           0            0
## 32       41.1       48.3           0            0
## 33       34.1       39.9           0            0
## 34       48.0       53.2           0            0
## 35       52.8       60.6           0            0
## 36       45.0       50.4           0            0
## 37       62.1       69.7           0            0
## 38       40.4       47.8           0            0
## 39       44.0       49.2           0            0
## 40       32.1       40.7           0            0
## 41       51.6       60.6           0            0
## 42       52.0       60.4           0            0
## 43       53.9       61.7           0            0
## 44       55.1       61.3           0            0
## 45       66.5       74.7           0            0
## 46       27.9       37.5           0            0
## 47       46.2       51.2           0            0
## 48       39.1       46.1           0            0
## 49       52.7       62.3           1            1
## 50       44.0       49.8           0            0
## 51       61.7       73.7           0            0

plot area 설정

alt text

par(mar=c(아래,왼쪽,위,오른쪽))으로 Outer Margin Area까지의 여백을 지정할수있다.


par(mar = c(0, 0, 0, 0))  ##Outer Margin Area까지의 여백을 0으로 지정

plot() 설정

이 분석에서는 x,y의 상관관계를 그리기 위한 plot이 아니다.따라서 x,y를 NULL로 지정하고 만들 plot의 x,y축 범위를 xlim,ylim를 통해 설정하고 x,y축을그리지 않기때문에 yaxt,xaxt옵션으로 “n"로 지정한다.

plot(NULL, xlim = c(-30, 100), ylim = c(-1, 54), yaxt = "n", ann = FALSE, xaxt = "n", 
    bty = "n")

plot of chunk unnamed-chunk-3

text()로 plot에 첨가

text(x축,y축) 이때 pos와 cex옵션을 추가할수있다.— pos는 pos=1 or 2 or 3 or 4 를 통해 지정된 자표보다 순서대로 아래,왼쪽,위,오른쪽으로에 text를 첨가할수있다 — cex는 text의 크기를 설정할수있다.

text(50, 53, "Comparison of Nate Silver Forecasts and Results", pos = 3)

rect()로 사각형그리기

rect(x축 시작,y축 시작,x축 끝,y축 끝) 범위를 넣고 col 옵션으로 채워넣을 색을 선택하여 사각형을 만들수있다. —border=T 일경우 그려진 사각형에 테두리를 그릴수있다. —아래 함수는 loop를 이용하여 y축에 2줄 간격으로 사각형을 그리고있다.

for (i in seq(from = 1, to = 51, by = 2)) {
    rect(-26, i - 0.5, 100, i + 0.5, col = "#DDDDDD33", border = NA)
}


segments()

segments(x축시작,y축시작,x축 끝,y축 끝) 으로 x,y축의 범위를 지정하여 선을 그릴수있다.— 옵션으로는 col,lty,lwd를 지정할수있다.— 아래 코드에서는 loop를 통하여 x축 10단위마다 y축은 0.5부터-51.5까지 선을그리는 코드다.

for (i in seq(from = 10, to = 90, by = 10)) {
    segments(i, 0.5, i, 51.5, col = "#CCCCCC66")
    text(i, 51, paste(i, "%", sep = ""), cex = 0.4, pos = 3)
}
segments(50, -0.5, 50, 51.5, col = "#00FF0033")

points() points(x,y,cex,pch)
points() 는 지정된 좌표에 pch를 통해 다양한 symbol을 입력할수있다.

코드 설명— State를 위에서 부터 입력하기위해 j<-52-i를 만들어 y축 좌표를 설정하였고— segments로 그린 두 직선(각각의 min-max)이 겹치지 않기 위해 j-0.3,j-0.1로 다르게 지정하였다.— if() 를써서 예측이 틀린곳은 (2,j)위치에 지정된색으로 *를 표시한다. 마지막으로 points()를 이용하여 예측범위 위에 실제 결과를 symbol로 표시하였다.

for (i in seq_along(silver$State)) {
    j <- 52 - i
    segments(silver$obama.min[i], j - 0.3, silver$obama.max[i], j - 0.3, col = "blue")
    segments(silver$romney.min[i], j - 0.1, silver$romney.max[i], j - 0.1, col = "red")
    text(0, j, silver$State[i], cex = 0.7, pos = 2)
    if (silver$wrong.obama[i]) {
        text(2, j, "*", col = "blue", cex = 0.7, pos = 2)
    }
    if (silver$wrong.romney[i]) {
        text(4, j, "*", col = "red", cex = 0.7, pos = 2)
    }
    points(silver$result.obama[i], j + 0, cex = 0.6, pch = 25, col = "#0000FFAA", 
        bg = "#0000FFAA")
    points(silver$result.romney[i], j + 0.2, cex = 0.6, pch = 25, col = "#FF0000AA", 
        bg = "#FF0000AA")
}


그려진 plot 아래 segments(),text(),points()이용하여 plot에 사용된 기호를 정리하였다.

segments(12, -1, 22, -1, col = "blue")
segments(12, -0.8, 22, -0.8, col = "red")
text(22, -1, "Forecasts", pos = 4, cex = 0.7)
points(60, -0.7, cex = 0.6, pch = 25, col = "#FF0000AA", bg = "#FF0000AA")
points(62, -0.7, cex = 0.6, pch = 25, col = "#0000FFAA", bg = "#0000FFAA")
text(63, -1, "Election Results", pos = 4, cex = 0.7)
par(mar = c(5.1, 4.1, 4.1, 2.1))

결과

silver <- read.csv("C:\\Users\\ms\\Desktop\\silver.csv", header = T)
silver$wrong.obama <- ifelse(silver$result.obama >= silver$obama.min & silver$result.obama <= 
    silver$obama.max, 0, 1)
silver$wrong.romney <- ifelse(silver$result.romney >= silver$romney.min & silver$result.romney <= 
    silver$romney.max, 0, 1)

par(mar = c(0, 0, 0, 0))
plot(NULL, xlim = c(-30, 100), ylim = c(-1, 54), yaxt = "n", ann = FALSE, xaxt = "n", 
    bty = "n")

text(50, 53, "Comparison of Nate Silver Forecasts and Results", pos = 3)
for (i in seq(from = 1, to = 51, by = 2)) {
    rect(-26, i - 0.5, 100, i + 0.5, col = "#DDDDDD33", border = NA)
}
for (i in seq(from = 10, to = 90, by = 10)) {
    segments(i, 0.5, i, 51.5, col = "#CCCCCC66")
    text(i, 51, paste(i, "%", sep = ""), cex = 0.4, pos = 3)
}
segments(50, -0.5, 50, 51.5, col = "#00FF0033")

for (i in seq_along(silver$State)) {
    j <- 52 - i
    segments(silver$obama.min[i], j - 0.3, silver$obama.max[i], j - 0.3, col = "blue")
    segments(silver$romney.min[i], j - 0.1, silver$romney.max[i], j - 0.1, col = "red")
    text(0, j, silver$State[i], cex = 0.7, pos = 2)
    if (silver$wrong.obama[i]) {
        text(2, j, "*", col = "blue", cex = 0.7, pos = 2)
    }
    if (silver$wrong.romney[i]) {
        text(4, j, "*", col = "red", cex = 0.7, pos = 2)
    }
    points(silver$result.obama[i], j + 0, cex = 0.6, pch = 25, col = "#0000FFAA", 
        bg = "#0000FFAA")
    points(silver$result.romney[i], j + 0.2, cex = 0.6, pch = 25, col = "#FF0000AA", 
        bg = "#FF0000AA")
}

segments(12, -1, 22, -1, col = "blue")
segments(12, -0.8, 22, -0.8, col = "red")
text(22, -1, "Forecasts", pos = 4, cex = 0.7)
points(60, -0.7, cex = 0.6, pch = 25, col = "#FF0000AA", bg = "#FF0000AA")
points(62, -0.7, cex = 0.6, pch = 25, col = "#0000FFAA", bg = "#0000FFAA")
text(63, -1, "Election Results", pos = 4, cex = 0.7)

plot of chunk unnamed-chunk-9

par(mar = c(5.1, 4.1, 4.1, 2.1))