我正在使用logit回归并创建了一个模型,该模型根据FICO得分和请求金额预测获得贷款的可能性。我创建了一个具有概率函数结果的数据框 - 行是潜在的FICO分数,列是潜在的请求贷款值。对于每一行和每一列,都有一个'True'或'False'的值,'True'表示个人获得贷款的概率> = .50。
如何根据数据框中的信息制作一个散点图(FICO得分,贷款值),并绘制一个绿色圆圈,表示“True”和红色X的值为那些'假'的价值?此外,有没有比散点图更好的方式来表示此类数据?
答案 0 :(得分:2)
如果我明白你想做什么,我认为热图可能会更好。 R中有不止一种方法可以做到这一点。ggplot2
geom_tile
提供了一种非常好的方法,只要您首先重塑数据:
# using http://www.free-ocr.com/ to OCR your image gives:
dat <- structure(list(FICO = c(640L, 650L, 660L, 670L, 680L, 690L, 700L,
710L, 720L, 730L, 740L, 750L, 760L, 770L, 780L, 790L, 800L, 810L,
820L, 830L), `1000` = c(FALSE, FALSE, FALSE, FALSE, FALSE, TRUE,
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE,
TRUE, TRUE, TRUE), `1500` = c(FALSE, FALSE, FALSE, FALSE, FALSE,
FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE,
TRUE, TRUE, TRUE, TRUE, TRUE), `2000` = c(FALSE, FALSE, FALSE,
FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE,
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE), `2500` = c(FALSE,
FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE,
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE), `3000` = c(FALSE,
FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE,
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE), `3500` = c(FALSE,
FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE,
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE), `4000` = c(FALSE,
FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE,
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE), `4500` = c(FALSE,
FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE,
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE), `5000` = c(FALSE,
FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE,
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE), `5500` = c(FALSE,
FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE,
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE)), .Names = c("FICO",
"1000", "1500", "2000", "2500", "3000", "3500", "4000", "4500",
"5000", "5500"), class = "data.frame", row.names = c(NA, -20L
))
# now melt that data
dat.m <- melt(dat, "FICO")
colnames(dat.m) <- c("FICO.Score", "Loan.Value", "p(loan)>0.50")
# and use ggplot with geom_tile to make a heatmap
gg <- ggplot(dat.m, aes(x=FICO.Score, y=Loan.Value))
gg <- gg + geom_tile(aes(fill=`p(loan)>0.50`), color="white")
gg <- gg + theme_bw()
gg <- gg + labs(x="", y="")
gg <- gg + theme(panel.border=element_blank())
gg <- gg + theme(panel.grid=element_blank())
gg
答案 1 :(得分:1)
lattice
包很适合您想要的情节。这是一个有假数据的例子
> z <- as.logical(sample(TRUE:FALSE, 10, TRUE))
> d <- data.frame(x = 1:10, y = 101:110, z)
> d
## x y z
## 1 1 101 FALSE
## 2 2 102 FALSE
## 3 3 103 FALSE
## 4 4 104 TRUE
## 5 5 105 FALSE
## 6 6 106 FALSE
## 7 7 107 FALSE
## 8 8 108 FALSE
## 9 9 109 TRUE
## 10 10 110 TRUE
> library(lattice)
> xyplot(y ~ x, data = d, groups = z, col = c("red", "green"), pch = 19)
答案 2 :(得分:1)
您也可以使用ggplot2
执行此操作。
一些FICO数据的样本:
fico <- structure(list(LoanValue = c(20000, 19200, 35000, 9975, 12000, 6000, 10000, 33450, 14675, 7000, 2000, 10625, 27975, 34950, 9600, 24975, 10000, 13900.25, 10000, 5175, 21975, 30000, 6500, 17400, 4000, 7200, 8000, 8000, 3000, 14500, 23850, 14000, 34975, 16000, 7019.25, 7975, 7200, 20125, 11875, 1850, 3200, 12725, 5500, 15650, 9000, 5000, 3000, 19975, 5450, 14000, 8799.04, 3000, 32000, 22250, 7300, 16450, 2500, 6000, 27575, 1000, 12000, 30000, 13500, 9000, 15000, 5300, 7000, 19975, 14993.57, 8000, 23947.48, 7500, 16875, 12000, 6000, 825, 4500, 1600, 10000, 18525, 7450, 3225, 23675, 12000, 25000, 15850, 4175, 10000, 6000, 6000, 7925, 15925, 9500, 6000, 9975, 7000, 4500, 12000, 10375, 4800), FICOscore = c(735L, 715L, 690L, 695L, 695L, 670L, 720L, 705L, 685L, 715L, 670L, 665L, 670L, 735L, 725L, 730L, 695L, 740L, 730L, 760L, 665L, 695L, 665L, 695L, 670L, 705L, 675L, 675L, 765L, 760L, 685L, 685L, 720L, 685L, 675L, 780L, 720L, 830L, 715L, 660L, 670L, 720L, 660L, 660L, 675L, 715L, 710L, 670L, 785L, 705L, 750L, 660L, 700L, 665L, 680L, 725L, 670L, 715L, 690L, 755L, 705L, 715L, 680L, 665L, 730L, 725L, 685L, 685L, 705L, 695L, 695L, 715L, 735L, 665L, 670L, 670L, 790L, 700L, 665L, 725L, 710L, 760L, 680L, 690L, 695L, 725L, 810L, 675L, 750L, 685L, 665L, 765L, 670L, 675L, 675L, 750L, 765L, 735L, 665L, 670L)), .Names = c("LoanValue", "FICOscore"), class = "data.frame", row.names = c(NA, -100L))
创建一个人为的可行性:
fico$getloan <- ifelse(fico$FICOscore<700, "0", "1")
加载ggplot2包:
require(ggplot2)
创建散点图:
ggplot(fico, aes(x=FICOscore, y=LoanValue)) +
geom_point(aes(color=getloan))
给出: