如何在python中执行逐步回归?在SCIPY中有OLS的方法,但我不能逐步进行.在这方面的任何帮助都将是一个很大的帮助.谢谢.
编辑:我正在尝试建立一个线性回归模型.我有5个自变量并使用前向逐步回归,我的目标是选择变量,使我的模型具有最低的p值.以下链接解释了目标:
再次感谢.
在给出明显等效的输入时,我试图理解这两个平滑函数的不同行为.我的理解是,locpoly
只需要一个固定的带宽参数,同时locfit
也可以在其平滑参数中包含一个变化的部分(最近邻分数," nn
").我认为将这个变化部分设置为零locfit
应该使" h
"组件像所用的固定带宽一样locpoly
,但显然不是这种情况.
一个工作的例子:
library(KernSmooth)
library(locfit)
set.seed(314)
n <- 100
x <- runif(n, 0, 1)
eps <- rnorm(n, 0, 1)
y <- sin(2 * pi * x) + eps
plot(x, y)
lines(locpoly(x, y, bandwidth=0.05, degree=1), col=3)
lines(locfit(y ~ lp(x, nn=0, h=0.05, deg=1)), col=4)
Run Code Online (Sandbox Code Playgroud)
产生这个情节:
locpoly
给出平滑的绿线,并locfit
给出摇摆的蓝线.显然,这里locfit
具有较小的"有效"带宽,即使假定的带宽参数对于每个具有相同的值.
这些功能有何不同?
在发布之前我做了很多搜索,发现这个问题可能正是我的问题.但是,我尝试了答案中提出的建议,但不幸的是,这并没有解决它,我无法添加评论以请求进一步解释,因为我是这里的新成员.
无论如何,我想在Python中使用带有scikit-learn的高斯过程来开始一个简单但真实的案例(使用scikit-learn文档中提供的示例).我有一个名为X的2D输入集(8对2个参数).我有8个相应的输出,聚集在1D阵列y中.
# Inputs: 8 points
X = np.array([[p1, q1],[p2, q2],[p3, q3],[p4, q4],[p5, q5],[p6, q6],[p7, q7],[p8, q8]])
# Observations: 8 couples
y = np.array([r1,r2,r3,r4,r5,r6,r7,r8])
Run Code Online (Sandbox Code Playgroud)
我定义了一个输入测试空间x:
# Input space
x1 = np.linspace(x1min, x1max) #p
x2 = np.linspace(x2min, x2max) #q
x = (np.array([x1, x2])).T
Run Code Online (Sandbox Code Playgroud)
然后我实例化GP模型,使其适合我的训练数据(X,y),并在我的输入空间x上进行1D预测y_pred:
from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import RBF, ConstantKernel as C
kernel = C(1.0, (1e-3, 1e3)) * RBF([5,5], (1e-2, 1e2))
gp = GaussianProcessRegressor(kernel=kernel, …
Run Code Online (Sandbox Code Playgroud) 我想强制特定的变量进入glm回归而不完全指定每个变量.我的真实数据集有大约200个变量.到目前为止,我还没有在我的在线搜索中找到这样的样本.
例如(只有3个变量):
n=200
set.seed(39)
samp = data.frame(W1 = runif(n, min = 0, max = 1), W2=runif(n, min = 0, max = 5))
samp = transform(samp, # add A
A = rbinom(n, 1, 1/(1+exp(-(W1^2-4*W1+1)))))
samp = transform(samp, # add Y
Y = rbinom(n, 1,1/(1+exp(-(A-sin(W1^2)+sin(W2^2)*A+10*log(W1)*A+15*log(W2)-1+rnorm(1,mean=0,sd=.25))))))
Run Code Online (Sandbox Code Playgroud)
如果我想包含所有主要术语,这有一个简单的快捷方式:
glm(Y~., family=binomial, data=samp)
Run Code Online (Sandbox Code Playgroud)
但是说我想要包括所有主要术语(W1,W2和A)加上W2 ^ 2:
glm(Y~A+W1+W2+I(W2^2), family=binomial, data=samp)
Run Code Online (Sandbox Code Playgroud)
这有什么捷径吗?
[在发布之前编辑自己:]这个有效! glm(formula = Y ~ . + I(W2^2), family = binomial, data = samp)
好的,那么这个呢!
我想省略一个主要的术语变量,只包括两个主要术语(A,W2)和W2 ^ 2和W2 ^ 2:A:
glm(Y~A+W2+A*I(W2^2), family=binomial, data=samp)
Run Code Online (Sandbox Code Playgroud)
显然只有几个变量不需要快捷方式,但我使用高维数据.当前数据集"仅"有200个变量,但其他一些变量有成千上万个.
在最小二乘模型中,成本函数被定义为预测值和实际值之间的差的平方,作为输入的函数.
当我们进行逻辑回归时,我们将成本函数更改为对数函数,而不是将其定义为sigmoid函数(输出值)和实际输出之间差异的平方.
是否可以更改和定义我们自己的成本函数来确定参数?
我有很多样本(y_i, (a_i, b_i, c_i))
,y
假设在a,b,c
多达一定程度上变化为多项式.例如,对于给定的一组数据和2级,我可能会生成该模型
y = a^2 + 2ab - 3cb + c^2 +.5ac
这可以使用最小二乘法完成,并且是numpy的polyfit例程的略微扩展.Python生态系统中是否存在标准实现?
我试图让Newey-West标准错误与包中的pmg()
(Mean Groups/Fama-MacBeth估算器)输出一起使用plm
.
按照这里的例子:
require(foreign)
require(plm)
require(lmtest)
test <- read.dta("http://www.kellogg.northwestern.edu/faculty/petersen/htm/papers/se/test_data.dta")
fpmg <- pmg(y~x, test, index=c("firmid", "year")) # Time index in second position, unlike the example
Run Code Online (Sandbox Code Playgroud)
我可以coeftest
直接使用,以获得Fama-MacBeth标准错误:
# Regular “Fama-MacBeth” standard errors
coeftest(fpmg)
# t test of coefficients:
#
# Estimate Std. Error t value Pr(>|t|)
# (Intercept) 0.032470 0.071671 0.453 0.6505
# x 0.969212 0.034782 27.866 <2e-16 ***
# ---
# Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ …
Run Code Online (Sandbox Code Playgroud) 我想将我的数据分成火车和测试集,我应该在拆分之前或之后对数据进行规范化吗?在构建预测模型时是否有任何区别?提前致谢.
split regression machine-learning normalization train-test-split
我有一堆数据,通常是a,b,c,...,y形式
其中y = f(a,b,c ......)
它们中的大多数是三个和四个变量,并且有10k到10M的记录.我的一般假设是它们本质上是代数的,例如:
y = P1 a ^ E1 + P2 b ^ E2 + P3 c ^ E3
不幸的是,我上次的统计分析课是在20年前.获得f近似值的最简单方法是什么?开源工具具有非常小的学习曲线(即我可以在一小时左右得到合适的近似值)是理想的.谢谢!
regression ×10
python ×3
r ×3
statistics ×3
c ×1
c++ ×1
data-mining ×1
gaussian ×1
glm ×1
numpy ×1
scipy ×1
smoothing ×1
split ×1