scikit-learn是否提供使用高斯或多项式内核进行回归的工具?我查看了API,但我没有看到.有人在scikit之上构建了一个包 - 学习这样做吗?
我已经绘制了一个二维直方图,我可以用线,点等添加到图中.现在我试图在密集点的区域应用线性回归拟合,但是我的线性回归线似乎完全偏离它的位置应该?为了证明这里是我左边的情节,有一个低回归拟合和线性拟合.
lines(lowess(na.omit(a),na.omit(b),iter=10),col='gray',lwd=3)
abline(lm(b[cc]~a[cc]),lwd=3)
Run Code Online (Sandbox Code Playgroud)
这里a和b是我的值,cc是最密集部分内的点(即大多数点在那里),红色+黄色+蓝色.

为什么我的回归线看起来不像右边那样(手绘合身)?如果我正在绘制一条最合适的线,它会在那里吗?
我有很多类似的情节,但我仍然得到相同的结果....

是否有任何替代线性回归拟合对我来说可能更好?
我想知道如何约束某些参数lm()以获得正系数.有一些包或函数(例如display)可以使所有系数和拦截为正.
例如,在这个例子中,我只想强迫x1并x2具有正系数.
x1=c(NA,rnorm(99)*10)
x2=c(NA,NA,rnorm(98)*10)
x3=rnorm(100)*10
y=sin(x1)+cos(x2)-x3+rnorm(100)
lm(y~x1+x2+x3)
Call:
lm(formula = y ~ x1 + x2 + x3)
Coefficients:
(Intercept) x1 x2 x3
-0.06278 0.02261 -0.02233 -0.99626
Run Code Online (Sandbox Code Playgroud)
我试过功能nnnpls()包nnls,它可以轻松控制系数符号.遗憾的是,由于数据中的NA问题,我无法使用它,因为此函数不允许NA.
我看到函数NA可用于应用约束但我无法使其工作.
有人能让我知道我该怎么办?
我的数据框如下所示:
unique.groups<- letters[1:5]
unique_timez<- 1:20
groups<- rep(unique.groups, each=20)
my.times<-rep(unique_timez, 5)
play.data<- data.frame(groups, my.times, y= rnorm(100), x=rnorm(100), POP= 1:100)
Run Code Online (Sandbox Code Playgroud)
我想运行以下加权回归:
plm(y~x + factor(my.times) ,
data=play.data,
index=c('groups','my.times'), model='within', weights= POP)
Run Code Online (Sandbox Code Playgroud)
但我不相信plm包允许重量.答案我正在寻找下面模型中的系数:
fit.regular<- lm(y~x + factor(my.times) + factor(my.groups),
weights= POP, data= play.data)
desired.answer<- coefficients(fit.regular)
Run Code Online (Sandbox Code Playgroud)
但是,我正在寻找plm包的答案,因为使用更大的数据集和许多组获得带有plm的估计器的系数要快得多.
我正在尝试使用分类属性对R进行线性回归,并观察到我没有得到每个不同因子水平的系数值.
请参阅下面的代码,我有状态的5个因子级别,但只能看到4个系数值.
> states = c("WA","TE","GE","LA","SF")
> population = c(0.5,0.2,0.6,0.7,0.9)
> df = data.frame(states,population)
> df
states population
1 WA 0.5
2 TE 0.2
3 GE 0.6
4 LA 0.7
5 SF 0.9
> states=NULL
> population=NULL
> lm(formula=population~states,data=df)
Call:
lm(formula = population ~ states, data = df)
Coefficients:
(Intercept) statesLA statesSF statesTE statesWA
0.6 0.1 0.3 -0.4 -0.1
Run Code Online (Sandbox Code Playgroud)
我还通过执行以下操作尝试使用更大的数据集,但仍然看到相同的行为
for(i in 1:10)
{
df = rbind(df,df)
}
Run Code Online (Sandbox Code Playgroud)
编辑:感谢eipi10,MrFlick和经济的回应.我现在明白其中一个级别被用作参考级别.但是当我得到一个状态值为"GE"的新测试数据时,如何用等式y = m1x1 + m2x2 + ... + c代替?
我也尝试将数据展平,使得每个因子级别都得到它的单独列,但是对于其中一个列,我得到NA作为系数.如果我有一个状态为'WA'的新测试数据,我怎样才能获得'人口价值'?我用什么代替它的系数?
> df1 …Run Code Online (Sandbox Code Playgroud) 我在查询文件中的不同列上执行多次回归.我的任务是从R中的回归函数lm中提取某些结果.
到目前为止,我有,
> reg <- lm(query$y1 ~ query$x1 + query$x2)
> summary(reg)
Call:
lm(formula = query$y1 ~ query$x1 + query$x2)
Residuals:
1 2 3 4
7.68 -4.48 -7.04 3.84
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1287.26 685.75 1.877 0.312
query$x1 -29.30 20.92 -1.400 0.395
query$x2 -116.90 45.79 -2.553 0.238
Residual standard error: 11.97 on 1 degrees of freedom
Multiple R-squared: 0.9233, Adjusted R-squared: 0.7699
F-statistic: 6.019 on 2 and 1 DF, p-value: 0.277
Run Code Online (Sandbox Code Playgroud)
要提取系数,r平方和F统计,我使用以下内容:
reg$coefficients
summary(reg)$r.squared
summary(reg)$fstatistic
Run Code Online (Sandbox Code Playgroud)
我想提取0.2值的p值. …
考虑一下我们有一个数据矩阵 数据点
我们有兴趣将这些数据点映射到更高维度的特征空间.我们可以通过使用d次多项式来做到这一点.因此对于一系列
数据指向新的数据矩阵
我研究了一个相关的脚本(Andrew Ng.在线课程),它将二维数据点转换为更高的特征空间.但是,我无法想出一种在任意高维样本中推广的方法,.这是代码:
d = 6;
m = size(D,1);
new = ones(m);
for k = 1:d
for l = 0:k
new(:, end+1) = (x1.^(k-l)).*(x2.^l);
end
end
Run Code Online (Sandbox Code Playgroud)
我们可以矢量化这段代码吗?还给出了数据矩阵 你能否就如何使用d维多项式将任意维度的数据点转换为更高维数的方法提出建议?
PS:d维数据点的推广将非常有用.
plot.lm()如何确定残差与拟合图的哪些点是异常值(即标记的内容)?我在文档中找到的唯一一件事是:
细节
sub.caption-默认情况下,函数调用 - 在每个绘图上显示为副标题(在x轴标题下),当绘图位于不同页面上时,或者当有多个绘图时作为外边距中的副标题(如果有)每页.
'Scale-Location'图也称为'Spread-Location'或'S-L'图,它采用绝对残差的平方根来减小偏度(sqrt(| E |))比| | E | 对于高斯零均值E).
'S-L',QQ和剩余杠杆图使用具有相同方差的标准化残差(在假设下).它们以R [i] /(s*sqrt(1-h.ii))给出,其中h.ii是帽子矩阵的对角线条目,影响()$ hat(另见帽子),以及残差 - 杠杆图使用R [i]的标准化Pearson残差(residuals.glm(type ="pearson")).
Residual-Leverage图显示Cook的距离等于Cook.levels的值(默认为0.5和1),并省略带有警告的杠杆的情况.如果杠杆率是恒定的(通常是在平衡的aov情况下的情况),则该图使用因子水平组合而不是x轴的杠杆作用.(因子水平按平均拟合值排序.)
在Cook的距离与杠杆/(1-leverage)图中,幅度相等的标准化残差的轮廓是通过原点的线.轮廓线标有大小.
但它没有说明如何生成残差与拟合图以及如何选择要标记的点.
更新:Zheyuan Li的回答表明,残差与拟合图标点的方式实际上只是通过查看残差最大的3个点.确实如此.它可以通过以下"极端"示例来证明.
x = c(1,2,3,4,5,6)
y = c(2,4,6,8,10,12)
foo = data.frame(x,y)
model = lm(y ~ x, data = foo)
Run Code Online (Sandbox Code Playgroud)
这是我的数据框,有两列Y(响应)和X(协变量):
## Editor edit: use `dat` not `data`
dat <- structure(list(Y = c(NA, -1.793, -0.642, 1.189, -0.823, -1.715,
1.623, 0.964, 0.395, -3.736, -0.47, 2.366, 0.634, -0.701, -1.692,
0.155, 2.502, -2.292, 1.967, -2.326, -1.476, 1.464, 1.45, -0.797,
1.27, 2.515, -0.765, 0.261, 0.423, 1.698, -2.734, 0.743, -2.39,
0.365, 2.981, -1.185, -0.57, 2.638, -1.046, 1.931, 4.583, -1.276,
1.075, 2.893, -1.602, 1.801, 2.405, -5.236, 2.214, 1.295, 1.438,
-0.638, 0.716, 1.004, -1.328, -1.759, -1.315, 1.053, 1.958, -2.034,
2.936, -0.078, -0.676, -2.312, …Run Code Online (Sandbox Code Playgroud) 我想group_by %>% do(tidy(*))用来运行几个线性回归模型,并将模型结果提取到数据框.每个模型的数据框应包括以下内容:结果变量,暴露变量,样本大小,β系数,SE和p值.
library(tidyverse)
data("mtcars")
outcomes <- c("wt, mpg", "hp", "disp")
exposures <- c("gear", "vs", "am")
covariates <- c("drat", "qsec")
Run Code Online (Sandbox Code Playgroud)
模型应该针对所有协变量调整每次曝光的每个结果,例如
lm(wt ~ factor(gear)+drat+qsec, mtcars, na.action = na.omit)
lm(wt ~ factor(vs)+drat+qsec, mtcars, na.action = na.omit)
etc...
Run Code Online (Sandbox Code Playgroud)
最终的代码可能看起来像这样?
models <- (mtcars %>%
gather(x_var, x_value, -c(y_var, y_i, cv1:cv3)) %>%
group_by(y_var, x_var) %>%
do(broom::tidy(lm(y_i ~ x_value + cv1 + cv2 + cv3, data = .))))
Run Code Online (Sandbox Code Playgroud) r ×8
lm ×4
regression ×3
plot ×2
best-fit ×1
glm ×1
mapping ×1
matlab ×1
octave ×1
p-value ×1
panel-data ×1
plm ×1
scatter-plot ×1
scikit-learn ×1