1

首先,请从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 并使用对数刻度,这条线也是水平的。

我是一名社会科学家,没有任何数学和统计学背景,所以我担心我可能遗漏了一些明显的东西,如果是这样,我深表歉意。非常感谢大家的任何潜在帮助。

4

2 回答 2

0

科学记数法曾在 R 邮件列表中介绍过,但您可以控制 R 如何选择何时使用科学记数法options()$scipen

options(scipen=10)
plot(INHABT, OSSADP, xlab="Inhabitants", ylab="Adoption of OSS")

plot其次,您除以 1000 的问题是您在和中都没有除以一千abline。这可以解决问题:

plot(INHABT/1000, OSSADP, xlab="Inhabitants", ylab="Adoption of OSS")
abline(lm(OSSADP~I(INHABT/1000))) # Fixed regression line.

是必要的I,因为该/符号在 s 中具有不同的含义formula

此外,您的las参数是不必要的。

于 2012-07-30T21:13:10.827 回答
0

我这样使用时解决了水平线的问题log="x"

plot(INHABT, OSSADP, xlab="Inhabitants", ylab="Adoption of OSS", log="x")
abline(lm(OSSADP~log10(INHABT)))

log10而不只是log

于 2018-10-23T02:11:24.467 回答