首先,请从http://alexandervanloon.nl/survey_oss.csv下载我的数据集,然后执行以下脚本内容得到一些散点图:
# read data and attach it
survey <- read.table("survey_oss.csv", header=TRUE)
attach(survey)
# plot for inhabitants
png("scatterINHABT.png")
plot(INHABT, OSSADP, xlab="Inhabitants", ylab="Adoption of OSS", las=1)
abline(lm(OSSADP~INHABT)) # regression line (y~x)
dev.off()
# plot for inhabitants divided by 1000
png("scatterINHABT_divided.png")
plot(INHABT/1000, OSSADP, xlab="Inhabitants", ylab="Adoption of OSS", las=1)
abline(lm(OSSADP~INHABT)) # regression line (y~x)
dev.off()
# plot for inhabitants in logarithmic scale
png("scatterINHABT_log.png")
plot(INHABT, OSSADP, xlab="Inhabitants", ylab="Adoption of OSS", las=1, log="x")
abline(lm(OSSADP~INHABT)) # regression line (y~x)
dev.off()
# plot for inhabitants in logarithmic scale and divided by 1000
png("scatterINHABT_log_divided.png")
plot(INHABT/1000, OSSADP, xlab="Inhabitants", ylab="Adoption of OSS", las=1, log="x")
abline(lm(OSSADP~INHABT)) # regression line (y~x)
dev.off()
如您所见,在第一个散点图中,问题在于R
决定使用科学记数法,并且由于异常值,数据看起来很奇怪。这就是为什么我想让 x 轴上的居民数以千计,并且 x 轴也使用对数刻度。
问题是双重的。首先,我可以通过简单地将居民除以 1000 来摆脱科学记数法,但这会产生与第一个图不同的平坦水平回归线。我知道还有其他方法可以解决此问题,例如不想在绘图轴上使用科学记数法,但我无法使那里的代码适应我的情况。
其次,将 x 轴切换为对数刻度也会使回归线变平。谷歌指向https://stat.ethz.ch/pipermail/r-help/2006-January/086500.html作为可能解决方案的第一个结果,我尝试使用abline(lm(OSSADP~log10(INHABT)))
那里建议的方法,但这会产生垂直回归线. 如果我将两者除以 1000 并使用对数刻度,这条线也是水平的。
我是一名社会科学家,没有任何数学和统计学背景,所以我担心我可能遗漏了一些明显的东西,如果是这样,我深表歉意。非常感谢大家的任何潜在帮助。