まず、データセットを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軸にも対数目盛を使用させたいと考えています。
問題は2つあります。まず、住民を1000で割るだけで科学的記数法を取り除くことができますが、これにより、最初のプロットとは異なり、平坦な水平回帰直線が生成されます。プロット軸に科学的記数法を使用したくないなど、これを修正する他の方法があることは知っていますが、そこでのコードを自分の状況に適合させることができませんでした。
次に、x軸を対数目盛に切り替えると、回帰直線も平坦になります。グーグルは可能な解決策の最初の結果としてhttps://stat.ethz.ch/pipermail/r-help/2006-January/086500.htmlabline(lm(OSSADP~log10(INHABT)))
を指摘し、そこで提案されているものを使用してみましたが、それは垂直回帰線を生成します。そして、両方を1000で割り、対数目盛を使用すると、線も水平になります。
私は数学や統計のバックグラウンドを持たない社会科学者なので、何か明らかなことを見逃したのではないかと心配しています。潜在的な助けをありがとうございました。