我正在编写一个(无需再详述)数据分析和制图程序。 自2004年以来,我使用的数据集是Google趋势在全球范围内的“人工智能”一词。自2004年以来的几个月和搜索兴趣水平。 我试图从内置的b样条函数bs中提取分段多项式,因为它们对于绘制它们是必需的。 具体来说,我一直在使用Zheyuan Li编写的R库SplinesUtils,它引用了另一个stackOverflow线程here。
我的问题不是使程序包正常运行或不使用函数,原因在于假定正常工作的函数似乎没有给我准确的多项式。这就是我认为的原因: google trends data picture the given polynomials in R those polynomials plotted中的desmos 您可以看到生成的多项式似乎与数据不匹配。显然,我没有添加边界,但是即使如此,它们也应该与数据非常接近。
我已经通过电子邮件发送了该库的创建者,并说明了我的问题。 但是,我不太确定这是库的问题,还是我使用bs()函数时的问题更多。我是否弄错了x和y方向?语法稍微不正确吗?是的,我是R和花键的新手,所以我不确定所有这些。
我从Google下载了数据,并将其命名为AIData.csv,但我不确定如何托管它,以便回答该问题的任何人都可以看到,因此我将其放在了pastebin中。 https://pastebin.com/itQcWWSg
library(SplinesUtils)
pyin <- c("AIData.csv","the directory you save this R file in (which should also have AIData.csv in it)")
setwd <- pyin[2]#sets working directory to the above string
csvfile <- read.csv(file=pyin[1],header=TRUE)#reads the csv file into a dataframe with headers
names(csvfile) <- c("months","searchInterest")#renames the headers becuase they're very long and cause formatting issues
model <- lm(csvfile$searchInterest ~ bs(csvfile$months, df=5))#a linear model of months against a bspline of search interest
piecewisePoly <- RegBsplineAsPiecePoly(model, "bs(csvfile$months, df = 5)",shift=FALSE)#creates the piecewise polynomials
piecewisePoly
piecewisePoly$PiecePoly$coef
我希望分段多项式大致遵循与Google搜索趋势图相同的线。没有参见上面的desmos链接。运行上面的代码的直接输出是这样的:
Loading required package: splines
3 piecewise polynomials of degree 3 are constructed!
Use 'summary' to export all of them.
The first 3 are printed below.
3.1 - 3.14 * x - 0.047 * x ^ 2 - 0.000246 * x ^ 3
-34.5 - 1.16 * x - 0.0123 * x ^ 2 - 4.27e-05 * x ^ 3
-544 + 12.3 * x + 0.107 * x ^ 2 + 0.00031 * x ^ 3
[,1] [,2] [,3]
[1,] 3.0953478761 -3.448227e+01 -5.435058e+02
[2,] -3.1420823054 -1.164313e+00 1.234959e+01
[3,] 0.0469800796 1.228237e-02 -1.073097e-01
[4,] -0.0002456503 -4.273970e-05 3.100391e-04
[Finished in 0.7s]
答案 0 :(得分:0)
李哲远回复了我的电子邮件,并作了一些澄清。我将在下面将其发布给具有相同查询的任何人。
” 您会忘记model $ coefficients [1]中的模型截距。您需要将此截距添加到每个分段多项式中以恢复拟合值。您可以使用
finalcoef <- piecewisePoly$PiecePoly$coef
finalcoef[1, ] <- finalcoef[1, ] + model$coefficients[1]
finalcoef
我认为这是软件包中最令人困惑的部分:报告的样条不是拟合值。我在?RegBsplineAsPiecePoly下的示例中仅以一种不太清楚的方式提到了这一点。 “